]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Get rid of create state in Instance
authorZane Bitter <zbitter@redhat.com>
Tue, 23 Apr 2013 11:21:28 +0000 (13:21 +0200)
committerZane Bitter <zbitter@redhat.com>
Tue, 23 Apr 2013 11:21:33 +0000 (13:21 +0200)
We don't want to store any state in the Instance object, instead take
advantage of the new mechanism whereby the result of handle_create() is
passed to check_active().

This makes the autoscaling code uglier for now (since it must still store
the instance state in the instance), but this will go away when we move to
using co-routines to create resources in parallel.

Change-Id: Ib11c8da22900453eb9713eba5106859c8a09dbe2

heat/engine/resources/autoscaling.py
heat/engine/resources/instance.py
heat/tests/test_autoscaling.py
heat/tests/test_instance_group.py
heat/tests/test_metadata_refresh.py

index f03c1725790fb57a42a86850bf5ced9864c3d32a..ec716d542bc4414152868348f2836ad08e10d48b 100644 (file)
@@ -84,7 +84,8 @@ class InstanceGroup(resource.Resource):
 
     def check_active(self, instances):
         if instances:
-            check_active = lambda i: i.check_active(override=False)
+            check_active = lambda i: i.check_active(i._create_data,
+                                                    override=False)
             remaining = itertools.dropwhile(check_active, instances)
             instances[:] = list(remaining)
             if not instances:
@@ -151,6 +152,7 @@ class InstanceGroup(resource.Resource):
                 won't wait for it in create().
                 '''
                 if override:
+                    self._create_data = create_data
                     return True
                 return super(GroupedInstance, self).check_active(create_data)
 
index 315ae1235a3e8c834310396480ac0e3ec74d4cb7..487b75dcb068cfa24878de15b34ed51fe55951a2 100644 (file)
@@ -114,7 +114,6 @@ class Instance(resource.Resource):
         super(Instance, self).__init__(name, json_snippet, stack)
         self.ipaddress = None
         self.mime_string = None
-        self._server_status = None
 
     def _set_ipaddress(self, networks):
         '''
@@ -311,14 +310,13 @@ class Instance(resource.Resource):
             if server is not None:
                 self.resource_id_set(server.id)
 
-        self._server_status = server.status
+        return server
 
-    def check_active(self, create_data=None):
-        if self._server_status == 'ACTIVE':
+    def check_active(self, server):
+        if server.status == 'ACTIVE':
             return True
 
-        server = self.nova().servers.get(self.resource_id)
-        self._server_status = server.status
+        server.get()
         if server.status == 'BUILD':
             return False
         if server.status == 'ACTIVE':
index 1bf063afc8ef21bf56adaf05fa21611f4056aa23..069f98f00d0d7a773ace44bebac094eb1976b747 100644 (file)
@@ -88,11 +88,12 @@ class AutoScalingTest(unittest.TestCase):
 
         self.m.StubOutWithMock(instance.Instance, 'handle_create')
         self.m.StubOutWithMock(instance.Instance, 'check_active')
+        cookie = object()
         for x in range(num):
-            instance.Instance.handle_create().AndReturn(None)
-        instance.Instance.check_active(None).AndReturn(False)
+            instance.Instance.handle_create().AndReturn(cookie)
+        instance.Instance.check_active(cookie).AndReturn(False)
         eventlet.sleep(mox.IsA(int)).AndReturn(None)
-        instance.Instance.check_active(None).MultipleTimes().AndReturn(True)
+        instance.Instance.check_active(cookie).MultipleTimes().AndReturn(True)
 
     def _stub_lb_reload(self, expected_list, unset=True):
         if unset:
index 55d6451693c1ac62756e71010e606978bcbf1e23..bcf4faa2950b8f1e46ff4e46e8ceda5be880286b 100644 (file)
@@ -68,11 +68,12 @@ class InstanceGroupTest(unittest.TestCase):
 
         self.m.StubOutWithMock(instance.Instance, 'handle_create')
         self.m.StubOutWithMock(instance.Instance, 'check_active')
+        cookie = object()
         for x in range(num):
-            instance.Instance.handle_create().AndReturn(None)
-        instance.Instance.check_active(None).AndReturn(False)
+            instance.Instance.handle_create().AndReturn(cookie)
+        instance.Instance.check_active(cookie).AndReturn(False)
         eventlet.sleep(mox.IsA(int)).AndReturn(None)
-        instance.Instance.check_active(None).MultipleTimes().AndReturn(True)
+        instance.Instance.check_active(cookie).MultipleTimes().AndReturn(True)
 
     def create_instance_group(self, t, stack, resource_name):
         resource = asc.InstanceGroup(resource_name,
index 689adfa886506ee4e72a80599c1e4392a0d240b8..ddaffe350161d724d74c904e4988faeba4d8d49e 100644 (file)
@@ -148,10 +148,9 @@ class MetadataRefreshTest(unittest.TestCase):
 
         self.m.StubOutWithMock(instance.Instance, 'handle_create')
         self.m.StubOutWithMock(instance.Instance, 'check_active')
-        instance.Instance.handle_create().AndReturn(None)
-        instance.Instance.check_active(None).AndReturn(True)
-        instance.Instance.handle_create().AndReturn(None)
-        instance.Instance.check_active(None).AndReturn(True)
+        for cookie in (object(), object()):
+            instance.Instance.handle_create().AndReturn(cookie)
+            instance.Instance.check_active(cookie).AndReturn(True)
         self.m.StubOutWithMock(instance.Instance, 'FnGetAtt')
 
         return stack
@@ -213,8 +212,9 @@ class WaitCondMetadataUpdateTest(unittest.TestCase):
 
         self.m.StubOutWithMock(instance.Instance, 'handle_create')
         self.m.StubOutWithMock(instance.Instance, 'check_active')
-        instance.Instance.handle_create().AndReturn(None)
-        instance.Instance.check_active(None).AndReturn(True)
+        cookie = object()
+        instance.Instance.handle_create().AndReturn(cookie)
+        instance.Instance.check_active(cookie).AndReturn(True)
 
         self.m.StubOutWithMock(wc.WaitConditionHandle, 'keystone')
         wc.WaitConditionHandle.keystone().MultipleTimes().AndReturn(self.fc)