From 7c2a3be3e42cc72b6b03c9b6cb67393d423e5e21 Mon Sep 17 00:00:00 2001 From: Arjun Baindur Date: Tue, 31 Jul 2018 14:36:32 -0700 Subject: [PATCH] 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) --- designate/central/service.py | 1 + 1 file changed, 1 insertion(+) diff --git a/designate/central/service.py b/designate/central/service.py index 39f742f0f..a961a667f 100644 --- a/designate/central/service.py +++ b/designate/central/service.py @@ -2296,6 +2296,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.