Skip to content

Commit 5406c8b

Browse files
kk7dsstephenfin
andcommitted
Remove deprecated CPU, RAM, disk claiming in resource tracker
In change Id62136d293da55e4bb639635ea5421a33b6c3ea2, we deprecated the scheduler filters for CPU, RAM, and Disk since they were no longer necessary in the new placement-based world. With these filters disabled, we are no longer passing limits down to the resource tracker meaning we are treating everything in the claim process as unlimited. This means most of the claiming code here, NUMA stuff aside, is now a no-op and can be removed. Do just that. Change-Id: I2936ce8cb293dc80e1a426094fdae6e675461470 Co-Authored-By: Stephen Finucane <[email protected]> Partial-Bug: #1469179
1 parent 78645e6 commit 5406c8b

File tree

5 files changed

+16
-305
lines changed

5 files changed

+16
-305
lines changed

nova/compute/claims.py

Lines changed: 4 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,6 @@ def __init__(self, *args, **kwargs):
3535
self.migration = kwargs.pop('migration', None)
3636
self.claimed_numa_topology = None
3737

38-
@property
39-
def disk_gb(self):
40-
return 0
41-
42-
@property
43-
def memory_mb(self):
44-
return 0
45-
46-
@property
47-
def vcpus(self):
48-
return 0
49-
5038
def __enter__(self):
5139
return self
5240

@@ -57,10 +45,6 @@ def __exit__(self, exc_type, exc_val, exc_tb):
5745
def abort(self):
5846
pass
5947

60-
def __str__(self):
61-
return "[Claim: %d MB memory, %d GB disk]" % (self.memory_mb,
62-
self.disk_gb)
63-
6448

6549
class Claim(NopClaim):
6650
"""A declaration that a compute host operation will require free resources.
@@ -74,40 +58,20 @@ class Claim(NopClaim):
7458
"""
7559

7660
def __init__(self, context, instance, nodename, tracker, resources,
77-
pci_requests, overhead=None, limits=None):
61+
pci_requests, limits=None):
7862
super(Claim, self).__init__()
7963
# Stash a copy of the instance at the current point of time
8064
self.instance = instance.obj_clone()
8165
self.nodename = nodename
8266
self._numa_topology_loaded = False
8367
self.tracker = tracker
8468
self._pci_requests = pci_requests
85-
86-
if not overhead:
87-
overhead = {'memory_mb': 0,
88-
'disk_gb': 0}
89-
90-
self.overhead = overhead
9169
self.context = context
9270

9371
# Check claim at constructor to avoid mess code
9472
# Raise exception ComputeResourcesUnavailable if claim failed
9573
self._claim_test(resources, limits)
9674

97-
@property
98-
def disk_gb(self):
99-
return (self.instance.flavor.root_gb +
100-
self.instance.flavor.ephemeral_gb +
101-
self.overhead.get('disk_gb', 0))
102-
103-
@property
104-
def memory_mb(self):
105-
return self.instance.flavor.memory_mb + self.overhead['memory_mb']
106-
107-
@property
108-
def vcpus(self):
109-
return self.instance.flavor.vcpus
110-
11175
@property
11276
def numa_topology(self):
11377
if self._numa_topology_loaded:
@@ -145,22 +109,9 @@ def _claim_test(self, resources, limits=None):
145109

146110
# If an individual limit is None, the resource will be considered
147111
# unlimited:
148-
memory_mb_limit = limits.get('memory_mb')
149-
disk_gb_limit = limits.get('disk_gb')
150-
vcpus_limit = limits.get('vcpu')
151112
numa_topology_limit = limits.get('numa_topology')
152113

