diff --git a/nova/compute/resource_tracker.py b/nova/compute/resource_tracker.py index ba36a5b2c57a..7d1c94ef0f37 100644 --- a/nova/compute/resource_tracker.py +++ b/nova/compute/resource_tracker.py @@ -713,7 +713,8 @@ class ResourceTracker(object): """Check to see if any resources have changed.""" nodename = compute_node.hypervisor_hostname old_compute = self.old_resources[nodename] - if not obj_base.obj_equal_prims(compute_node, old_compute): + if not obj_base.obj_equal_prims( + compute_node, old_compute, ['updated_at']): self.old_resources[nodename] = copy.deepcopy(compute_node) return True return False diff --git a/nova/tests/unit/compute/test_resource_tracker.py b/nova/tests/unit/compute/test_resource_tracker.py index 1d6de53a4f05..51a5647d5b09 100644 --- a/nova/tests/unit/compute/test_resource_tracker.py +++ b/nova/tests/unit/compute/test_resource_tracker.py @@ -1099,6 +1099,26 @@ class TestUpdateComputeNode(BaseTestCase): self.rt._update(mock.sentinel.ctx, new_compute) self.assertFalse(urs_mock.called) + @mock.patch('nova.objects.Service.get_by_compute_host') + def test_existing_compute_node_updated_diff_updated_at(self, service_mock): + self._setup_rt() + ts1 = timeutils.utcnow() + ts2 = ts1 + datetime.timedelta(seconds=10) + + orig_compute = _COMPUTE_NODE_FIXTURES[0].obj_clone() + orig_compute.updated_at = ts1 + self.rt.compute_nodes[_NODENAME] = orig_compute + self.rt.old_resources[_NODENAME] = orig_compute + + # Make the new_compute object have a different timestamp + # from orig_compute. + new_compute = orig_compute.obj_clone() + new_compute.updated_at = ts2 + + urs_mock = self.sched_client_mock.update_resource_stats + self.rt._update(mock.sentinel.ctx, new_compute) + self.assertFalse(urs_mock.called) + @mock.patch('nova.objects.Service.get_by_compute_host') def test_existing_compute_node_updated_new_resources(self, service_mock): self._setup_rt()