diff options
author | Arjun Baindur <xagent@gmail.com> | 2018-07-31 14:36:32 -0700 |
---|---|---|
committer | Graham Hayes <gr@ham.ie> | 2018-10-01 15:06:32 +0000 |
commit | af1bb8a36a704bb1a226fe5154f828e152ef23e1 (patch) | |
tree | cd1ae2b560e2682103bfdb6f48e078ab0ee502ae | |
parent | 5c1c636c29db4b50a4b5ebf258e3a436bffa9fc8 (diff) | |
download | designate-af1bb8a36a704bb1a226fe5154f828e152ef23e1.tar.gz |
Make update_status use synchronized_zone
There is a race condition when adding a new recordset to a zone
and when central is processing the update_status from a previous
recordset/zone operation. In the subsequent recordset operation,
central fails to update the zone's action/status in DB to UPDATE/PENDING.
It remains as NONE/ACTIVE, and worker error's out.
Each operation retrieves a different copy in memory of the Zone object
(when it calls self.storage.get_zone). As a result this does not update
the obj_changes field for the zone object for the latter operation.
Therefore the DB update doesn't update any values.
update_status should be synchronized as it updates zone DB
Change-Id: Ib4e0bc567ba8eb54c61c3921d165521bf2f12206
Closes-Bug: #1713875
(cherry picked from commit 12cd654b143e215dbe01cc2688a7d6e6cf3ce62f)
-rw-r--r-- | designate/central/service.py | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/designate/central/service.py b/designate/central/service.py index 5b156ea8..bfa08264 100644 --- a/designate/central/service.py +++ b/designate/central/service.py @@ -2302,6 +2302,7 @@ class Service(service.RPCService, service.Service): @notification('dns.domain.update') @notification('dns.zone.update') @transaction + @synchronized_zone() def update_status(self, context, zone_id, status, serial): """ :param context: Security context information. |