Browse Source

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 12cd654b14)
tags/5.0.3
Arjun Baindur 10 months ago
parent
commit
7c2a3be3e4
1 changed files with 1 additions and 0 deletions
  1. 1
    0
      designate/central/service.py

+ 1
- 0
designate/central/service.py View File

@@ -2296,6 +2296,7 @@ class Service(service.RPCService, service.Service):
2296 2296
     @notification('dns.domain.update')
2297 2297
     @notification('dns.zone.update')
2298 2298
     @transaction
2299
+    @synchronized_zone()
2299 2300
     def update_status(self, context, zone_id, status, serial):
2300 2301
         """
2301 2302
         :param context: Security context information.

Loading…
Cancel
Save