]> xenbits.xensource.com Git - osstest/openstack-nova.git/commitdiff
[BugFix] Release the memory quota for video ram when deleting an instance.
authorfalseuser <zhaomingjun@unitedstack.com>
Wed, 12 Apr 2017 03:35:33 +0000 (03:35 +0000)
committerLee Yarwood <lyarwood@redhat.com>
Thu, 8 Jun 2017 14:32:07 +0000 (14:32 +0000)
When creating an instance, the quota is used to contain vram,
and the deletion of the instance does not release the memory quota for vram,
if delete intance it need to release the memory quota for vram.

Change-Id: Iee2925c585c87d9885fd4bfe38cd9b4d316f5dab
Closes-Bug: #1681989
(cherry picked from commit f2d03bf92db3615693b62f4f3274b867f00c0967)

nova/compute/api.py
nova/tests/unit/compute/test_compute_api.py

index 87e76a7a69acbbe57fd86e42eea6c73e299a39a9..588a8124bc85de3b0e4d0fb508a4bd02fe8e1c5a 100644 (file)
@@ -2034,7 +2034,8 @@ class API(base.Base):
         else:
             flavor = flavor or instance.flavor
             instance_vcpus = flavor.vcpus
-            instance_memory_mb = flavor.memory_mb
+            vram_mb = int(flavor.get('extra_specs', {}).get(VIDEO_RAM, 0))
+            instance_memory_mb = flavor.memory_mb + vram_mb
 
         quotas = objects.Quotas(context=context)
         quotas.reserve(project_id=project_id,
index 1d432996c196ef5462d98b4e7334077e6cbea881..227894bd290a3b6974fcc83ddd6ba32558c2651e 100644 (file)
@@ -961,9 +961,11 @@ class _ComputeAPIUnitTestMixIn(object):
         inst = self._create_instance_obj()
         inst.update(attrs)
         inst._context = self.context
+        vram_mb = int(inst.flavor.get('extra_specs',
+                                      {}).get(compute_api.VIDEO_RAM, 0))
         deltas = {'instances': -1,
                   'cores': -inst.flavor.vcpus,
-                  'ram': -inst.flavor.memory_mb}
+                  'ram': -(inst.flavor.memory_mb + vram_mb)}
         delete_time = datetime.datetime(1955, 11, 5, 9, 30,
                                         tzinfo=iso8601.iso8601.Utc())
         self.useFixture(utils_fixture.TimeFixture(delete_time))
@@ -1105,6 +1107,12 @@ class _ComputeAPIUnitTestMixIn(object):
     def test_delete_in_resized(self):
         self._test_delete('delete', vm_state=vm_states.RESIZED)
 
+    def test_delete_with_vram(self):
+        flavor = objects.Flavor(vcpus=1, memory_mb=512,
+            extra_specs={compute_api.VIDEO_RAM: "64"})
+        self._test_delete('delete',
+                          flavor=flavor)
+
     def test_delete_shelved(self):
         fake_sys_meta = {'shelved_image_id': SHELVED_IMAGE}
         self._test_delete('delete',