153-
LOG.info("Attempting claim on node %(node)s: "
154-
"memory %(memory_mb)d MB, "
155-
"disk %(disk_gb)d GB, vcpus %(vcpus)d CPU",
156-
{'node': self.nodename, 'memory_mb': self.memory_mb,
157-
'disk_gb': self.disk_gb, 'vcpus': self.vcpus},
158-
instance=self.instance)
159-
160-
reasons = [self._test_memory(resources, memory_mb_limit),
161-
self._test_disk(resources, disk_gb_limit),
162-
self._test_vcpus(resources, vcpus_limit),
163-
self._test_numa_topology(resources, numa_topology_limit),
114+
reasons = [self._test_numa_topology(resources, numa_topology_limit),
164115
self._test_pci()]
165116
reasons = [r for r in reasons if r is not None]
166117
if len(reasons) > 0:
@@ -170,33 +121,6 @@ def _claim_test(self, resources, limits=None):
170121
LOG.info('Claim successful on node %s', self.nodename,
171122
instance=self.instance)
172123

173-
def _test_memory(self, resources, limit):
174-
type_ = _("memory")
175-
unit = "MB"
176-
total = resources.memory_mb
177-
used = resources.memory_mb_used
178-
requested = self.memory_mb
179-
180-
return self._test(type_, unit, total, used, requested, limit)
181-
182-
def _test_disk(self, resources, limit):
183-
type_ = _("disk")
184-
unit = "GB"
185-
total = resources.local_gb
186-
used = resources.local_gb_used
187-
requested = self.disk_gb
188-
189-
return self._test(type_, unit, total, used, requested, limit)
190-
191-
def _test_vcpus(self, resources, limit):
192-
type_ = _("vcpu")
193-
unit = "VCPU"
194-
total = resources.vcpus
195-
used = resources.vcpus_used
196-
requested = self.vcpus
197-
198-
return self._test(type_, unit, total, used, requested, limit)
199-
200124
def _test_pci(self):
201125
pci_requests = self._pci_requests
202126
if pci_requests.requests:
@@ -270,31 +194,17 @@ class MoveClaim(Claim):
270194
Move can be either a migrate/resize, live-migrate or an evacuate operation.
271195
"""
272196
def __init__(self, context, instance, nodename, instance_type, image_meta,
273-
tracker, resources, pci_requests, overhead=None, limits=None):
197+
tracker, resources, pci_requests, limits=None):
274198
self.context = context
275199
self.instance_type = instance_type
276200
if isinstance(image_meta, dict):
277201
image_meta = objects.ImageMeta.from_dict(image_meta)
278202
self.image_meta = image_meta
279203
super(MoveClaim, self).__init__(context, instance, nodename, tracker,
280204
resources, pci_requests,
281-
overhead=overhead, limits=limits)
205+
limits=limits)
282206
self.migration = None
283207

284-
@property
285-
def disk_gb(self):
286-
return (self.instance_type.root_gb +
287-
self.instance_type.ephemeral_gb +
288-
self.overhead.get('disk_gb', 0))
289-
290-
@property
291-
def memory_mb(self):
292-
return self.instance_type.memory_mb + self.overhead['memory_mb']
293-
294-
@property
295-
def vcpus(self):
296-
return self.instance_type.vcpus
297-
298208
@property
299209
def numa_topology(self):
300210
return hardware.numa_get_constraints(self.instance_type,

nova/compute/resource_tracker.py

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -193,23 +193,11 @@ def instance_claim(self, context, instance, nodename, limits=None):
193193
"until resources have been claimed.",
194194
instance=instance)
195195

196-
# get the overhead required to build this instance:
197-
overhead = self.driver.estimate_instance_overhead(instance)
198-
LOG.debug("Memory overhead for %(flavor)d MB instance; %(overhead)d "
199-
"MB", {'flavor': instance.flavor.memory_mb,
200-
'overhead': overhead['memory_mb']})
201-
LOG.debug("Disk overhead for %(flavor)d GB instance; %(overhead)d "
202-
"GB", {'flavor': instance.flavor.root_gb,
203-
'overhead': overhead.get('disk_gb', 0)})
204-
LOG.debug("CPU overhead for %(flavor)d vCPUs instance; %(overhead)d "
205-
"vCPU(s)", {'flavor': instance.flavor.vcpus,
206-
'overhead': overhead.get('vcpus', 0)})
207-
208196
cn = self.compute_nodes[nodename]
209197
pci_requests = objects.InstancePCIRequests.get_by_instance_uuid(
210198
context, instance.uuid)
211199
claim = claims.Claim(context, instance, nodename, self, cn,
212-
pci_requests, overhead=overhead, limits=limits)
200+
pci_requests, limits=limits)
213201

214202
# self._set_instance_host_and_node() will save instance to the DB
215203
# so set instance.numa_topology first. We need to make sure
@@ -290,18 +278,6 @@ def _move_claim(self, context, instance, new_instance_type, nodename,
290278
# generate the migration record and continue the resize:
291279
return claims.NopClaim(migration=migration)
292280

293-
# get memory overhead required to build this instance:
294-
overhead = self.driver.estimate_instance_overhead(new_instance_type)
295-
LOG.debug("Memory overhead for %(flavor)d MB instance; %(overhead)d "
296-
"MB", {'flavor': new_instance_type.memory_mb,
297-
'overhead': overhead['memory_mb']})
298-
LOG.debug("Disk overhead for %(flavor)d GB instance; %(overhead)d "
299-
"GB", {'flavor': instance.flavor.root_gb,
300-
'overhead': overhead.get('disk_gb', 0)})
301-
LOG.debug("CPU overhead for %(flavor)d vCPUs instance; %(overhead)d "
302-
"vCPU(s)", {'flavor': instance.flavor.vcpus,
303-
'overhead': overhead.get('vcpus', 0)})
304-
305281
cn = self.compute_nodes[nodename]
306282

307283
# TODO(moshele): we are recreating the pci requests even if
@@ -319,7 +295,7 @@ def _move_claim(self, context, instance, new_instance_type, nodename,
319295
new_pci_requests.requests.append(request)
320296
claim = claims.MoveClaim(context, instance, nodename,
321297
new_instance_type, image_meta, self, cn,
322-
new_pci_requests, overhead=overhead,
298+
new_pci_requests,
323299
limits=limits)
324300

325301
claim.migration = migration

nova/tests/unit/compute/test_claims.py

Lines changed: 4 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def setUp(self):
7171
requests=[]
7272
)
7373

74-
def _claim(self, limits=None, overhead=None, requests=None, **kwargs):
74+
def _claim(self, limits=None, requests=None, **kwargs):
7575
numa_topology = kwargs.pop('numa_topology', None)
7676
instance = self._fake_instance(**kwargs)
7777
instance.flavor = self._fake_instance_type(**kwargs)
@@ -85,8 +85,6 @@ def _claim(self, limits=None, overhead=None, requests=None, **kwargs):
8585
}
8686
else:
8787
db_numa_topology = None
88-
if overhead is None:
89-
overhead = {'memory_mb': 0}
9088

9189
requests = requests or self.empty_requests
9290

@@ -95,7 +93,7 @@ def _claim(self, limits=None, overhead=None, requests=None, **kwargs):
9593
def get_claim(mock_extra_get):
9694
return claims.Claim(self.context, instance, _NODENAME,
9795
self.tracker, self.resources, requests,
98-
overhead=overhead, limits=limits)
96+
limits=limits)
9997
return get_claim()
10098

10199
def _fake_instance(self, **kwargs):
@@ -150,90 +148,6 @@ def _fake_resources(self, values=None):
150148
resources.update(values)
151149
return objects.ComputeNode(**resources)
152150

153-
def test_memory_unlimited(self):
154-
self._claim(memory_mb=99999999)
155-
156-
def test_disk_unlimited_root(self):
157-
self._claim(root_gb=999999)
158-
159-
def test_disk_unlimited_ephemeral(self):
160-
self._claim(ephemeral_gb=999999)
161-
162-
def test_memory_with_overhead(self):
163-
overhead = {'memory_mb': 8}
164-
limits = {'memory_mb': 2048}
165-
self._claim(memory_mb=2040, limits=limits,
166-
overhead=overhead)
167-
168-
def test_memory_with_overhead_insufficient(self):
169-
overhead = {'memory_mb': 9}
170-
limits = {'memory_mb': 2048}
171-
172-
self.assertRaises(exception.ComputeResourcesUnavailable,
173-
self._claim, limits=limits, overhead=overhead,
174-
memory_mb=2040)
175-
176-
def test_memory_oversubscription(self):
177-
self._claim(memory_mb=4096)
178-
179-
def test_disk_with_overhead(self):
180-
overhead = {'memory_mb': 0,
181-
'disk_gb': 1}
182-
limits = {'disk_gb': 100}
183-
claim_obj = self._claim(root_gb=99, ephemeral_gb=0, limits=limits,
184-
overhead=overhead)
185-
186-
self.assertEqual(100, claim_obj.disk_gb)
187-
188-
def test_disk_with_overhead_insufficient(self):
189-
overhead = {'memory_mb': 0,
190-
'disk_gb': 2}
191-
limits = {'disk_gb': 100}
192-
193-
self.assertRaises(exception.ComputeResourcesUnavailable,
194-
self._claim, limits=limits, overhead=overhead,
195-
root_gb=99, ephemeral_gb=0)
196-
197-
def test_disk_with_overhead_insufficient_no_root(self):
198-
overhead = {'memory_mb': 0,
199-
'disk_gb': 2}
200-
limits = {'disk_gb': 1}
201-
202-
self.assertRaises(exception.ComputeResourcesUnavailable,
203-
self._claim, limits=limits, overhead=overhead,
204-
root_gb=0, ephemeral_gb=0)
205-
206-
def test_memory_insufficient(self):
207-
limits = {'memory_mb': 8192}
208-
self.assertRaises(exception.ComputeResourcesUnavailable,
209-
self._claim, limits=limits, memory_mb=16384)
210-
211-
def test_disk_oversubscription(self):
212-
limits = {'disk_gb': 60}
213-
self._claim(root_gb=10, ephemeral_gb=40,
214-
limits=limits)
215-
216-
def test_disk_oversubscription_scheduler_limits_object(self):
217-
"""Tests that the Claim code can handle a SchedulerLimits object"""
218-
limits = objects.SchedulerLimits.from_dict({'disk_gb': 60})
219-
self._claim(root_gb=10, ephemeral_gb=40,
220-
limits=limits)
221-
222-
def test_disk_insufficient(self):
223-
limits = {'disk_gb': 45}
224-
self.assertRaisesRegex(
225-
exception.ComputeResourcesUnavailable,
226-
"disk",
227-
self._claim, limits=limits, root_gb=10, ephemeral_gb=40)
228-
229-
def test_disk_and_memory_insufficient(self):
230-
limits = {'disk_gb': 45, 'memory_mb': 8192}
231-
self.assertRaisesRegex(
232-
exception.ComputeResourcesUnavailable,
233-
"memory.*disk",
234-
self._claim, limits=limits, root_gb=10, ephemeral_gb=40,
235-
memory_mb=16384)
236-
237151
@mock.patch('nova.pci.stats.PciDeviceStats.support_requests',
238152
return_value=True)
239153
def test_pci_pass(self, mock_pci_supports_requests):
@@ -392,7 +306,7 @@ def _abort(self):
392306

393307
class MoveClaimTestCase(ClaimTestCase):
394308

395-
def _claim(self, limits=None, overhead=None, requests=None,
309+
def _claim(self, limits=None, requests=None,
396310
image_meta=None, **kwargs):
397311
instance_type = self._fake_instance_type(**kwargs)
398312
numa_topology = kwargs.pop('numa_topology', None)
@@ -409,8 +323,6 @@ def _claim(self, limits=None, overhead=None, requests=None,
409323
}
410324
else:
411325
self.db_numa_topology = None
412-
if overhead is None:
413-
overhead = {'memory_mb': 0}
414326

415327
requests = requests or self.empty_requests
416328

@@ -422,7 +334,7 @@ def get_claim(mock_extra_get, mock_numa_get):
422334
return claims.MoveClaim(self.context, self.instance, _NODENAME,
423335
instance_type, image_meta, self.tracker,
424336
self.resources, requests,
425-
overhead=overhead, limits=limits)
337+
limits=limits)
426338
return get_claim()
427339

428340
@mock.patch('nova.objects.Instance.drop_migration_context')

0 commit comments

Comments
 (0)