)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":20178,"name":"Tore Anderson","email":"tore@fud.no","username":"tore"},"change_message_id":"ef0c6f4a4423c4a0a52cdca1f41bf859a9436cbd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"974bf525_78edc552","updated":"2026-07-13 09:15:58.000000000","message":"recheck There are no longs available on the voting designate-only-ipv6-bind9 build, and https://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing suggests the POST_FAILURE status could indicate «the system under test losing network connectivity or an issue with the automated testing system». Try running the test again to see if this was a transient issue.","commit_id":"5de4fef35c2cf8c7238006b288a9c9f6a626e876"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"ef93070cc18eba137d2073a221b68aff45755d7e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"40fe6e82_31850fd0","updated":"2026-09-07 10:00:04.000000000","message":"A few comments / questions inline. CR-1 for visibility","commit_id":"af720a0e86c5fc74c4f3c5243438c7f8bf09cd86"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"cfa9d394afa280eeb2e8a5fe51554ad2d2853190","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7082a172_d6ae852a","updated":"2026-09-07 11:25:35.000000000","message":"I wouldn\u0027t like to hijack this patch any further, but what do you think about the changes I have just pushed?","commit_id":"27e81fbdce1a388262bfa3575796f5cc9ba7ebbe"},{"author":{"_account_id":20178,"name":"Tore Anderson","email":"tore@fud.no","username":"tore"},"change_message_id":"923f090cc6be6bfdebf1586b5264291c0640f331","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"61e51d08_a9a3d280","in_reply_to":"7082a172_d6ae852a","updated":"2026-09-07 12:46:56.000000000","message":"LGTM - I noticed and fixed the TSIG key in the test almost exactly at the same time as you, so I ended up pushing a patchset 7 without any code changes - because you had made the *exact* same change in patchset 6 😀 Also updated the commit message a bit","commit_id":"27e81fbdce1a388262bfa3575796f5cc9ba7ebbe"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"68688bb2c1d85c9188de34a35020803e5a014d0a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"acf7f868_5398cfbe","updated":"2026-09-08 09:55:30.000000000","message":"Ideally could we have bugs tied to all of these?","commit_id":"a0ad41344222ebe199b5491a61c3716de75837d5"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"b407a272fb37a79c0b3743939aeccaeb1be4035e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"04203112_1e0bb994","updated":"2026-09-07 15:27:49.000000000","message":"Thanks Tore, LGTM","commit_id":"a0ad41344222ebe199b5491a61c3716de75837d5"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"1bf0859aae32a38fcfe86d422b998e5989427036","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"6c8c1ceb_1c85059e","updated":"2026-09-07 13:55:10.000000000","message":"recheck failure is not related to the patch","commit_id":"a0ad41344222ebe199b5491a61c3716de75837d5"},{"author":{"_account_id":20178,"name":"Tore Anderson","email":"tore@fud.no","username":"tore"},"change_message_id":"2b1025ed196f5d5af8006a9a1d412c27b64d3319","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"0eb90d94_5ee8a490","in_reply_to":"acf7f868_5398cfbe","updated":"2026-09-08 10:36:24.000000000","message":"Done: https://bugs.launchpad.net/designate/+bug/2166761","commit_id":"0d9b6b69989b7c87d7aed8649d74bdea73c3d14c"}],"designate/central/service.py":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"ef93070cc18eba137d2073a221b68aff45755d7e","unresolved":true,"context_lines":[{"line_number":2377,"context_line":"            # own catalog zone, which has no NS recordset."},{"line_number":2378,"context_line":"            zones \u003d self.find_zones("},{"line_number":2379,"context_line":"                context\u003delevated_context,"},{"line_number":2380,"context_line":"                criterion\u003d{\u0027pool_id\u0027: pool.id, \u0027type\u0027: \u0027!CATALOG\u0027}"},{"line_number":2381,"context_line":"            )"},{"line_number":2382,"context_line":"            for zone in zones:"},{"line_number":2383,"context_line":"                self._delete_ns(elevated_context, zone, ns_record)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c4fee7f3_a21d9bd8","line":2380,"range":{"start_line":2380,"start_character":47,"end_line":2380,"end_character":65},"updated":"2026-09-07 10:00:04.000000000","message":"This excludes catalog zones, but SECONDARY zones have the identical problem. _create_ns() (line 409-411) only creates an NS recordset for PRIMARY zones, so SECONDARY zones never get one either. _add_ns() handles that gracefully — it catches RecordSetNotFound and falls back to _create_ns(), which just no-ops for non-PRIMARY zones. _delete_ns() (line 457) has no equivalent guard: it calls find_recordset() directly and lets RecordSetNotFound propagate. So removing a nameserver from a pool containing a SECONDARY zone will crash update_pool() with the same error this patch fixes for catalog zones. Should this filter also exclude SECONDARY, or should _delete_ns() tolerate a missing NS recordset the way _add_ns() does?","commit_id":"af720a0e86c5fc74c4f3c5243438c7f8bf09cd86"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"ef93070cc18eba137d2073a221b68aff45755d7e","unresolved":true,"context_lines":[{"line_number":2395,"context_line":"        elevated_context \u003d context.elevated(all_tenants\u003dTrue)"},{"line_number":2396,"context_line":"        zones \u003d self.find_zones("},{"line_number":2397,"context_line":"            context\u003delevated_context,"},{"line_number":2398,"context_line":"            criterion\u003d{\u0027pool_id\u0027: pool_id, \u0027action\u0027: \u0027!DELETE\u0027})"},{"line_number":2399,"context_line":""},{"line_number":2400,"context_line":"        # If there are existing zones, do not delete the pool"},{"line_number":2401,"context_line":"        LOG.debug(\"Zones is None? %r\", zones)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c1bd8675_84f13034","line":2398,"range":{"start_line":2398,"start_character":12,"end_line":2398,"end_character":64},"updated":"2026-09-07 10:00:04.000000000","message":"The commit message says catalog zones are \"already excluded\" from delete_pool()\u0027s zone count the same way, but this criterion doesn\u0027t filter type. delete_pool() runs this under elevated_context (a few lines up), which — per the fix in this same patch — puts \u0027admin\u0027 in context.roles and bypasses find_zones()\u0027s own !CATALOG guard (line 967). So for any pool with a catalog_zone configured, this call always returns at least the catalog zone, len(zones) \u003d\u003d 0 is never true, and delete_pool() always raises InvalidOperation(\u0027pool must not contain zones\u0027) — even with zero real zones. storage/sqlalchemy/__init__.py:1544 even has code to delete the catalog zone and its TSIG key as part of pool deletion, which is unreachable as a result. Should this criterion also get \u0027type\u0027: \u0027!CATALOG\u0027?","commit_id":"af720a0e86c5fc74c4f3c5243438c7f8bf09cd86"},{"author":{"_account_id":20178,"name":"Tore Anderson","email":"tore@fud.no","username":"tore"},"change_message_id":"03271d287de8dc248223ef4159a75a81000a8611","unresolved":false,"context_lines":[{"line_number":2377,"context_line":"                raise exceptions.LastServerDeleteNotAllowed("},{"line_number":2378,"context_line":"                    \"Not allowed to delete last of servers\""},{"line_number":2379,"context_line":"                )"},{"line_number":2380,"context_line":""},{"line_number":2381,"context_line":"            # Delete the NS record for every zone, other than the pool\u0027s"},{"line_number":2382,"context_line":"            # own catalog zone, which has no NS recordset."},{"line_number":2383,"context_line":"            zones \u003d self.find_zones("}],"source_content_type":"text/x-python","patch_set":4,"id":"aa453b57_615550f9","line":2380,"in_reply_to":"c4fee7f3_a21d9bd8","updated":"2026-09-07 10:10:07.000000000","message":"Done, made _delete_ns() tolerant the same way _add_ns() already is, plus a test for SECONDARY zones.","commit_id":"3aab787f909c3044a2c64648990eb9e1fb70f321"},{"author":{"_account_id":20178,"name":"Tore Anderson","email":"tore@fud.no","username":"tore"},"change_message_id":"03271d287de8dc248223ef4159a75a81000a8611","unresolved":false,"context_lines":[{"line_number":2395,"context_line":"    def delete_pool(self, context, pool_id):"},{"line_number":2396,"context_line":""},{"line_number":2397,"context_line":"        policy.check(\u0027delete_pool\u0027, context)"},{"line_number":2398,"context_line":""},{"line_number":2399,"context_line":"        # Make sure that there are no existing zones in the pool"},{"line_number":2400,"context_line":"        elevated_context \u003d context.elevated(all_tenants\u003dTrue)"},{"line_number":2401,"context_line":"        zones \u003d self.find_zones("}],"source_content_type":"text/x-python","patch_set":4,"id":"47341804_4a20fb50","line":2398,"in_reply_to":"c1bd8675_84f13034","updated":"2026-09-07 10:10:07.000000000","message":"Confirmed, already fixed in https://review.opendev.org/c/openstack/designate/+/996748. Reworded the commit message accordingly.","commit_id":"3aab787f909c3044a2c64648990eb9e1fb70f321"}]}
