summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/cells/messaging.py11
-rw-r--r--nova/tests/cells/test_cells_messaging.py2
2 files changed, 7 insertions, 6 deletions
diff --git a/nova/cells/messaging.py b/nova/cells/messaging.py
index e5617e742..56d521892 100644
--- a/nova/cells/messaging.py
+++ b/nova/cells/messaging.py
@@ -690,17 +690,16 @@ class _BroadcastMessageMethods(_BaseMessageMethods):
if not self._at_the_top():
return
instance_uuid = instance['uuid']
- routing_path = message.routing_path
- instance['cell_name'] = _reverse_path(routing_path)
+
# Remove things that we can't update in the top level cells.
- # 'cell_name' is included in this list.. because we'll set it
- # ourselves based on the reverse of the routing path. metadata
- # is only updated in the API cell, so we don't listen to what
- # the child cell tells us.
+ # 'metadata' is only updated in the API cell, so don't overwrite
+ # it based on what child cells say. Make sure to update
+ # 'cell_name' based on the routing path.
items_to_remove = ['id', 'security_groups', 'instance_type',
'volumes', 'cell_name', 'name', 'metadata']
for key in items_to_remove:
instance.pop(key, None)
+ instance['cell_name'] = _reverse_path(message.routing_path)
# Fixup info_cache. We'll have to update this separately if
# it exists.
diff --git a/nova/tests/cells/test_cells_messaging.py b/nova/tests/cells/test_cells_messaging.py
index a5810fb21..9973716f6 100644
--- a/nova/tests/cells/test_cells_messaging.py
+++ b/nova/tests/cells/test_cells_messaging.py
@@ -794,7 +794,9 @@ class CellsBroadcastMethodsTestCase(test.TestCase):
expected_sys_metadata = {'key1': 'value1',
'key2': 'value2'}
expected_info_cache = {'other': 'moo'}
+ expected_cell_name = 'api-cell!child-cell2!grandchild-cell1'
expected_instance = {'system_metadata': expected_sys_metadata,
+ 'cell_name': expected_cell_name,
'other': 'meow',
'uuid': 'fake_uuid'}