segments: Fix resource provider inventories update

Related-Bug: #1828543
Depends-On: https://review.opendev.org/663978
Change-Id: I4275779bd8d353fbaa80c646515819b0a34edebb
This commit is contained in:
elajkat 2019-05-31 11:38:47 +02:00
parent 62f55a12b0
commit 95023227b7
2 changed files with 34 additions and 26 deletions

View File

@ -217,9 +217,10 @@ class NovaSegmentNotifier(object):
ipv4_inventory = self.p_client.get_inventory(event.segment_id, ipv4_inventory = self.p_client.get_inventory(event.segment_id,
IPV4_RESOURCE_CLASS) IPV4_RESOURCE_CLASS)
if event.total: if event.total:
ipv4_inventory['total'] += event.total ipv4_inventory[IPV4_RESOURCE_CLASS]['total'] += event.total
if event.reserved: if event.reserved:
ipv4_inventory['reserved'] += event.reserved ipv4_inventory[IPV4_RESOURCE_CLASS]['reserved'] += \
event.reserved
try: try:
self.p_client.update_resource_provider_inventory( self.p_client.update_resource_provider_inventory(
event.segment_id, ipv4_inventory, IPV4_RESOURCE_CLASS) event.segment_id, ipv4_inventory, IPV4_RESOURCE_CLASS)
@ -251,10 +252,12 @@ class NovaSegmentNotifier(object):
self.p_client.associate_aggregates(segment_id, [aggregate_uuid]) self.p_client.associate_aggregates(segment_id, [aggregate_uuid])
for mapping in segment_host_mappings: for mapping in segment_host_mappings:
self.n_client.aggregates.add_host(aggregate.id, mapping.host) self.n_client.aggregates.add_host(aggregate.id, mapping.host)
ipv4_inventory = {'total': total, 'reserved': reserved, ipv4_inventory = {
'min_unit': 1, 'max_unit': 1, 'step_size': 1, IPV4_RESOURCE_CLASS: {
'allocation_ratio': 1.0, 'total': total, 'reserved': reserved, 'min_unit': 1,
'resource_class': IPV4_RESOURCE_CLASS} 'max_unit': 1, 'step_size': 1, 'allocation_ratio': 1.0,
}
}
self.p_client.update_resource_provider_inventories( self.p_client.update_resource_provider_inventories(
segment_id, ipv4_inventory) segment_id, ipv4_inventory)

View File

