diff --git a/vmware_nsxlib/v3/policy/core_resources.py b/vmware_nsxlib/v3/policy/core_resources.py index ae6290d9..e34497de 100644 --- a/vmware_nsxlib/v3/policy/core_resources.py +++ b/vmware_nsxlib/v3/policy/core_resources.py @@ -145,19 +145,24 @@ class NsxPolicyResourceBase(object): def _update(self, **kwargs): """Helper for update function - ignore attrs without explicit value""" + @utils.retry_upon_exception( + exceptions.StaleRevision, + max_attempts=self.policy_api.client.max_attempts) + def _do_update_with_retry(): + if self.policy_api.partial_updates_supported(): + policy_def = self._init_def(**kwargs) + partial_updates = True + else: + policy_def = self._get_and_update_def(**kwargs) + partial_updates = False - if self.policy_api.partial_updates_supported(): - policy_def = self._init_def(**kwargs) - partial_updates = True - else: - policy_def = self._get_and_update_def(**kwargs) - partial_updates = False + if policy_def.bodyless(): + # Nothing to update - only keys provided in kwargs + return + self.policy_api.create_or_update( + policy_def, partial_updates=partial_updates) - if policy_def.bodyless(): - # Nothing to update - only keys provided in kwargs - return - self.policy_api.create_or_update( - policy_def, partial_updates=partial_updates) + return _do_update_with_retry() @staticmethod def _init_obj_uuid(obj_uuid):