Merge "pci: pass in instance PCI requests to claim"
This commit is contained in:
commit
f5b4f047b1
|
@ -75,13 +75,14 @@ class Claim(NopClaim):
|
|||
correct decisions with respect to host selection.
|
||||
"""
|
||||
|
||||
def __init__(self, context, instance, tracker, resources, overhead=None,
|
||||
limits=None):
|
||||
def __init__(self, context, instance, tracker, resources, pci_requests,
|
||||
overhead=None, limits=None):
|
||||
super(Claim, self).__init__()
|
||||
# Stash a copy of the instance at the current point of time
|
||||
self.instance = instance.obj_clone()
|
||||
self._numa_topology_loaded = False
|
||||
self.tracker = tracker
|
||||
self._pci_requests = pci_requests
|
||||
|
||||
if not overhead:
|
||||
overhead = {'memory_mb': 0}
|
||||
|
@ -185,9 +186,7 @@ class Claim(NopClaim):
|
|||
return self._test(type_, unit, total, used, requested, limit)
|
||||
|
||||
def _test_pci(self):
|
||||
pci_requests = objects.InstancePCIRequests.get_by_instance_uuid(
|
||||
self.context, self.instance.uuid)
|
||||
|
||||
pci_requests = self._pci_requests
|
||||
if pci_requests.requests:
|
||||
stats = self.tracker.pci_tracker.stats
|
||||
if not stats.support_requests(pci_requests.requests):
|
||||
|
@ -261,15 +260,15 @@ class MoveClaim(Claim):
|
|||
Move can be either a migrate/resize, live-migrate or an evacuate operation.
|
||||
"""
|
||||
def __init__(self, context, instance, instance_type, image_meta, tracker,
|
||||
resources, overhead=None, limits=None):
|
||||
resources, pci_requests, overhead=None, limits=None):
|
||||
self.context = context
|
||||
self.instance_type = instance_type
|
||||
if isinstance(image_meta, dict):
|
||||
image_meta = objects.ImageMeta.from_dict(image_meta)
|
||||
self.image_meta = image_meta
|
||||
super(MoveClaim, self).__init__(context, instance, tracker,
|
||||
resources, overhead=overhead,
|
||||
limits=limits)
|
||||
resources, pci_requests,
|
||||
overhead=overhead, limits=limits)
|
||||
self.migration = None
|
||||
|
||||
@property
|
||||
|
@ -290,16 +289,6 @@ class MoveClaim(Claim):
|
|||
return hardware.numa_get_constraints(self.instance_type,
|
||||
self.image_meta)
|
||||
|
||||
def _test_pci(self):
|
||||
pci_requests = objects.InstancePCIRequests.\
|
||||
get_by_instance_uuid_and_newness(
|
||||
self.context, self.instance.uuid, True)
|
||||
if pci_requests.requests:
|
||||
claim = self.tracker.pci_tracker.stats.support_requests(
|
||||
pci_requests.requests)
|
||||
if not claim:
|
||||
return _('Claim pci failed.')
|
||||
|
||||
def abort(self):
|
||||
"""Compute operation requiring claimed resources has failed or
|
||||
been aborted.
|
||||
|
|
|
@ -128,8 +128,10 @@ class ResourceTracker(object):
|
|||
"MB", {'flavor': instance_ref.memory_mb,
|
||||
'overhead': overhead['memory_mb']})
|
||||
|
||||
pci_requests = objects.InstancePCIRequests.get_by_instance_uuid(
|
||||
context, instance_ref.uuid)
|
||||
claim = claims.Claim(context, instance_ref, self, self.compute_node,
|
||||
overhead=overhead, limits=limits)
|
||||
pci_requests, overhead=overhead, limits=limits)
|
||||
|
||||
if self.pci_tracker:
|
||||
# NOTE(jaypipes): ComputeNode.pci_device_pools is set below
|
||||
|
@ -207,9 +209,13 @@ class ResourceTracker(object):
|
|||
"MB", {'flavor': new_instance_type.memory_mb,
|
||||
'overhead': overhead['memory_mb']})
|
||||
|
||||
pci_requests = objects.InstancePCIRequests.\
|
||||
get_by_instance_uuid_and_newness(
|
||||
context, instance.uuid, True)
|
||||
claim = claims.MoveClaim(context, instance, new_instance_type,
|
||||
image_meta, self, self.compute_node,
|
||||
overhead=overhead, limits=limits)
|
||||
pci_requests, overhead=overhead,
|
||||
limits=limits)
|
||||
claim.migration = migration
|
||||
instance.migration_context = claim.create_migration_context()
|
||||
instance.save()
|
||||
|
|
|
@ -84,13 +84,13 @@ class ClaimTestCase(test.NoDBTestCase):
|
|||
if overhead is None:
|
||||
overhead = {'memory_mb': 0}
|
||||
|
||||
@mock.patch('nova.objects.InstancePCIRequests.get_by_instance_uuid',
|
||||
return_value=requests or self.empty_requests)
|
||||
requests = requests or self.empty_requests
|
||||
|
||||
@mock.patch('nova.db.instance_extra_get_by_instance_uuid',
|
||||
return_value=db_numa_topology)
|
||||
def get_claim(mock_extra_get, mock_pci_get):
|
||||
def get_claim(mock_extra_get):
|
||||
return claims.Claim(self.context, instance, self.tracker,
|
||||
self.resources, overhead=overhead,
|
||||
self.resources, requests, overhead=overhead,
|
||||
limits=limits)
|
||||
return get_claim()
|
||||
|
||||
|
@ -378,17 +378,17 @@ class MoveClaimTestCase(ClaimTestCase):
|
|||
if overhead is None:
|
||||
overhead = {'memory_mb': 0}
|
||||
|
||||
@mock.patch('nova.objects.InstancePCIRequests.'
|
||||
'get_by_instance_uuid_and_newness',
|
||||
return_value=requests or self.empty_requests)
|
||||
requests = requests or self.empty_requests
|
||||
|
||||
@mock.patch('nova.virt.hardware.numa_get_constraints',
|
||||
return_value=numa_topology)
|
||||
@mock.patch('nova.db.instance_extra_get_by_instance_uuid',
|
||||
return_value=self.db_numa_topology)
|
||||
def get_claim(mock_extra_get, mock_numa_get, mock_pci_get):
|
||||
def get_claim(mock_extra_get, mock_numa_get):
|
||||
return claims.MoveClaim(self.context, self.instance, instance_type,
|
||||
image_meta, self.tracker, self.resources,
|
||||
overhead=overhead, limits=limits)
|
||||
requests, overhead=overhead,
|
||||
limits=limits)
|
||||
return get_claim()
|
||||
|
||||
def test_abort(self):
|
||||
|
|
|
@ -1078,7 +1078,8 @@ class InstanceClaimTestCase(BaseTrackerTestCase):
|
|||
inst.obj_what_changed())
|
||||
|
||||
mock_save.side_effect = fake_save
|
||||
inst = objects.Instance(host=None, node=None, memory_mb=1024)
|
||||
inst = objects.Instance(host=None, node=None, memory_mb=1024,
|
||||
uuid=uuidsentinel.instance1)
|
||||
inst.obj_reset_changes()
|
||||
numa = objects.InstanceNUMATopology()
|
||||
claim = mock.MagicMock()
|
||||
|
|
|
@ -212,8 +212,10 @@ class ShelveComputeManagerTestCase(test_compute.BaseTestCase):
|
|||
|
||||
def fake_claim(context, instance, limits):
|
||||
instance.host = self.compute.host
|
||||
requests = objects.InstancePCIRequests(requests=[])
|
||||
return claims.Claim(context, instance,
|
||||
self.rt, _fake_resources())
|
||||
self.rt, _fake_resources(),
|
||||
requests)
|
||||
|
||||
tracking = {
|
||||
'last_state': instance.task_state,
|
||||
|
@ -319,7 +321,8 @@ class ShelveComputeManagerTestCase(test_compute.BaseTestCase):
|
|||
self.context, instance, self.compute.host)
|
||||
self.rt.instance_claim(self.context, instance, limits).AndReturn(
|
||||
claims.Claim(self.context, instance, self.rt,
|
||||
_fake_resources()))
|
||||
_fake_resources(),
|
||||
objects.InstancePCIRequests(requests=[])))
|
||||
self.compute.driver.spawn(self.context, instance,
|
||||
mox.IsA(objects.ImageMeta),
|
||||
injected_files=[], admin_password=None,
|
||||
|
|
Loading…
Reference in New Issue