@ -1714,16 +1714,17 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase):
total, reserved = self._calculate_inventory_total_and_reserved( total, reserved = self._calculate_inventory_total_and_reserved(
subnet['subnet']) subnet['subnet'])
inventory, _ = self._get_inventory(total, reserved) inventory, _ = self._get_inventory(total, reserved)
inventory_dict = inventory[seg_plugin.IPV4_RESOURCE_CLASS]
self.mock_p_client.update_resource_provider_inventories.\ self.mock_p_client.update_resource_provider_inventories.\
assert_called_with(segment_id, inventory) assert_called_with(segment_id, inventory)
self.assertEqual( self.assertEqual(
inventory['total'], inventory_dict['total'],
self.mock_p_client.update_resource_provider_inventories. self.mock_p_client.update_resource_provider_inventories.
call_args[0][1]['total']) call_args[0][1][seg_plugin.IPV4_RESOURCE_CLASS]['total'])
self.assertEqual( self.assertEqual(
inventory['reserved'], inventory_dict['reserved'],
self.mock_p_client.update_resource_provider_inventories. self.mock_p_client.update_resource_provider_inventories.
call_args[0][1]['reserved']) call_args[0][1][seg_plugin.IPV4_RESOURCE_CLASS]['reserved'])
self.mock_p_client.reset_mock() self.mock_p_client.reset_mock()
self.mock_p_client.get_inventory.side_effect = None self.mock_p_client.get_inventory.side_effect = None
self.mock_n_client.reset_mock() self.mock_n_client.reset_mock()
@ -1788,26 +1789,29 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase):
if subnet: if subnet:
total, reserved = self._calculate_inventory_total_and_reserved( total, reserved = self._calculate_inventory_total_and_reserved(
subnet) subnet)
inventory['total'] += total - original_total ipv4_classname = seg_plugin.IPV4_RESOURCE_CLASS
inventory['reserved'] += reserved - original_reserved inventory[ipv4_classname]['total'] += total - original_total
inventory[ipv4_classname]['reserved'] += reserved - original_reserved
self.mock_p_client.update_resource_provider_inventory.\ self.mock_p_client.update_resource_provider_inventory.\
assert_called_with(segment_id, inventory, assert_called_with(segment_id, inventory,
seg_plugin.IPV4_RESOURCE_CLASS) seg_plugin.IPV4_RESOURCE_CLASS)
self.assertEqual( self.assertEqual(
inventory['total'], inventory[ipv4_classname]['total'],
self.mock_p_client.update_resource_provider_inventory. self.mock_p_client.update_resource_provider_inventory.
call_args[0][1]['total']) call_args[0][1][ipv4_classname]['total'])
self.assertEqual( self.assertEqual(
inventory['reserved'], inventory[ipv4_classname]['reserved'],
self.mock_p_client.update_resource_provider_inventory. self.mock_p_client.update_resource_provider_inventory.
call_args[0][1]['reserved']) call_args[0][1][ipv4_classname]['reserved'])
self.mock_p_client.reset_mock() self.mock_p_client.reset_mock()
self.mock_n_client.reset_mock() self.mock_n_client.reset_mock()
def _get_inventory(self, total, reserved): def _get_inventory(self, total, reserved):
inventory = {'total': total, 'reserved': reserved, 'min_unit': 1, inventory = {
'max_unit': 1, 'step_size': 1, 'allocation_ratio': 1.0, seg_plugin.IPV4_RESOURCE_CLASS: {
'resource_class': seg_plugin.IPV4_RESOURCE_CLASS} 'total': total, 'reserved': reserved, 'min_unit': 1,
'max_unit': 1, 'step_size': 1, 'allocation_ratio': 1.0
}}
return inventory, copy.deepcopy(inventory) return inventory, copy.deepcopy(inventory)
def _test_second_subnet_association_with_segment(self): def _test_second_subnet_association_with_segment(self):
@ -2046,20 +2050,20 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase):
def _assert_inventory_update_port(self, segment_id, inventory, def _assert_inventory_update_port(self, segment_id, inventory,
num_fixed_ips): num_fixed_ips):
inventory['reserved'] += num_fixed_ips inventory[seg_plugin.IPV4_RESOURCE_CLASS]['reserved'] += num_fixed_ips
self.mock_p_client.get_inventory.assert_called_with( self.mock_p_client.get_inventory.assert_called_with(
segment_id, seg_plugin.IPV4_RESOURCE_CLASS) segment_id, seg_plugin.IPV4_RESOURCE_CLASS)
self.mock_p_client.update_resource_provider_inventory.\ self.mock_p_client.update_resource_provider_inventory.\
assert_called_with(segment_id, inventory, assert_called_with(segment_id, inventory,
seg_plugin.IPV4_RESOURCE_CLASS) seg_plugin.IPV4_RESOURCE_CLASS)
self.assertEqual( self.assertEqual(
inventory['total'], inventory[seg_plugin.IPV4_RESOURCE_CLASS]['total'],
self.mock_p_client.update_resource_provider_inventory. self.mock_p_client.update_resource_provider_inventory.
call_args[0][1]['total']) call_args[0][1][seg_plugin.IPV4_RESOURCE_CLASS]['total'])
self.assertEqual( self.assertEqual(
inventory['reserved'], inventory[seg_plugin.IPV4_RESOURCE_CLASS]['reserved'],
self.mock_p_client.update_resource_provider_inventory. self.mock_p_client.update_resource_provider_inventory.
call_args[0][1]['reserved']) call_args[0][1][seg_plugin.IPV4_RESOURCE_CLASS]['reserved'])
self.mock_p_client.reset_mock() self.mock_p_client.reset_mock()
self.mock_n_client.reset_mock() self.mock_n_client.reset_mock()
@ -2113,9 +2117,10 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase):
segment_id, before_create_inventory, port = self._test_create_port( segment_id, before_create_inventory, port = self._test_create_port(
**kwargs) **kwargs)
self.mock_p_client.reset_mock() self.mock_p_client.reset_mock()
ipv4_classname = seg_plugin.IPV4_RESOURCE_CLASS
inventory, original_inventory = self._get_inventory( inventory, original_inventory = self._get_inventory(
before_create_inventory['total'], before_create_inventory[ipv4_classname]['total'],
before_create_inventory['reserved'] + 1) before_create_inventory[ipv4_classname]['reserved'] + 1)
self.mock_p_client.get_inventory.return_value = inventory self.mock_p_client.get_inventory.return_value = inventory
self._delete('ports', port['port']['id']) self._delete('ports', port['port']['id'])
self.batch_notifier._notify() self.batch_notifier._notify()