diff options
author | Erik Olof Gunnar Andersson <eandersson@blizzard.com> | 2023-04-09 11:38:46 -0700 |
---|---|---|
committer | Erik Olof Gunnar Andersson <eandersson@blizzard.com> | 2023-04-13 20:18:56 +0000 |
commit | eb67571d90ca0ed079ed391a6ed3970998491ebc (patch) | |
tree | 8689aa9450b037b3bd05836240183b31128c240a | |
parent | be775801e33313305b5d90dca10bae166e6938c8 (diff) | |
download | designate-eb67571d90ca0ed079ed391a6ed3970998491ebc.tar.gz |
Use ids when removing ptr records
If the record status changes during the removal process,
the current implementation will fail.
Change-Id: I02b5d7499440154160c89ed63a2f70652fe72145
(cherry picked from commit b3161ece234b5e2ee7658060aaa936af625bef38)
-rw-r--r-- | designate/central/service.py | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/designate/central/service.py b/designate/central/service.py index 9ce54515..741897c4 100644 --- a/designate/central/service.py +++ b/designate/central/service.py @@ -1591,7 +1591,8 @@ class Service(service.RPCService): LOG.debug('Deleting record %s for FIP %s', record['id'], record['managed_resource_id']) self._delete_ptr_record( - elevated_context, record + elevated_context, record.zone_id, record.recordset_id, + record['id'] ) def _list_floatingips(self, context, region=None): @@ -1765,7 +1766,8 @@ class Service(service.RPCService): raise exceptions.NotFound(msg) self._delete_ptr_record( - elevated_context, record + elevated_context, record.zone_id, record.recordset_id, + record['id'] ) def _create_floating_ip(self, context, fip, record, @@ -1845,24 +1847,30 @@ class Service(service.RPCService): return fips @transaction - def _delete_ptr_record(self, context, record): + def _delete_ptr_record(self, context, zone_id, recordset_id, + record_to_delete_id): try: - recordset = self.get_recordset( - context, record.zone_id, record.recordset_id + recordset = self.storage.find_recordset( + context, {'id': recordset_id, 'zone_id': zone_id} ) + record_ids = [record['id'] for record in recordset.records] - if record not in recordset.records: + if record_to_delete_id not in record_ids: LOG.debug( 'PTR Record %s not found in recordset %s', - record.id, record.recordset_id + record_to_delete_id, recordset_id ) return - recordset.records.remove(record) + for record in list(recordset.records): + if record['id'] != record_to_delete_id: + continue + recordset.records.remove(record) + break if not recordset.records: self.delete_recordset( - context, record.zone_id, record.recordset_id + context, zone_id, recordset_id ) return |