From 104189688d2084902f405a4cf7c0773f2c909c1a Mon Sep 17 00:00:00 2001 From: Dudás Ádám <dudas.adam@cloud.bme.hu> Date: Fri, 3 Oct 2014 10:19:34 +0200 Subject: [PATCH] vm: use 'activity' method of Instance instead of instance_activity function --- circle/dashboard/views/vm.py | 22 ++++++++++------------ circle/vm/models/__init__.py | 7 +++---- circle/vm/models/activity.py | 15 --------------- circle/vm/models/instance.py | 36 +++++++++++++++++++++++++----------- circle/vm/models/network.py | 5 ++--- circle/vm/tasks/local_agent_tasks.py | 12 +++++------- 6 files changed, 45 insertions(+), 52 deletions(-) diff --git a/circle/dashboard/views/vm.py b/circle/dashboard/views/vm.py index a61f7fc..c07d11e 100644 --- a/circle/dashboard/views/vm.py +++ b/circle/dashboard/views/vm.py @@ -48,7 +48,7 @@ from firewall.models import Vlan, Host, Rule from manager.scheduler import SchedulerError from storage.models import Disk from vm.models import ( - Instance, instance_activity, InstanceActivity, Node, Lease, + Instance, InstanceActivity, Node, Lease, InstanceTemplate, InterfaceTemplate, Interface, ) from .util import ( @@ -77,10 +77,10 @@ class VmDetailVncTokenView(CheckedDetailView): if not request.user.has_perm('vm.access_console'): raise PermissionDenied() if self.object.node: - with instance_activity( - code_suffix='console-accessed', instance=self.object, - user=request.user, readable_name=ugettext_noop( - "console access"), concurrency_check=False): + with self.object.activity( + code_suffix='console-accessed', user=request.user, + readable_name=ugettext_noop("console access"), + concurrency_check=False): port = self.object.vnc_port host = str(self.object.node.host.ipv4) value = signing.dumps({'host': host, 'port': port}, @@ -874,10 +874,9 @@ class VmList(LoginRequiredMixin, FilterMixin, ListView): in [i.name for i in Instance._meta.fields] + ["pk"]): queryset = queryset.order_by(sort) - return queryset.filter( - **self.get_queryset_filters()).prefetch_related( - "owner", "node", "owner__profile", "interface_set", "lease", - "interface_set__host").distinct() + return queryset.filter(**self.get_queryset_filters()).prefetch_related( + "owner", "node", "owner__profile", "interface_set", "lease", + "interface_set__host").distinct() class VmCreate(LoginRequiredMixin, TemplateView): @@ -1405,9 +1404,8 @@ class TransferOwnershipConfirmView(LoginRequiredMixin, View): instance, owner = self.get_instance(key, request.user) old = instance.owner - with instance_activity(code_suffix='ownership-transferred', - concurrency_check=False, - instance=instance, user=request.user): + with instance.activity(code_suffix='ownership-transferred', + concurrency_check=False, user=request.user): instance.owner = request.user instance.clean() instance.save() diff --git a/circle/vm/models/__init__.py b/circle/vm/models/__init__.py index e6afe50..14722fb 100644 --- a/circle/vm/models/__init__.py +++ b/circle/vm/models/__init__.py @@ -1,6 +1,5 @@ # flake8: noqa from .activity import InstanceActivity -from .activity import instance_activity from .activity import NodeActivity from .activity import node_activity from .common import BaseResourceConfigModel @@ -20,7 +19,7 @@ from .node import Node __all__ = [ 'InstanceActivity', 'BaseResourceConfigModel', 'NamedBaseResourceConfig', 'VirtualMachineDescModel', 'InstanceTemplate', - 'Instance', 'instance_activity', 'post_state_changed', 'pre_state_changed', - 'InterfaceTemplate', 'Interface', 'Trait', 'Node', 'NodeActivity', 'Lease', - 'node_activity', 'pwgen' + 'Instance', 'post_state_changed', 'pre_state_changed', 'InterfaceTemplate', + 'Interface', 'Trait', 'Node', 'NodeActivity', 'Lease', 'node_activity', + 'pwgen' ] diff --git a/circle/vm/models/activity.py b/circle/vm/models/activity.py index e2b75ca..55c8fce 100644 --- a/circle/vm/models/activity.py +++ b/circle/vm/models/activity.py @@ -206,21 +206,6 @@ class InstanceActivity(ActivityModel): self.activity_code) -@contextmanager -def instance_activity(code_suffix, instance, on_abort=None, on_commit=None, - task_uuid=None, user=None, concurrency_check=True, - readable_name=None, resultant_state=None): - """Create a transactional context for an instance activity. - """ - if not readable_name: - warn("Set readable_name", stacklevel=3) - act = InstanceActivity.create(code_suffix, instance, task_uuid, user, - concurrency_check, - readable_name=readable_name, - resultant_state=resultant_state) - return activitycontextimpl(act, on_abort=on_abort, on_commit=on_commit) - - class NodeActivity(ActivityModel): ACTIVITY_CODE_BASE = join_activity_code('vm', 'Node') node = ForeignKey('Node', related_name='activity_log', diff --git a/circle/vm/models/instance.py b/circle/vm/models/instance.py index 81ee3d5..b92f292 100644 --- a/circle/vm/models/instance.py +++ b/circle/vm/models/instance.py @@ -16,6 +16,7 @@ # with CIRCLE. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, unicode_literals +from contextlib import contextmanager from datetime import timedelta from functools import partial from importlib import import_module @@ -41,12 +42,11 @@ from taggit.managers import TaggableManager from acl.models import AclBase from common.models import ( - create_readable, HumanReadableException, + activitycontextimpl, create_readable, HumanReadableException, ) from common.operations import OperatedMixin -from ..tasks import agent_tasks -from .activity import (ActivityInProgressError, instance_activity, - InstanceActivity) +from ..tasks import vm_tasks, agent_tasks +from .activity import (ActivityInProgressError, InstanceActivity) from .common import BaseResourceConfigModel, Lease from .network import Interface from .node import Node, Trait @@ -365,9 +365,9 @@ class Instance(AclBase, VirtualMachineDescModel, StatusModel, OperatedMixin, def __on_commit(activity): activity.resultant_state = 'PENDING' - with instance_activity(code_suffix='create', instance=inst, - readable_name=ugettext_noop("create instance"), - on_commit=__on_commit, user=inst.owner) as act: + with inst.activity(code_suffix='create', + readable_name=ugettext_noop("create instance"), + on_commit=__on_commit, user=inst.owner) as act: # create related entities inst.disks.add(*[disk.get_exclusive() for disk in disks]) @@ -668,10 +668,10 @@ class Instance(AclBase, VirtualMachineDescModel, StatusModel, OperatedMixin, "%(success)s notifications succeeded."), success=len(success), successes=success) - with instance_activity('notification_about_expiration', instance=self, - readable_name=ugettext_noop( - "notify owner about expiration"), - on_commit=on_commit): + with self.activity('notification_about_expiration', + readable_name=ugettext_noop( + "notify owner about expiration"), + on_commit=on_commit): from dashboard.views import VmRenewView, absolute_url level = self.get_level_object("owner") for u, ulevel in self.get_users_with_level(level__pk=level.pk): @@ -852,3 +852,17 @@ class Instance(AclBase, VirtualMachineDescModel, StatusModel, OperatedMixin, @property def metric_prefix(self): return 'vm.%s' % self.vm_name + + @contextmanager + def activity(self, code_suffix, readable_name, on_abort=None, + on_commit=None, task_uuid=None, user=None, + concurrency_check=True, resultant_state=None): + """Create a transactional context for an instance activity. + """ + if not readable_name: + warn("Set readable_name", stacklevel=3) + act = InstanceActivity.create( + code_suffix=code_suffix, instance=self, task_uuid=task_uuid, + user=user, concurrency_check=concurrency_check, + readable_name=readable_name, resultant_state=resultant_state) + return activitycontextimpl(act, on_abort=on_abort, on_commit=on_commit) diff --git a/circle/vm/models/network.py b/circle/vm/models/network.py index c7c3fb2..696841b 100644 --- a/circle/vm/models/network.py +++ b/circle/vm/models/network.py @@ -26,7 +26,6 @@ from django.utils.translation import ugettext_lazy as _, ugettext_noop from common.models import create_readable from firewall.models import Vlan, Host from ..tasks import net_tasks -from .activity import instance_activity logger = getLogger(__name__) @@ -120,10 +119,10 @@ class Interface(Model): host.hostname = instance.vm_name # Get addresses from firewall if base_activity is None: - act_ctx = instance_activity( + act_ctx = instance.activity( code_suffix='allocating_ip', readable_name=ugettext_noop("allocate IP address"), - instance=instance, user=owner) + user=owner) else: act_ctx = base_activity.sub_activity( 'allocating_ip', diff --git a/circle/vm/tasks/local_agent_tasks.py b/circle/vm/tasks/local_agent_tasks.py index d055eb5..deec6cd 100644 --- a/circle/vm/tasks/local_agent_tasks.py +++ b/circle/vm/tasks/local_agent_tasks.py @@ -83,16 +83,15 @@ def create_agent_tar(): @celery.task def agent_started(vm, version=None): - from vm.models import Instance, instance_activity, InstanceActivity + from vm.models import Instance, InstanceActivity instance = Instance.objects.get(id=int(vm.split('-')[-1])) queue = instance.get_remote_queue_name("agent") initialized = instance.activity_log.filter( activity_code='vm.Instance.agent.cleanup').exists() - with instance_activity(code_suffix='agent', + with instance.activity(code_suffix='agent', readable_name=ugettext_noop('agent'), - concurrency_check=False, - instance=instance) as act: + concurrency_check=False) as act: with act.sub_activity('starting', readable_name=ugettext_noop('starting')): pass @@ -170,9 +169,8 @@ def update_agent(instance, act=None): ugettext_noop('update to %(version)s'), version=settings.AGENT_VERSION)) else: - from vm.models import instance_activity - act = instance_activity( - code_suffix='agent.update', instance=instance, + act = instance.activity( + code_suffix='agent.update', readable_name=create_readable( ugettext_noop('update agent to %(version)s'), version=settings.AGENT_VERSION)) -- libgit2 0.26.0