Fix the issue that cannot delete resource

Change-Id: Id0e7e955c2b787a6e2d1fd06f58551ac273f54bf
This commit is contained in:
lvdongbing 2016-03-14 22:59:36 -04:00
parent fbe61bc996
commit 16726ae7af
5 changed files with 17 additions and 15 deletions

View File

@ -172,7 +172,8 @@ class BileanScheduler(object):
def _notify_task(self, user_id):
user = user_mod.User.load(self.context, user_id=user_id)
msg = {'user': user.id, 'notification': 'The balance is almost use up'}
reason = "The balance is almost use up"
msg = {'user': user.id, 'notification': reason}
self.notifier.info('billing.notify', msg)
if user.status != user.FREEZE and user.rate > 0:
user.do_bill(self.context)
@ -182,6 +183,7 @@ class BileanScheduler(object):
except exception.NotFound as e:
LOG.warn(_("Failed in deleting job: %s") % six.text_type(e))
self._add_freeze_job(user)
user.set_status(self.context, user.WARNING, reason)
def _daily_task(self, user_id):
user = user_mod.User.load(self.context, user_id=user_id)
@ -264,7 +266,7 @@ class BileanScheduler(object):
def update_user_job(self, user):
"""Update user's billing job"""
if user.status not in [user.ACTIVE, user.WARNING]:
self._delete_all_job(user.id)
self._delete_all_job(user)
return
for job_type in self.NOTIFY, self.FREEZE:

View File

@ -323,7 +323,7 @@ class EngineService(service.Service):
resource = resource_mod.Resource.load(cnxt, resource_id=resource_id)
return resource.to_dict()
def resource_update(self, resource):
def resource_update(self, cnxt, resource):
"""Do resource update."""
res = resource_mod.Resource.load(
self.context, resource_id=resource['id'])
@ -339,11 +339,11 @@ class EngineService(service.Service):
self.scheduler.update_user_job(user)
def resource_delete(self, resource):
def resource_delete(self, cnxt, resource_id):
"""Do resource delete"""
res = resource_mod.Resource.load(
self.context, resource_id=resource['id'])
user = user_mod.User.load(self.context, user_id=resource['user_id'])
self.context, resource_id=resource_id, project_safe=False)
user = user_mod.User.load(self.context, user_id=res.user_id)
user.update_with_resource(self.context, res, action='delete')
self.scheduler.update_user_job(user)
try:

View File

@ -180,11 +180,12 @@ class User(object):
}
return user_dict
def set_status(self, status, reason=None):
def set_status(self, context, status, reason=None):
'''Set status of the user.'''
self.status = status
if reason:
self.status_reason = reason
self.store(context)
def update_with_resource(self, context, resource, action='create'):
'''Update user with resource'''
@ -225,20 +226,19 @@ class User(object):
self.do_bill(context)
self.balance += value
if self.status == self.INIT and self.balance > 0:
self.set_status(self.ACTIVE, reason='Recharged')
self.set_status(context, self.FREE, reason='Recharged')
elif self.status == self.FREEZE and self.balance > 0:
reason = _("Status change from freeze to active because "
reason = _("Status change from 'freeze' to 'free' because "
"of recharge.")
self.set_status(self.ACTIVE, reason=reason)
self.set_status(context, self.FREE, reason=reason)
elif self.status == self.WARNING:
prior_notify_time = cfg.CONF.scheduler.prior_notify_time * 3600
rest_usage = prior_notify_time * self.rate
if self.balance > rest_usage:
reason = _("Status change from warning to active because "
"of recharge.")
self.set_status(self.ACTIVE, reason=reason)
self.set_status(context, self.ACTIVE, reason=reason)
event_mod.record(context, self.id, action='recharge', value=value)
self.store(context)
def _freeze(self, context, reason=None):
'''Freeze user when balance overdraft.'''

View File

@ -90,7 +90,7 @@ class ResourceAction(Action):
def do_delete(self):
"""Delete a resource"""
return self.rpc_client.resource_delete(self.cnxt, self.data)
return self.rpc_client.resource_delete(self.cnxt, self.id)
class UserAction(Action):

View File

@ -140,9 +140,9 @@ class EngineClient(object):
return self.call(ctxt, self.make_msg('resource_update',
resource=resource))
def resource_delete(self, ctxt, resource):
def resource_delete(self, ctxt, resource_id):
return self.call(ctxt, self.make_msg('resource_delete',
resource=resource))
resource_id=resource_id))
def event_list(self, ctxt, user_id=None, limit=None, marker=None,
sort_keys=None, sort_dir=None, filters=None,