)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"bbc58a46097ff8c8aad9ebc588539fd6cc8f84fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"df7e51cf_1c54d853","updated":"2023-06-08 16:10:21.000000000","message":"Hey there,\n\nthis is the current state of the implementation of the catalog zone spec. It is still WIP and there are some TODOs left, but most of the spec should be implemented (except tests and docs). The functionality for defining a CatZ in pools.yaml, adding it to the DB, and doing AXFRs for the CatZ is working, although we are having some issues on our test setup when syncing CatZ and its member zones to Bind9 when triggered by a NOTIFY. Also, TSIG code is not tested yet.\n\nAny feedback on this is appreciated.","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"},{"author":{"_account_id":32755,"name":"Christian Rohmann","email":"christian.rohmann@inovex.de","username":"frittentheke"},"change_message_id":"d6169ccab5c435a8051606d57100b72a45a6804a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7f1e208a_0e49d6b7","updated":"2023-06-19 07:57:46.000000000","message":"retest","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"7059017984ace4f6fd4d5f3de9d796062d9837de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e743235d_b7e18b9b","updated":"2023-06-19 12:42:40.000000000","message":"PS2 should fix most tests, 3 are somewhat still expected to fail.","commit_id":"ff6dc52cd690a825e902d61d714e60d6a509dc1b"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"fdc3763caaa15acecf1397ad61d2d83396fe82ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ffa3a87f_d99a6b3d","updated":"2023-07-18 09:54:13.000000000","message":"Nit: Try to stay consistent with single and double quotes.","commit_id":"cfefee91549a1214cd2d0c6a72a247809d86115a"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e3dccb4bd40c99b2a88db701433f56d09e321c8b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ba1ad426_70ac4862","updated":"2023-07-12 18:05:29.000000000","message":"Opps, some of these old comments never posted. Doing that now and we can reconcile","commit_id":"cfefee91549a1214cd2d0c6a72a247809d86115a"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"f7cf6df64b0883fec967b97a3c4f0fa0dd1b2e4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5db281f9_5515a215","updated":"2023-07-11 11:45:01.000000000","message":"We have now added tests for our code changes as well as various fixes.\n\nPTAL","commit_id":"cfefee91549a1214cd2d0c6a72a247809d86115a"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"bb5a71dfe5377fc325ed1fdc3e3a799f9cbe4dfe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c12d9e70_3cb3190d","updated":"2023-07-18 15:12:30.000000000","message":"Docs, release notes are now added and code is updated.","commit_id":"df888dec25894c935e6df8858f6214a277b3ddec"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"dfdb15ec812c405310fba32a9894bab4df50c46a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d65f8d43_5cfa28b4","updated":"2023-07-19 15:09:12.000000000","message":"Added method to check for catalog zone policy (e. g. forbid catalog zone creation via API), fixed admin tests (Spec - Other changes 5a).","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a76350edeee8ab539d8bea2808a2deb2c4e25302","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b9354388_1fd91b36","updated":"2023-07-18 23:58:25.000000000","message":"Here is the start of a review and a number of API validation/security items we need to fix.\nMore reviews in progress.","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"9d487541c37e1d3f81fd63f11a14fc8db6fb6fd9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"eb2337a7_b14423c5","updated":"2023-07-19 23:31:29.000000000","message":"BTW, I have to say so far this looks really good!","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8da46e6d418b8ef7ced600e9ba023be8004cffce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"24fe0188_8ed9b3f2","updated":"2023-07-19 23:30:16.000000000","message":"Here are a few more comments. I still need to review the main SQL closer, look at the tests, and the docs.","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"81272e9e_69d0cae3","updated":"2023-07-21 22:09:47.000000000","message":"Ok, I have completed a review pass on this patch.\nIt looks really good.","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"ed8b263f_7858fac3","updated":"2023-08-08 14:37:29.000000000","message":"All code changes now have full test coverage. Review feedback should also be addressed.","commit_id":"0d1049ad2b7d14e23de2a27143676e47a84eb47e"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"7cd22df9b5f27b8aec7700e3cb67907bdaf512f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"7754aa31_029a333d","updated":"2023-08-23 14:41:17.000000000","message":"I would like to get this into the Bobcat release. Do you think that can happen? Are you working on the driver implementation?","commit_id":"cc91a10f3301624da684c3b579b832a0b026893a"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"0dbd1665c919c93e4f0e56be03fc0e100138a2d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"3fa6cab2_ca619fce","in_reply_to":"7754aa31_029a333d","updated":"2023-08-24 07:48:46.000000000","message":"I was also hoping to get this ready in time for Bobcat. I will complete my work on this and push the changes today.","commit_id":"cc91a10f3301624da684c3b579b832a0b026893a"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3d14b0484616c003d801b9ab6b5799e70a13df7f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"dae35771_89f9b314","updated":"2023-08-28 17:55:15.000000000","message":"As I setup some testing framework for this, I find it is not working[1].\n\nI also remembered why I was against the catalog_zone driver idea.\nFor example, PDNS supports creating catalog zones via the API[2]. I expect most backends will eventually. So, if we leave the pool driver as PDNS, we can extend the driver to support creating the catalog secondary zone on PDNS automatically at pool creation time via the PDNS API. We can\u0027t do this if the driver is catalog_zone as it won\u0027t know what backend is actually in use.\n\nSince this is feature freeze week, I don\u0027t think this is going to make it into the Bobcat release. I think it is fairly close, and should land early in Caracal.\n\n[1] https://review.opendev.org/c/openstack/designate/+/892814\n[2] https://doc.powerdns.com/authoritative/catalog.html#setting-up-a-consumer-zone","commit_id":"394d09c3c533c4d765a0a01b259336c31a0cbaf7"},{"author":{"_account_id":32755,"name":"Christian Rohmann","email":"christian.rohmann@inovex.de","username":"frittentheke"},"change_message_id":"888b947244aad8d5051a6769dfe4c4659c36d4ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"a7fc8360_758cb570","updated":"2023-10-23 11:35:24.000000000","message":"Michael, all. \n\nJan and myself put ourselves and the catalog zone feature on PTG agenda at https://etherpad.opendev.org/p/oct2023-ptg-designate. \n\nWould be awesome if we could discuss the remaining issue(s) and get this feature ready to merge for Caracal.","commit_id":"394d09c3c533c4d765a0a01b259336c31a0cbaf7"},{"author":{"_account_id":32755,"name":"Christian Rohmann","email":"christian.rohmann@inovex.de","username":"frittentheke"},"change_message_id":"4190422f294a2d935a9b2061948b28c6485dd3c1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"2c2f6888_b703f4c7","updated":"2023-09-12 12:31:48.000000000","message":"Michael, is there any way we could tackle the review and discussion together?\nI\u0027d rather not have this wait in this state for weeks, but get ready to merge.","commit_id":"394d09c3c533c4d765a0a01b259336c31a0cbaf7"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"c54524eda08ec25bb4d8b7394ffa95639415d663","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"13e48ecd_185b6bef","in_reply_to":"2c2f6888_b703f4c7","updated":"2024-02-05 13:18:36.000000000","message":"Done","commit_id":"394d09c3c533c4d765a0a01b259336c31a0cbaf7"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"2e6e8253d3842c1597c9c1f675652ef6617a6147","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"6f51b3ec_7ddd098b","in_reply_to":"30b99f16_4dfdc9f5","updated":"2023-11-20 13:02:52.000000000","message":"Regarding this, please see my comment here: https://review.opendev.org/c/openstack/designate/+/885594/comment/615abae1_26d86e78/","commit_id":"394d09c3c533c4d765a0a01b259336c31a0cbaf7"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"ab3acaa8aa22cea7bfa4359fe7dd461c696ca1a9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"30b99f16_4dfdc9f5","in_reply_to":"5dd9f486_d76a125d","updated":"2023-10-30 15:43:01.000000000","message":"Hey Michael, all,\n\nas discussed last week (PTG), here is the proposal regarding the drivers situation.\n\nFirst and foremost, I agree that having an optional driver functionality for checking the catalog zone\u0027s state on secondary DNS servers makes sense. That way, catalog zones can automatically be created/updated/deleted on secondaries.\n\nThe suggested implementation for that is as follows:\n1. Introduce a new method \"ensure_catalog_zone_state(self, context, zone)\" in the base backend driver. This method would always be called on pool creation/update/deletion, with the param \"zone\" being the catalog zone, or None if the pool has no catalog zone configured. Drivers are free to override this method and check via their driver-specific API which operations should be done to ensure the required catalog zone state on the secondaries. This method will not make any changes by default.\n2. Do not call the create_zone/update_zone/delete_zone driver methods if a catalog zone is configured, as zone creations etc. will be orchestrated via the catalog zone itself. This removes the requirement for a no-op driver (i. e. the previously discussed catalog zone driver), and \"normal\" drivers can be used (to accomplish point 1) without the driver messing with the zones directly.\n\nWith these changes, operators can sort of choose from two \"modes of operation\":\n1. Using catalog zones with the fake driver: In this mode, all zone creations/updates/deletions will be orchestrated through the catalog zone. No changes will ever be made by the driver. Catalog zones on the secondaries must be configured either manually or via external config management.\n2. Using catalog zones with, for example, the PDNS driver: In this mode, zone creations/updates/deletions will be orchestrated through the catalog zone, and catalog zone state on the secondaries will be automatically managed by the driver (once the PDNS driver implements the new ensure_catalog_zone_state() method).\n\nIf an operator uses \"mode 2\", and the configured driver eventually implements \nensure_catalog_zone_state(), the driver could unexpectedly override zone configs after an OpenStack upgrade. Therefore, I think automatic management of catalog zones should be clearly mentioned somewhere, or maybe even locked behind a feature toggle in pools.yaml.\n\nWhat do you think?","commit_id":"394d09c3c533c4d765a0a01b259336c31a0cbaf7"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"c54524eda08ec25bb4d8b7394ffa95639415d663","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"b8f09d58_fffb806f","in_reply_to":"6f51b3ec_7ddd098b","updated":"2024-02-05 13:18:36.000000000","message":"Marking this as resolved as I think the patch is in a mergeable state and the discussion around this got obsolete.","commit_id":"394d09c3c533c4d765a0a01b259336c31a0cbaf7"},{"author":{"_account_id":32755,"name":"Christian Rohmann","email":"christian.rohmann@inovex.de","username":"frittentheke"},"change_message_id":"428cfe99960ca4ab52f527f47fccd1e122163c4d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"5dd9f486_d76a125d","in_reply_to":"dae35771_89f9b314","updated":"2023-08-29 06:33:33.000000000","message":"\u003e I also remembered why I was against the catalog_zone driver idea.\n\u003e For example, PDNS supports creating catalog zones via the API[2]. I expect most backends will eventually. So, if we leave the pool driver as PDNS, we can extend the driver to support creating the catalog secondary zone on PDNS automatically at pool creation time via the PDNS API. We can\u0027t do this if the driver is catalog_zone as it won\u0027t know what backend is actually in use.\n\nCreating or manaing the catalog zone itself on the secondaries, to me, is totally out of scope for Designate and its role. Somewhat of a strange \"design\" even. What about setting up TSIG or installing the secondary DNS server software and managing all its other settings like rate limits or access control lists,...? For all those other duties I\u0027d still use some form of config management. \n\nTo me defining a catalog zone is something best left to configuration management / deployment tooling and not Designate. One advantage of catalog zone support to have an universal interface and NOT 5 software and API specific drivers anymore.\n\n\u003e Since this is feature freeze week, I don\u0027t think this is going to make it into the Bobcat release. I think it is fairly close, and should land early in Caracal.\n\nThat\u0027s really unfortunate.","commit_id":"394d09c3c533c4d765a0a01b259336c31a0cbaf7"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"25d3445377a2b03e8864c4a1e61a35dd4b79beb0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"fa5ce974_ff18ce5f","updated":"2023-11-08 12:22:38.000000000","message":"I have now fixed the remaining major issue which prevented member zones from being synced to secondary DNS servers correctly (CatZ serial in SOA was not updated correctly, and another funny race condition where secondaries sometimes got the old serial). This caused new zone\u0027s states to end up in ERROR (as the zone poller could not find them on secondaries). All of this is now fixed which means that Tempest tests should also run fine now.\n\nI have also revised multiple test cases which I found to be racy.\n\nThe recent proposal is partially implemented as well.","commit_id":"73ef8976ef50661533871be1aa6b37468e896caa"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a65dc903156883eefe9aedf3cdbb3e2ded91f190","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"7a3f538c_d6c0ed33","updated":"2024-02-14 18:59:24.000000000","message":"Ok, I have given this patch another review pass and I think it is in good enough shape for merge.","commit_id":"60a6ceed09515842366e67de86b5aef783f1dcd2"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"450e92d427f4e57d22ce666030d41fadc0342ceb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"0411bc45_fa4cacaf","updated":"2024-01-22 16:27:11.000000000","message":"recheck","commit_id":"60a6ceed09515842366e67de86b5aef783f1dcd2"}],"designate/backend/base.py":[{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"4f6ea4e744c54b3aabe96a998c5a7e7a7038ade4","unresolved":true,"context_lines":[{"line_number":80,"context_line":"        :param zone: the DNS zone."},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def ensure_catalog_zone_state(self, context, zone):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Ensure catalog zone state on secondary DNS servers."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"615abae1_26d86e78","line":83,"updated":"2023-11-15 23:04:31.000000000","message":"What is this?","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"158710eaaf74201a9fbdeeb4fd522be381d87053","unresolved":true,"context_lines":[{"line_number":80,"context_line":"        :param zone: the DNS zone."},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def ensure_catalog_zone_state(self, context, zone):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Ensure catalog zone state on secondary DNS servers."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"649101a7_b9cf6f6f","line":83,"in_reply_to":"615abae1_26d86e78","updated":"2023-11-16 13:00:36.000000000","message":"This is part of the implementation of my proposal (https://review.opendev.org/c/openstack/designate/+/885594/comments/dae35771_89f9b314). It could be used for setting up the CatZ itself on secondaries. It is not in use right now.","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"4beb4832e47f019694149acf3893005b37ac7a97","unresolved":true,"context_lines":[{"line_number":80,"context_line":"        :param zone: the DNS zone."},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def ensure_catalog_zone_state(self, context, zone):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Ensure catalog zone state on secondary DNS servers."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"be04fcca_bffaa74c","line":83,"in_reply_to":"649101a7_b9cf6f6f","updated":"2023-11-17 12:17:37.000000000","message":"I haven\u0027t read the proposal yet, but that be part of a second patch to keep this one lighter to review?","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"c54524eda08ec25bb4d8b7394ffa95639415d663","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        :param zone: the DNS zone."},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def ensure_catalog_zone_state(self, context, zone):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Ensure catalog zone state on secondary DNS servers."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"d3980e9f_ffa50ef2","line":83,"in_reply_to":"8047ac7f_95ebc8a3","updated":"2024-02-05 13:18:36.000000000","message":"Marking this as resolved as I think the patch is in a mergeable state and the discussion around this got obsolete.","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"96e0506e1a62ad8193968831c866d8f008f0e2e5","unresolved":true,"context_lines":[{"line_number":80,"context_line":"        :param zone: the DNS zone."},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def ensure_catalog_zone_state(self, context, zone):"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        Ensure catalog zone state on secondary DNS servers."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"8047ac7f_95ebc8a3","line":83,"in_reply_to":"be04fcca_bffaa74c","updated":"2023-11-20 13:00:17.000000000","message":"As I re-read the spec, I found that it was initially agreed on that the functionality of configuring the CatZ on secondaries via backend drivers should explicitly not be part of this patch [1]. While I think the proposal remains valid, I would strongly base myself on the spec and keep that functionality for a future patch.\n\n1: https://specs.openstack.org/openstack/designate-specs/specs/antelope/catalog-zones.html#other-notes","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"}],"designate/central/service.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e3dccb4bd40c99b2a88db701433f56d09e321c8b","unresolved":true,"context_lines":[{"line_number":3036,"context_line":"        if zone.catalog_zone:"},{"line_number":3037,"context_line":"            return"},{"line_number":3038,"context_line":""},{"line_number":3039,"context_line":"        # TODO(jhartkopf): Do we need the policy check of self.find_pool()?"},{"line_number":3040,"context_line":"        pool \u003d self.storage.find_pool(context, criterion\u003d{\u0027id\u0027: zone.pool_id})"},{"line_number":3041,"context_line":"        catalog_zone \u003d self.storage.get_catalog_zone(context, pool)"},{"line_number":3042,"context_line":"        self.increment_zone_serial(context, catalog_zone)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1d9fc86a_cef52a11","line":3039,"updated":"2023-07-12 18:05:29.000000000","message":"You are probably going to need an elevated context here, as the user context will likely not have the access rights you will need for these actions.","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"bb5a71dfe5377fc325ed1fdc3e3a799f9cbe4dfe","unresolved":false,"context_lines":[{"line_number":3036,"context_line":"        if zone.catalog_zone:"},{"line_number":3037,"context_line":"            return"},{"line_number":3038,"context_line":""},{"line_number":3039,"context_line":"        # TODO(jhartkopf): Do we need the policy check of self.find_pool()?"},{"line_number":3040,"context_line":"        pool \u003d self.storage.find_pool(context, criterion\u003d{\u0027id\u0027: zone.pool_id})"},{"line_number":3041,"context_line":"        catalog_zone \u003d self.storage.get_catalog_zone(context, pool)"},{"line_number":3042,"context_line":"        self.increment_zone_serial(context, catalog_zone)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2deb5fdd_f3f85e3f","line":3039,"in_reply_to":"1d9fc86a_cef52a11","updated":"2023-07-18 15:12:30.000000000","message":"So I understand that we do not need to check this explicitly via self.find_pool(), i. e. storage.find_pool() will not fail even though the user has no elevated context (IIRC we had issues using the policy check on our test setup).","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a76350edeee8ab539d8bea2808a2deb2c4e25302","unresolved":true,"context_lines":[{"line_number":735,"context_line":"    def create_zone(self, context, zone):"},{"line_number":736,"context_line":"        \"\"\"Create zone: perform checks and then call _create_zone()"},{"line_number":737,"context_line":"        \"\"\""},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"        # Default to creating in the current users tenant"},{"line_number":740,"context_line":"        zone.tenant_id \u003d zone.tenant_id or context.project_id"},{"line_number":741,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"569dfe3a_3dc672c0","line":738,"updated":"2023-07-18 23:58:25.000000000","message":"We need to add a check here for zone type of \"CATALOG\" and if so, reject it with a class Forbidden exception.\nNo one should be able to create a catalog zone via the API, only the pools.yaml right?","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"dfdb15ec812c405310fba32a9894bab4df50c46a","unresolved":false,"context_lines":[{"line_number":735,"context_line":"    def create_zone(self, context, zone):"},{"line_number":736,"context_line":"        \"\"\"Create zone: perform checks and then call _create_zone()"},{"line_number":737,"context_line":"        \"\"\""},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"        # Default to creating in the current users tenant"},{"line_number":740,"context_line":"        zone.tenant_id \u003d zone.tenant_id or context.project_id"},{"line_number":741,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"4ec435e7_b7cc7560","line":738,"in_reply_to":"569dfe3a_3dc672c0","updated":"2023-07-19 15:09:12.000000000","message":"Ack","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a76350edeee8ab539d8bea2808a2deb2c4e25302","unresolved":true,"context_lines":[{"line_number":955,"context_line":"        \"\"\"Update zone. Perform checks and then call _update_zone()"},{"line_number":956,"context_line":""},{"line_number":957,"context_line":"        :returns: updated zone"},{"line_number":958,"context_line":"        \"\"\""},{"line_number":959,"context_line":"        if policy.enforce_new_defaults():"},{"line_number":960,"context_line":"            target \u003d {"},{"line_number":961,"context_line":"                \u0027zone_id\u0027: zone.obj_get_original_value(\u0027id\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a6eca4b_a16d20e0","line":958,"updated":"2023-07-18 23:58:25.000000000","message":"We need to add a check here for zone type of \"CATALOG\" and if so, reject it with a class Forbidden exception.\nNo one should be able to update a catalog zone via the API, only the pools.yaml right?","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"dfdb15ec812c405310fba32a9894bab4df50c46a","unresolved":false,"context_lines":[{"line_number":955,"context_line":"        \"\"\"Update zone. Perform checks and then call _update_zone()"},{"line_number":956,"context_line":""},{"line_number":957,"context_line":"        :returns: updated zone"},{"line_number":958,"context_line":"        \"\"\""},{"line_number":959,"context_line":"        if policy.enforce_new_defaults():"},{"line_number":960,"context_line":"            target \u003d {"},{"line_number":961,"context_line":"                \u0027zone_id\u0027: zone.obj_get_original_value(\u0027id\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"a05259e3_a797b3fd","line":958,"in_reply_to":"7a6eca4b_a16d20e0","updated":"2023-07-19 15:09:12.000000000","message":"Ack","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a76350edeee8ab539d8bea2808a2deb2c4e25302","unresolved":true,"context_lines":[{"line_number":1034,"context_line":"        poke back to set action to NONE and status to DELETED"},{"line_number":1035,"context_line":"        \"\"\""},{"line_number":1036,"context_line":"        zone \u003d self.storage.get_zone(context, zone_id)"},{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"        if policy.enforce_new_defaults():"},{"line_number":1039,"context_line":"            target \u003d {"},{"line_number":1040,"context_line":"                \u0027zone_id\u0027: zone_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"38edc2c9_9117d853","line":1037,"updated":"2023-07-18 23:58:25.000000000","message":"We need to add a check here for zone type of \"CATALOG\" and if so, reject it with a class Forbidden exception.\nNo one should be able to delete a catalog zone via the API, only the pools.yaml right?","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"dfdb15ec812c405310fba32a9894bab4df50c46a","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"        poke back to set action to NONE and status to DELETED"},{"line_number":1035,"context_line":"        \"\"\""},{"line_number":1036,"context_line":"        zone \u003d self.storage.get_zone(context, zone_id)"},{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"        if policy.enforce_new_defaults():"},{"line_number":1039,"context_line":"            target \u003d {"},{"line_number":1040,"context_line":"                \u0027zone_id\u0027: zone_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa70f56e_addfb6db","line":1037,"in_reply_to":"38edc2c9_9117d853","updated":"2023-07-19 15:09:12.000000000","message":"Ack","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a76350edeee8ab539d8bea2808a2deb2c4e25302","unresolved":true,"context_lines":[{"line_number":1207,"context_line":"    def share_zone(self, context, zone_id, shared_zone):"},{"line_number":1208,"context_line":"        # Ensure that zone exists and get the zone owner"},{"line_number":1209,"context_line":"        zone \u003d self.storage.get_zone(context, zone_id)"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"        if policy.enforce_new_defaults():"},{"line_number":1212,"context_line":"            target \u003d {constants.RBAC_PROJECT_ID: zone.tenant_id}"},{"line_number":1213,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bbe4407f_f3911d8b","line":1210,"updated":"2023-07-18 23:58:25.000000000","message":"We need to add a check here for zone type of \"CATALOG\" and if so, reject it with a class Forbidden exception.\nNo one should be able to share a catalog zone.","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"dfdb15ec812c405310fba32a9894bab4df50c46a","unresolved":false,"context_lines":[{"line_number":1207,"context_line":"    def share_zone(self, context, zone_id, shared_zone):"},{"line_number":1208,"context_line":"        # Ensure that zone exists and get the zone owner"},{"line_number":1209,"context_line":"        zone \u003d self.storage.get_zone(context, zone_id)"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"        if policy.enforce_new_defaults():"},{"line_number":1212,"context_line":"            target \u003d {constants.RBAC_PROJECT_ID: zone.tenant_id}"},{"line_number":1213,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bc77ca1e_7674d737","line":1210,"in_reply_to":"bbe4407f_f3911d8b","updated":"2023-07-19 15:09:12.000000000","message":"Ack","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a76350edeee8ab539d8bea2808a2deb2c4e25302","unresolved":true,"context_lines":[{"line_number":1345,"context_line":"                         increment_serial\u003dTrue):"},{"line_number":1346,"context_line":"        zone \u003d self.storage.get_zone(context, zone_id,"},{"line_number":1347,"context_line":"                                     apply_tenant_criteria\u003dFalse)"},{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"        # Note this call must follow the get_zone call to maintain API response"},{"line_number":1350,"context_line":"        # code behavior."},{"line_number":1351,"context_line":"        zone_shared \u003d self._check_zone_share_permission(context, zone)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ab5710e8_e73dd5e0","line":1348,"updated":"2023-07-18 23:58:25.000000000","message":"We need to add a check here for zone type of \"CATALOG\" and if so, reject it with a class Forbidden exception.\nNo one should be able to create a recordset in a catalog zone right?","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"dfdb15ec812c405310fba32a9894bab4df50c46a","unresolved":false,"context_lines":[{"line_number":1345,"context_line":"                         increment_serial\u003dTrue):"},{"line_number":1346,"context_line":"        zone \u003d self.storage.get_zone(context, zone_id,"},{"line_number":1347,"context_line":"                                     apply_tenant_criteria\u003dFalse)"},{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"        # Note this call must follow the get_zone call to maintain API response"},{"line_number":1350,"context_line":"        # code behavior."},{"line_number":1351,"context_line":"        zone_shared \u003d self._check_zone_share_permission(context, zone)"}],"source_content_type":"text/x-python","patch_set":7,"id":"59a290c0_46bd79f3","line":1348,"in_reply_to":"ab5710e8_e73dd5e0","updated":"2023-07-19 15:09:12.000000000","message":"Ack","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a76350edeee8ab539d8bea2808a2deb2c4e25302","unresolved":true,"context_lines":[{"line_number":1545,"context_line":"        return recordset"},{"line_number":1546,"context_line":""},{"line_number":1547,"context_line":"    @rpc.expected_exceptions()"},{"line_number":1548,"context_line":"    def create_managed_records(self, context, zone_id, records_values,"},{"line_number":1549,"context_line":"                               recordset_values):"},{"line_number":1550,"context_line":"        return self._create_or_update_managed_recordset("},{"line_number":1551,"context_line":"            context, zone_id, records_values, recordset_values"}],"source_content_type":"text/x-python","patch_set":7,"id":"83fc8b6d_e7fd00a0","line":1548,"updated":"2023-07-18 23:58:25.000000000","message":"We need to add a check here for zone type of \"CATALOG\" and if so, reject it with a class Forbidden exception.\nNo one should be able to create records in a catalog zone via the API right?","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"dfdb15ec812c405310fba32a9894bab4df50c46a","unresolved":false,"context_lines":[{"line_number":1545,"context_line":"        return recordset"},{"line_number":1546,"context_line":""},{"line_number":1547,"context_line":"    @rpc.expected_exceptions()"},{"line_number":1548,"context_line":"    def create_managed_records(self, context, zone_id, records_values,"},{"line_number":1549,"context_line":"                               recordset_values):"},{"line_number":1550,"context_line":"        return self._create_or_update_managed_recordset("},{"line_number":1551,"context_line":"            context, zone_id, records_values, recordset_values"}],"source_content_type":"text/x-python","patch_set":7,"id":"8379e362_878f2c17","line":1548,"in_reply_to":"83fc8b6d_e7fd00a0","updated":"2023-07-19 15:09:12.000000000","message":"Ack","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a76350edeee8ab539d8bea2808a2deb2c4e25302","unresolved":true,"context_lines":[{"line_number":1575,"context_line":"    def update_recordset(self, context, recordset, increment_serial\u003dTrue):"},{"line_number":1576,"context_line":"        zone_id \u003d recordset.obj_get_original_value(\u0027zone_id\u0027)"},{"line_number":1577,"context_line":"        changes \u003d recordset.obj_get_changes()"},{"line_number":1578,"context_line":""},{"line_number":1579,"context_line":"        # Ensure immutable fields are not changed"},{"line_number":1580,"context_line":"        if \u0027tenant_id\u0027 in changes:"},{"line_number":1581,"context_line":"            raise exceptions.BadRequest(\u0027Moving a recordset between tenants \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"fc1eb4b3_0702944a","line":1578,"updated":"2023-07-18 23:58:25.000000000","message":"We need to add a check here for zone type of \"CATALOG\" and if so, reject it with a class Forbidden exception.\nNo one should be able to update records in a catalog zone right?","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"dfdb15ec812c405310fba32a9894bab4df50c46a","unresolved":false,"context_lines":[{"line_number":1575,"context_line":"    def update_recordset(self, context, recordset, increment_serial\u003dTrue):"},{"line_number":1576,"context_line":"        zone_id \u003d recordset.obj_get_original_value(\u0027zone_id\u0027)"},{"line_number":1577,"context_line":"        changes \u003d recordset.obj_get_changes()"},{"line_number":1578,"context_line":""},{"line_number":1579,"context_line":"        # Ensure immutable fields are not changed"},{"line_number":1580,"context_line":"        if \u0027tenant_id\u0027 in changes:"},{"line_number":1581,"context_line":"            raise exceptions.BadRequest(\u0027Moving a recordset between tenants \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"2a28a7db_f365fca7","line":1578,"in_reply_to":"fc1eb4b3_0702944a","updated":"2023-07-19 15:09:12.000000000","message":"Ack","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a76350edeee8ab539d8bea2808a2deb2c4e25302","unresolved":true,"context_lines":[{"line_number":1680,"context_line":"    @notification.notify_type(\u0027dns.recordset.delete\u0027)"},{"line_number":1681,"context_line":"    def delete_recordset(self, context, zone_id, recordset_id,"},{"line_number":1682,"context_line":"                         increment_serial\u003dTrue):"},{"line_number":1683,"context_line":"        # apply_tenant_criteria\u003dFalse here as we will gate this delete"},{"line_number":1684,"context_line":"        # with the RBAC rules below. This allows the zone owner to delete"},{"line_number":1685,"context_line":"        # all of the recordsets of the zone."},{"line_number":1686,"context_line":"        recordset \u003d self.storage.find_recordset("}],"source_content_type":"text/x-python","patch_set":7,"id":"a2e3fd5f_c298aef9","line":1683,"updated":"2023-07-18 23:58:25.000000000","message":"We need to add a check here for zone type of \"CATALOG\" and if so, reject it with a class Forbidden exception.\nNo one should be able to delete records in a catalog zone right?","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"dfdb15ec812c405310fba32a9894bab4df50c46a","unresolved":false,"context_lines":[{"line_number":1680,"context_line":"    @notification.notify_type(\u0027dns.recordset.delete\u0027)"},{"line_number":1681,"context_line":"    def delete_recordset(self, context, zone_id, recordset_id,"},{"line_number":1682,"context_line":"                         increment_serial\u003dTrue):"},{"line_number":1683,"context_line":"        # apply_tenant_criteria\u003dFalse here as we will gate this delete"},{"line_number":1684,"context_line":"        # with the RBAC rules below. This allows the zone owner to delete"},{"line_number":1685,"context_line":"        # all of the recordsets of the zone."},{"line_number":1686,"context_line":"        recordset \u003d self.storage.find_recordset("}],"source_content_type":"text/x-python","patch_set":7,"id":"833267ee_0927bd56","line":1683,"in_reply_to":"a2e3fd5f_c298aef9","updated":"2023-07-19 15:09:12.000000000","message":"Ack","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a76350edeee8ab539d8bea2808a2deb2c4e25302","unresolved":true,"context_lines":[{"line_number":2514,"context_line":"    @notification.notify_type(\u0027dns.zone_transfer_request.create\u0027)"},{"line_number":2515,"context_line":"    @transaction"},{"line_number":2516,"context_line":"    def create_zone_transfer_request(self, context, zone_transfer_request):"},{"line_number":2517,"context_line":""},{"line_number":2518,"context_line":"        # get zone"},{"line_number":2519,"context_line":"        zone \u003d self.get_zone(context, zone_transfer_request.zone_id)"},{"line_number":2520,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"65cae100_68b625f5","line":2517,"updated":"2023-07-18 23:58:25.000000000","message":"We need to add a check here for zone type of \"CATALOG\" and if so, reject it with a class Forbidden exception.\nNo one should be able to transfer a catalog zone right?","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"dfdb15ec812c405310fba32a9894bab4df50c46a","unresolved":false,"context_lines":[{"line_number":2514,"context_line":"    @notification.notify_type(\u0027dns.zone_transfer_request.create\u0027)"},{"line_number":2515,"context_line":"    @transaction"},{"line_number":2516,"context_line":"    def create_zone_transfer_request(self, context, zone_transfer_request):"},{"line_number":2517,"context_line":""},{"line_number":2518,"context_line":"        # get zone"},{"line_number":2519,"context_line":"        zone \u003d self.get_zone(context, zone_transfer_request.zone_id)"},{"line_number":2520,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5963dcce_d15c05e1","line":2517,"in_reply_to":"65cae100_68b625f5","updated":"2023-07-19 15:09:12.000000000","message":"Ack","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a76350edeee8ab539d8bea2808a2deb2c4e25302","unresolved":true,"context_lines":[{"line_number":2728,"context_line":"    @rpc.expected_exceptions()"},{"line_number":2729,"context_line":"    @notification.notify_type(\u0027dns.zone_import.create\u0027)"},{"line_number":2730,"context_line":"    def create_zone_import(self, context, request_body):"},{"line_number":2731,"context_line":"        if policy.enforce_new_defaults():"},{"line_number":2732,"context_line":"            target \u003d {constants.RBAC_PROJECT_ID: context.project_id}"},{"line_number":2733,"context_line":"        else:"},{"line_number":2734,"context_line":"            target \u003d {\u0027tenant_id\u0027: context.project_id}"}],"source_content_type":"text/x-python","patch_set":7,"id":"c1e4a053_b979dd85","line":2731,"updated":"2023-07-18 23:58:25.000000000","message":"We need to add a check here for zone type of \"CATALOG\" and if so, reject it with a class Forbidden exception.\nNo one should be able to import a catalog zone via the API right?","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8da46e6d418b8ef7ced600e9ba023be8004cffce","unresolved":true,"context_lines":[{"line_number":2728,"context_line":"    @rpc.expected_exceptions()"},{"line_number":2729,"context_line":"    @notification.notify_type(\u0027dns.zone_import.create\u0027)"},{"line_number":2730,"context_line":"    def create_zone_import(self, context, request_body):"},{"line_number":2731,"context_line":"        if policy.enforce_new_defaults():"},{"line_number":2732,"context_line":"            target \u003d {constants.RBAC_PROJECT_ID: context.project_id}"},{"line_number":2733,"context_line":"        else:"},{"line_number":2734,"context_line":"            target \u003d {\u0027tenant_id\u0027: context.project_id}"}],"source_content_type":"text/x-python","patch_set":7,"id":"b8c1b639_8ce020c1","line":2731,"in_reply_to":"b0379450_a6f609a5","updated":"2023-07-19 23:30:16.000000000","message":"The the API will overwrite the type to be primary, my comment was is there something we need to do here for validation. The more I looked into this with the RFC in mind, I think this is a no-op and no action is needed here. Worst case, they will load a bogus primary zone.","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"9d487541c37e1d3f81fd63f11a14fc8db6fb6fd9","unresolved":false,"context_lines":[{"line_number":2728,"context_line":"    @rpc.expected_exceptions()"},{"line_number":2729,"context_line":"    @notification.notify_type(\u0027dns.zone_import.create\u0027)"},{"line_number":2730,"context_line":"    def create_zone_import(self, context, request_body):"},{"line_number":2731,"context_line":"        if policy.enforce_new_defaults():"},{"line_number":2732,"context_line":"            target \u003d {constants.RBAC_PROJECT_ID: context.project_id}"},{"line_number":2733,"context_line":"        else:"},{"line_number":2734,"context_line":"            target \u003d {\u0027tenant_id\u0027: context.project_id}"}],"source_content_type":"text/x-python","patch_set":7,"id":"489ccb86_4938c712","line":2731,"in_reply_to":"b8c1b639_8ce020c1","updated":"2023-07-19 23:31:29.000000000","message":"Done","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"dfdb15ec812c405310fba32a9894bab4df50c46a","unresolved":true,"context_lines":[{"line_number":2728,"context_line":"    @rpc.expected_exceptions()"},{"line_number":2729,"context_line":"    @notification.notify_type(\u0027dns.zone_import.create\u0027)"},{"line_number":2730,"context_line":"    def create_zone_import(self, context, request_body):"},{"line_number":2731,"context_line":"        if policy.enforce_new_defaults():"},{"line_number":2732,"context_line":"            target \u003d {constants.RBAC_PROJECT_ID: context.project_id}"},{"line_number":2733,"context_line":"        else:"},{"line_number":2734,"context_line":"            target \u003d {\u0027tenant_id\u0027: context.project_id}"}],"source_content_type":"text/x-python","patch_set":7,"id":"b0379450_a6f609a5","line":2731,"in_reply_to":"c1e4a053_b979dd85","updated":"2023-07-19 15:09:12.000000000","message":"How would someone be able to import a catalog zone, i. e. type\u003d\"CATALOG\"?","commit_id":"07b50f9d4c4a7d3df2c7513f71e67b8692b24f4b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":3066,"context_line":"        except exceptions.ZoneNotFound:"},{"line_number":3067,"context_line":"            pass"},{"line_number":3068,"context_line":""},{"line_number":3069,"context_line":"    def _enforce_catalog_zone_policy(self, context, zone):"},{"line_number":3070,"context_line":"        # Forbid for HTTP API, but allow for designate-manage"},{"line_number":3071,"context_line":"        if zone.type \u003d\u003d \u0027CATALOG\u0027 and context.to_dict()[\u0027user\u0027] is not None:"},{"line_number":3072,"context_line":"            raise exceptions.Forbidden("}],"source_content_type":"text/x-python","patch_set":8,"id":"08417f64_7db83eb6","line":3069,"updated":"2023-07-21 22:09:47.000000000","message":"This method is missing a unit test","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":3066,"context_line":"        except exceptions.ZoneNotFound:"},{"line_number":3067,"context_line":"            pass"},{"line_number":3068,"context_line":""},{"line_number":3069,"context_line":"    def _enforce_catalog_zone_policy(self, context, zone):"},{"line_number":3070,"context_line":"        # Forbid for HTTP API, but allow for designate-manage"},{"line_number":3071,"context_line":"        if zone.type \u003d\u003d \u0027CATALOG\u0027 and context.to_dict()[\u0027user\u0027] is not None:"},{"line_number":3072,"context_line":"            raise exceptions.Forbidden("}],"source_content_type":"text/x-python","patch_set":8,"id":"39db35d5_de284757","line":3069,"in_reply_to":"08417f64_7db83eb6","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8da46e6d418b8ef7ced600e9ba023be8004cffce","unresolved":true,"context_lines":[{"line_number":3068,"context_line":""},{"line_number":3069,"context_line":"    def _enforce_catalog_zone_policy(self, context, zone):"},{"line_number":3070,"context_line":"        # Forbid for HTTP API, but allow for designate-manage"},{"line_number":3071,"context_line":"        if zone.type \u003d\u003d \u0027CATALOG\u0027 and context.to_dict()[\u0027user\u0027] is not None:"},{"line_number":3072,"context_line":"            raise exceptions.Forbidden("},{"line_number":3073,"context_line":"                \u0027This operation is not allowed for catalog zones.\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"4339692e_15233ce5","line":3071,"updated":"2023-07-19 23:30:16.000000000","message":"This is not a good check. We should check the following in the context to bypass this check:\nrequest_id \u003d\u003d \u0027designate-manage\u0027\nis_admin \u003d True\n\u0027admin\u0027 is in roles","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":3068,"context_line":""},{"line_number":3069,"context_line":"    def _enforce_catalog_zone_policy(self, context, zone):"},{"line_number":3070,"context_line":"        # Forbid for HTTP API, but allow for designate-manage"},{"line_number":3071,"context_line":"        if zone.type \u003d\u003d \u0027CATALOG\u0027 and context.to_dict()[\u0027user\u0027] is not None:"},{"line_number":3072,"context_line":"            raise exceptions.Forbidden("},{"line_number":3073,"context_line":"                \u0027This operation is not allowed for catalog zones.\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9dc03ab8_84358399","line":3071,"in_reply_to":"4339692e_15233ce5","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"78b2640fba9019f0393991b4b23e7710fcf8e269","unresolved":true,"context_lines":[{"line_number":3065,"context_line":""},{"line_number":3066,"context_line":"        try:"},{"line_number":3067,"context_line":"            catalog_zone \u003d self.storage.get_catalog_zone(context, pool)"},{"line_number":3068,"context_line":"            self.increment_zone_serial(context, catalog_zone)"},{"line_number":3069,"context_line":"        except exceptions.ZoneNotFound:"},{"line_number":3070,"context_line":"            pass"},{"line_number":3071,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"735190d8_cb8c4f9c","line":3068,"updated":"2023-11-15 12:40:15.000000000","message":"Why do we need this here? This would negatively impact performance and we may need to bring back locks around certain calls.","commit_id":"9717f1503956ef422da758493019de5557ec5657"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"dc50ee057f25a067dc9e6f61a44eff5ee93115cf","unresolved":true,"context_lines":[{"line_number":3065,"context_line":""},{"line_number":3066,"context_line":"        try:"},{"line_number":3067,"context_line":"            catalog_zone \u003d self.storage.get_catalog_zone(context, pool)"},{"line_number":3068,"context_line":"            self.increment_zone_serial(context, catalog_zone)"},{"line_number":3069,"context_line":"        except exceptions.ZoneNotFound:"},{"line_number":3070,"context_line":"            pass"},{"line_number":3071,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"35a96190_dd45896b","line":3068,"in_reply_to":"0d03170d_cae6a37f","updated":"2023-11-15 16:33:57.000000000","message":"Ah, you were faster with your message :)\n\nThen I will gladly adapt to using batched updates if that avoids the locking issue you mentioned (not using it was unintended either way).","commit_id":"9717f1503956ef422da758493019de5557ec5657"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"89eac201eb521a54bf6a7dbb98d84c65a074625d","unresolved":true,"context_lines":[{"line_number":3065,"context_line":""},{"line_number":3066,"context_line":"        try:"},{"line_number":3067,"context_line":"            catalog_zone \u003d self.storage.get_catalog_zone(context, pool)"},{"line_number":3068,"context_line":"            self.increment_zone_serial(context, catalog_zone)"},{"line_number":3069,"context_line":"        except exceptions.ZoneNotFound:"},{"line_number":3070,"context_line":"            pass"},{"line_number":3071,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"a4f004f4_c800cf47","line":3068,"in_reply_to":"1729e6bf_0fcf2dc6","updated":"2023-11-15 16:22:36.000000000","message":"Basically this code path marks the zone to have its serial incremented\nhttps://github.com/openstack/designate/blob/master/designate/central/service.py#L1013\n\nThat will then call increment_zone_serial in the next batch update performed by the producer.\nhttps://github.com/openstack/designate/blob/master/designate/producer/tasks.py#L302","commit_id":"9717f1503956ef422da758493019de5557ec5657"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"361924bb2240b4bada0abd49a6ea200318761e6d","unresolved":true,"context_lines":[{"line_number":3065,"context_line":""},{"line_number":3066,"context_line":"        try:"},{"line_number":3067,"context_line":"            catalog_zone \u003d self.storage.get_catalog_zone(context, pool)"},{"line_number":3068,"context_line":"            self.increment_zone_serial(context, catalog_zone)"},{"line_number":3069,"context_line":"        except exceptions.ZoneNotFound:"},{"line_number":3070,"context_line":"            pass"},{"line_number":3071,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"0d03170d_cae6a37f","line":3068,"in_reply_to":"1729e6bf_0fcf2dc6","updated":"2023-11-15 16:23:06.000000000","message":"I was not fully aware that increment_zone_serial() does not schedule batched updates through the producer. From a quick glimpse, it seems _update_zone_in_storage() with increment_serial\u003dTrue simply needs to be called instead, right?\n\nWould this also solve the locking issue? If not, could you explain why?","commit_id":"9717f1503956ef422da758493019de5557ec5657"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"1fa534e751c4f0e540b3d177e1cdc96ef8b3b5e3","unresolved":true,"context_lines":[{"line_number":3065,"context_line":""},{"line_number":3066,"context_line":"        try:"},{"line_number":3067,"context_line":"            catalog_zone \u003d self.storage.get_catalog_zone(context, pool)"},{"line_number":3068,"context_line":"            self.increment_zone_serial(context, catalog_zone)"},{"line_number":3069,"context_line":"        except exceptions.ZoneNotFound:"},{"line_number":3070,"context_line":"            pass"},{"line_number":3071,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"1729e6bf_0fcf2dc6","line":3068,"in_reply_to":"1f3335ee_917a7c19","updated":"2023-11-15 15:47:33.000000000","message":"btw why does batched incremental updates not work here?","commit_id":"9717f1503956ef422da758493019de5557ec5657"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"1e1f85977349f7d97749ab93657162c158fae28e","unresolved":false,"context_lines":[{"line_number":3065,"context_line":""},{"line_number":3066,"context_line":"        try:"},{"line_number":3067,"context_line":"            catalog_zone \u003d self.storage.get_catalog_zone(context, pool)"},{"line_number":3068,"context_line":"            self.increment_zone_serial(context, catalog_zone)"},{"line_number":3069,"context_line":"        except exceptions.ZoneNotFound:"},{"line_number":3070,"context_line":"            pass"},{"line_number":3071,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"358d1128_795f037d","line":3068,"in_reply_to":"35a96190_dd45896b","updated":"2023-11-20 15:27:39.000000000","message":"Implemented, marking as Done","commit_id":"9717f1503956ef422da758493019de5557ec5657"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"61d38fe289e4a6ad754e87beb3256d0c9f78158f","unresolved":true,"context_lines":[{"line_number":3065,"context_line":""},{"line_number":3066,"context_line":"        try:"},{"line_number":3067,"context_line":"            catalog_zone \u003d self.storage.get_catalog_zone(context, pool)"},{"line_number":3068,"context_line":"            self.increment_zone_serial(context, catalog_zone)"},{"line_number":3069,"context_line":"        except exceptions.ZoneNotFound:"},{"line_number":3070,"context_line":"            pass"},{"line_number":3071,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"d356bd1f_6e5a5af0","line":3068,"in_reply_to":"735190d8_cb8c4f9c","updated":"2023-11-15 15:23:31.000000000","message":"When a zone is created/updated/deleted, we need to check whether the zone belongs to a pool with a CatZ. If this is the case, the CatZ\u0027s serial needs to be incremented in order for the secondaries to pick up the zone modification once the NOTIFY has been sent.","commit_id":"9717f1503956ef422da758493019de5557ec5657"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"167b9b129d11b64091d09aec9c59f1a75c9b89f5","unresolved":true,"context_lines":[{"line_number":3065,"context_line":""},{"line_number":3066,"context_line":"        try:"},{"line_number":3067,"context_line":"            catalog_zone \u003d self.storage.get_catalog_zone(context, pool)"},{"line_number":3068,"context_line":"            self.increment_zone_serial(context, catalog_zone)"},{"line_number":3069,"context_line":"        except exceptions.ZoneNotFound:"},{"line_number":3070,"context_line":"            pass"},{"line_number":3071,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5c77ef7c_2997b9cf","line":3068,"in_reply_to":"a4f004f4_c800cf47","updated":"2023-11-15 16:26:59.000000000","message":"One final detail I am only worried about update_zone as that is called for every record and calling increment_zone_serial is not safe there without a distributed lock.\n\nThe current implementation avoids that by batching all increment serial calls.","commit_id":"9717f1503956ef422da758493019de5557ec5657"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"414e992700d8d3ca86c3e566a6ed011ac193bdbc","unresolved":true,"context_lines":[{"line_number":3065,"context_line":""},{"line_number":3066,"context_line":"        try:"},{"line_number":3067,"context_line":"            catalog_zone \u003d self.storage.get_catalog_zone(context, pool)"},{"line_number":3068,"context_line":"            self.increment_zone_serial(context, catalog_zone)"},{"line_number":3069,"context_line":"        except exceptions.ZoneNotFound:"},{"line_number":3070,"context_line":"            pass"},{"line_number":3071,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"1f3335ee_917a7c19","line":3068,"in_reply_to":"d356bd1f_6e5a5af0","updated":"2023-11-15 15:43:29.000000000","message":"I don\u0027t think that is a viable option here. We would need to bring back a lot of distributed locking which I would not support.","commit_id":"9717f1503956ef422da758493019de5557ec5657"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"4f6ea4e744c54b3aabe96a998c5a7e7a7038ade4","unresolved":true,"context_lines":[{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def _update_soa(self, context, zone):"},{"line_number":386,"context_line":"        # NOTE: We should not be updating SOA records when a zone is SECONDARY."},{"line_number":387,"context_line":"        if zone.type !\u003d \u0027PRIMARY\u0027:"},{"line_number":388,"context_line":"            return"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        # Get the pool for it\u0027s list of ns_records"}],"source_content_type":"text/x-python","patch_set":17,"id":"a5240c4b_c0c5ceda","side":"PARENT","line":387,"updated":"2023-11-15 23:04:31.000000000","message":"We should change these to constants.","commit_id":"4e185d4e266299ce22376024977cd9471dcaa0ed"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"158710eaaf74201a9fbdeeb4fd522be381d87053","unresolved":false,"context_lines":[{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def _update_soa(self, context, zone):"},{"line_number":386,"context_line":"        # NOTE: We should not be updating SOA records when a zone is SECONDARY."},{"line_number":387,"context_line":"        if zone.type !\u003d \u0027PRIMARY\u0027:"},{"line_number":388,"context_line":"            return"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        # Get the pool for it\u0027s list of ns_records"}],"source_content_type":"text/x-python","patch_set":17,"id":"9e14311e_24d92222","side":"PARENT","line":387,"in_reply_to":"a5240c4b_c0c5ceda","updated":"2023-11-16 13:00:36.000000000","message":"Done","commit_id":"4e185d4e266299ce22376024977cd9471dcaa0ed"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"4f6ea4e744c54b3aabe96a998c5a7e7a7038ade4","unresolved":true,"context_lines":[{"line_number":822,"context_line":""},{"line_number":823,"context_line":"        zone \u003d self._create_zone_in_storage(context, zone)"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"        if zone.type !\u003d \"CATALOG\":"},{"line_number":826,"context_line":"            self.worker_api.create_zone(context, zone)"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"        if zone.type \u003d\u003d constants.ZONE_SECONDARY:"}],"source_content_type":"text/x-python","patch_set":17,"id":"b08c7212_fef291a7","line":825,"updated":"2023-11-15 23:04:31.000000000","message":"We should use constants here.","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"158710eaaf74201a9fbdeeb4fd522be381d87053","unresolved":false,"context_lines":[{"line_number":822,"context_line":""},{"line_number":823,"context_line":"        zone \u003d self._create_zone_in_storage(context, zone)"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"        if zone.type !\u003d \"CATALOG\":"},{"line_number":826,"context_line":"            self.worker_api.create_zone(context, zone)"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"        if zone.type \u003d\u003d constants.ZONE_SECONDARY:"}],"source_content_type":"text/x-python","patch_set":17,"id":"b28feaa0_e92ee7fa","line":825,"in_reply_to":"b08c7212_fef291a7","updated":"2023-11-16 13:00:36.000000000","message":"Done","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"4f6ea4e744c54b3aabe96a998c5a7e7a7038ade4","unresolved":true,"context_lines":[{"line_number":1562,"context_line":"    @rpc.expected_exceptions()"},{"line_number":1563,"context_line":"    def create_managed_records(self, context, zone_id, records_values,"},{"line_number":1564,"context_line":"                               recordset_values):"},{"line_number":1565,"context_line":"        zone \u003d self.storage.get_zone(context, zone_id)"},{"line_number":1566,"context_line":"        self._enforce_catalog_zone_policy(context, zone)"},{"line_number":1567,"context_line":""},{"line_number":1568,"context_line":"        return self._create_or_update_managed_recordset("}],"source_content_type":"text/x-python","patch_set":17,"id":"54098f39_1685f446","line":1565,"updated":"2023-11-15 23:04:31.000000000","message":"I don\u0027t think we need this here. This is not an RPC call exposed to an API. This is an internal only call coming from designate-sink.","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"158710eaaf74201a9fbdeeb4fd522be381d87053","unresolved":false,"context_lines":[{"line_number":1562,"context_line":"    @rpc.expected_exceptions()"},{"line_number":1563,"context_line":"    def create_managed_records(self, context, zone_id, records_values,"},{"line_number":1564,"context_line":"                               recordset_values):"},{"line_number":1565,"context_line":"        zone \u003d self.storage.get_zone(context, zone_id)"},{"line_number":1566,"context_line":"        self._enforce_catalog_zone_policy(context, zone)"},{"line_number":1567,"context_line":""},{"line_number":1568,"context_line":"        return self._create_or_update_managed_recordset("}],"source_content_type":"text/x-python","patch_set":17,"id":"65fee98e_afd1424c","line":1565,"in_reply_to":"54098f39_1685f446","updated":"2023-11-16 13:00:36.000000000","message":"Done","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"abbc782f2bd00419e25f37879c1ee68e7be900a3","unresolved":true,"context_lines":[{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"        zone \u003d self.storage.update_zone(context, zone)"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"        self._ensure_catalog_zone_serial_increment(context, zone)"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        return zone"},{"line_number":1031,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"d36d7b35_5f824fcc","line":1028,"updated":"2024-01-21 20:11:37.000000000","message":"Do we need to update the catalog zone when just updating a zone? Is that in case something like TTL or SOA changes?","commit_id":"978049fa158f1d844edf69e4487d20f4c3e4bef5"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"33adbb5db2a9639525db67bb20b8a526834f1fca","unresolved":false,"context_lines":[{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"        zone \u003d self.storage.update_zone(context, zone)"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"        self._ensure_catalog_zone_serial_increment(context, zone)"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        return zone"},{"line_number":1031,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"edaa5642_c81c9470","line":1028,"in_reply_to":"a521c969_843ca040","updated":"2024-01-22 14:25:17.000000000","message":"Done (also fixed another test issue I found while removing the code)","commit_id":"978049fa158f1d844edf69e4487d20f4c3e4bef5"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"970fa83df0f73e3041cf84aae1ae6df4ac52df37","unresolved":true,"context_lines":[{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"        zone \u003d self.storage.update_zone(context, zone)"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"        self._ensure_catalog_zone_serial_increment(context, zone)"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        return zone"},{"line_number":1031,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"c70b488b_11d9aeb7","line":1028,"in_reply_to":"c4df043f_1ca22d6e","updated":"2024-01-22 11:17:58.000000000","message":"If that is the case lets remove the increment from zone update.","commit_id":"978049fa158f1d844edf69e4487d20f4c3e4bef5"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e5ce65c49cfac50aec4bd77bf7d955c060d33f3d","unresolved":true,"context_lines":[{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"        zone \u003d self.storage.update_zone(context, zone)"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"        self._ensure_catalog_zone_serial_increment(context, zone)"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        return zone"},{"line_number":1031,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"a521c969_843ca040","line":1028,"in_reply_to":"c70b488b_11d9aeb7","updated":"2024-01-22 13:47:32.000000000","message":"Right, this is not required. I will remove the affected code.","commit_id":"978049fa158f1d844edf69e4487d20f4c3e4bef5"},{"author":{"_account_id":32755,"name":"Christian Rohmann","email":"christian.rohmann@inovex.de","username":"frittentheke"},"change_message_id":"b1d27d2a10e298e8642eb5d07a73ae8157f3c034","unresolved":false,"context_lines":[{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"        zone \u003d self.storage.update_zone(context, zone)"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"        self._ensure_catalog_zone_serial_increment(context, zone)"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        return zone"},{"line_number":1031,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"c4df043f_1ca22d6e","line":1028,"in_reply_to":"d36d7b35_5f824fcc","updated":"2024-01-22 09:22:32.000000000","message":"No. Only if a zone is added or removed the catalog (zone) is updated the serial incremented. The contents (records) of each individual zone are transferred as before, so via AXFR / IXFR (if supported), potentially triggered by a NOTIFY.","commit_id":"978049fa158f1d844edf69e4487d20f4c3e4bef5"}],"designate/common/constants.py":[{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"4f6ea4e744c54b3aabe96a998c5a7e7a7038ade4","unresolved":true,"context_lines":[{"line_number":57,"context_line":"# Zone constants"},{"line_number":58,"context_line":"ZONE_PRIMARY \u003d \u0027PRIMARY\u0027"},{"line_number":59,"context_line":"ZONE_SECONDARY \u003d \u0027SECONDARY\u0027"},{"line_number":60,"context_line":"ZONE_TYPES \u003d [ZONE_PRIMARY, ZONE_SECONDARY]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"# Record regexes"},{"line_number":63,"context_line":"RE_HOSTNAME \u003d re.compile(r\u0027^(?!.{255,})(?:(?:^\\*|(?!\\-)[A-Za-z0-9_\\-]{1,63})(?\u003c!\\-)\\.)+\\Z\u0027)  # noqa"}],"source_content_type":"text/x-python","patch_set":17,"id":"9d0643e5_9a50f26d","line":60,"updated":"2023-11-15 23:04:31.000000000","message":"We should add the new ZONE type as a constant here and use it for all our changes.","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"158710eaaf74201a9fbdeeb4fd522be381d87053","unresolved":false,"context_lines":[{"line_number":57,"context_line":"# Zone constants"},{"line_number":58,"context_line":"ZONE_PRIMARY \u003d \u0027PRIMARY\u0027"},{"line_number":59,"context_line":"ZONE_SECONDARY \u003d \u0027SECONDARY\u0027"},{"line_number":60,"context_line":"ZONE_TYPES \u003d [ZONE_PRIMARY, ZONE_SECONDARY]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"# Record regexes"},{"line_number":63,"context_line":"RE_HOSTNAME \u003d re.compile(r\u0027^(?!.{255,})(?:(?:^\\*|(?!\\-)[A-Za-z0-9_\\-]{1,63})(?\u003c!\\-)\\.)+\\Z\u0027)  # noqa"}],"source_content_type":"text/x-python","patch_set":17,"id":"23b1dd49_0e8a8dc0","line":60,"in_reply_to":"9d0643e5_9a50f26d","updated":"2023-11-16 13:00:36.000000000","message":"Done","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"}],"designate/mdns/handler.py":[{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"fdc3763caaa15acecf1397ad61d2d83396fe82ef","unresolved":true,"context_lines":[{"line_number":248,"context_line":"            records \u003d self.storage.get_catalog_zone_records("},{"line_number":249,"context_line":"                context, catalog_zone_pool"},{"line_number":250,"context_line":"            )"},{"line_number":251,"context_line":"            LOG.debug(f\"Catalog zone records :: {records}\")"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        # Handle multi message response with tsig"},{"line_number":254,"context_line":"        multi_messages \u003d False"}],"source_content_type":"text/x-python","patch_set":5,"id":"4e8e7744_763af425","line":251,"updated":"2023-07-18 09:54:13.000000000","message":"This should be changed to be lazy loaded, especially important when writing debug log lines.\n\u003e LOG.debug(\u0027Catalog zone records :: %s\u0027, records)","commit_id":"cfefee91549a1214cd2d0c6a72a247809d86115a"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"bb5a71dfe5377fc325ed1fdc3e3a799f9cbe4dfe","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            records \u003d self.storage.get_catalog_zone_records("},{"line_number":249,"context_line":"                context, catalog_zone_pool"},{"line_number":250,"context_line":"            )"},{"line_number":251,"context_line":"            LOG.debug(f\"Catalog zone records :: {records}\")"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        # Handle multi message response with tsig"},{"line_number":254,"context_line":"        multi_messages \u003d False"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ad616d7_f0e6db46","line":251,"in_reply_to":"4e8e7744_763af425","updated":"2023-07-18 15:12:30.000000000","message":"Ack","commit_id":"cfefee91549a1214cd2d0c6a72a247809d86115a"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":239,"context_line":"            # Place the SOA RRSet at the front and end of the RRSet list"},{"line_number":240,"context_line":"            records.insert(0, soa_records[0])"},{"line_number":241,"context_line":"            records.append(soa_records[0])"},{"line_number":242,"context_line":"        else:"},{"line_number":243,"context_line":"            # TODO(jhartkopf): Do not forget to remove debug logging"},{"line_number":244,"context_line":"            LOG.debug(\"Doing AXFR for catalog zone\")"},{"line_number":245,"context_line":"            catalog_zone_pool \u003d self.storage.find_pool("}],"source_content_type":"text/x-python","patch_set":8,"id":"720d79a4_f9508b5d","line":242,"updated":"2023-07-21 22:09:47.000000000","message":"This branch is missing unit test coverage","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            # Place the SOA RRSet at the front and end of the RRSet list"},{"line_number":240,"context_line":"            records.insert(0, soa_records[0])"},{"line_number":241,"context_line":"            records.append(soa_records[0])"},{"line_number":242,"context_line":"        else:"},{"line_number":243,"context_line":"            # TODO(jhartkopf): Do not forget to remove debug logging"},{"line_number":244,"context_line":"            LOG.debug(\"Doing AXFR for catalog zone\")"},{"line_number":245,"context_line":"            catalog_zone_pool \u003d self.storage.find_pool("}],"source_content_type":"text/x-python","patch_set":8,"id":"86ff0038_98229cef","line":242,"in_reply_to":"720d79a4_f9508b5d","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":264,"context_line":"                ttl \u003d int(record[2]) if record[2] is not None else zone.ttl"},{"line_number":265,"context_line":"                rrtype \u003d str(record[1])"},{"line_number":266,"context_line":"                rdata \u003d [str(record[4])]"},{"line_number":267,"context_line":"            else:"},{"line_number":268,"context_line":"                rrname \u003d record.name"},{"line_number":269,"context_line":"                ttl \u003d zone.ttl"},{"line_number":270,"context_line":"                rrtype \u003d record.type"}],"source_content_type":"text/x-python","patch_set":8,"id":"48f14829_37714333","line":267,"updated":"2023-07-21 22:09:47.000000000","message":"This branch is missing unit test coverage","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                ttl \u003d int(record[2]) if record[2] is not None else zone.ttl"},{"line_number":265,"context_line":"                rrtype \u003d str(record[1])"},{"line_number":266,"context_line":"                rdata \u003d [str(record[4])]"},{"line_number":267,"context_line":"            else:"},{"line_number":268,"context_line":"                rrname \u003d record.name"},{"line_number":269,"context_line":"                ttl \u003d zone.ttl"},{"line_number":270,"context_line":"                rrtype \u003d record.type"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f680a50_add5670d","line":267,"in_reply_to":"48f14829_37714333","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"}],"designate/objects/pool.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e3dccb4bd40c99b2a88db701433f56d09e321c8b","unresolved":true,"context_lines":[{"line_number":32,"context_line":"        \u0027targets\u0027: fields.ObjectFields(\u0027PoolTargetList\u0027, nullable\u003dTrue),"},{"line_number":33,"context_line":"        \u0027also_notifies\u0027: fields.ObjectFields(\u0027PoolAlsoNotifyList\u0027,"},{"line_number":34,"context_line":"                                             nullable\u003dTrue),"},{"line_number":35,"context_line":"        \u0027catalog_zone\u0027: fields.ObjectFields(\u0027PoolCatalogZoneList\u0027,"},{"line_number":36,"context_line":"                                            nullable\u003dTrue),"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7902f306_d9ca956d","line":35,"updated":"2023-07-12 18:05:29.000000000","message":"Does this need to be a list object? Is there a use case for more than one catalog zone per pool?","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"bb5a71dfe5377fc325ed1fdc3e3a799f9cbe4dfe","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \u0027targets\u0027: fields.ObjectFields(\u0027PoolTargetList\u0027, nullable\u003dTrue),"},{"line_number":33,"context_line":"        \u0027also_notifies\u0027: fields.ObjectFields(\u0027PoolAlsoNotifyList\u0027,"},{"line_number":34,"context_line":"                                             nullable\u003dTrue),"},{"line_number":35,"context_line":"        \u0027catalog_zone\u0027: fields.ObjectFields(\u0027PoolCatalogZoneList\u0027,"},{"line_number":36,"context_line":"                                            nullable\u003dTrue),"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"6e2d1c03_bae55a87","line":35,"in_reply_to":"7902f306_d9ca956d","updated":"2023-07-18 15:12:30.000000000","message":"Right, this does not have to be a list object as only one catalog zone will be present per pool. Changing this to PoolCatalogZone.","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"}],"designate/objects/pool_catalog_zone.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8da46e6d418b8ef7ced600e9ba023be8004cffce","unresolved":true,"context_lines":[{"line_number":21,"context_line":"                     base.DesignateObject):"},{"line_number":22,"context_line":"    fields \u003d {"},{"line_number":23,"context_line":"        \u0027catalog_zone_fqdn\u0027: fields.DomainField(),"},{"line_number":24,"context_line":"        \u0027catalog_zone_refresh\u0027: fields.IntegerField(),"},{"line_number":25,"context_line":"        \u0027catalog_zone_tsig_key\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":26,"context_line":"        \u0027catalog_zone_tsig_algorithm\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":8,"id":"f9a0c82d_11fb29e1","line":24,"updated":"2023-07-19 23:30:16.000000000","message":"I would add the limits here:\nfields.IntegerFields(nullable\u003dTrue, minimum\u003d0, maximum\u003d2147483647)","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":21,"context_line":"                     base.DesignateObject):"},{"line_number":22,"context_line":"    fields \u003d {"},{"line_number":23,"context_line":"        \u0027catalog_zone_fqdn\u0027: fields.DomainField(),"},{"line_number":24,"context_line":"        \u0027catalog_zone_refresh\u0027: fields.IntegerField(),"},{"line_number":25,"context_line":"        \u0027catalog_zone_tsig_key\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":26,"context_line":"        \u0027catalog_zone_tsig_algorithm\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":8,"id":"9458c132_70a13a8e","line":24,"in_reply_to":"f9a0c82d_11fb29e1","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8da46e6d418b8ef7ced600e9ba023be8004cffce","unresolved":true,"context_lines":[{"line_number":22,"context_line":"    fields \u003d {"},{"line_number":23,"context_line":"        \u0027catalog_zone_fqdn\u0027: fields.DomainField(),"},{"line_number":24,"context_line":"        \u0027catalog_zone_refresh\u0027: fields.IntegerField(),"},{"line_number":25,"context_line":"        \u0027catalog_zone_tsig_key\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":26,"context_line":"        \u0027catalog_zone_tsig_algorithm\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"f18fb03f_9bbf8873","line":25,"updated":"2023-07-19 23:30:16.000000000","message":"This should be validated like regular tsig keys:\nfields.StringFields(nullable\u003dTrue, maxLength\u003d160),\n\nSee: https://github.com/openstack/designate/blob/master/designate/objects/tsigkey.py#L26","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":22,"context_line":"    fields \u003d {"},{"line_number":23,"context_line":"        \u0027catalog_zone_fqdn\u0027: fields.DomainField(),"},{"line_number":24,"context_line":"        \u0027catalog_zone_refresh\u0027: fields.IntegerField(),"},{"line_number":25,"context_line":"        \u0027catalog_zone_tsig_key\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":26,"context_line":"        \u0027catalog_zone_tsig_algorithm\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"f38b7820_dd7e22b5","line":25,"in_reply_to":"f18fb03f_9bbf8873","updated":"2023-07-21 22:09:47.000000000","message":"Actually, this is the actual key isn\u0027t it. so, that validation is probably not right.","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    fields \u003d {"},{"line_number":23,"context_line":"        \u0027catalog_zone_fqdn\u0027: fields.DomainField(),"},{"line_number":24,"context_line":"        \u0027catalog_zone_refresh\u0027: fields.IntegerField(),"},{"line_number":25,"context_line":"        \u0027catalog_zone_tsig_key\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":26,"context_line":"        \u0027catalog_zone_tsig_algorithm\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"de448ba7_c30a3f23","line":25,"in_reply_to":"f38b7820_dd7e22b5","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8da46e6d418b8ef7ced600e9ba023be8004cffce","unresolved":true,"context_lines":[{"line_number":23,"context_line":"        \u0027catalog_zone_fqdn\u0027: fields.DomainField(),"},{"line_number":24,"context_line":"        \u0027catalog_zone_refresh\u0027: fields.IntegerField(),"},{"line_number":25,"context_line":"        \u0027catalog_zone_tsig_key\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":26,"context_line":"        \u0027catalog_zone_tsig_algorithm\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    STRING_KEYS \u003d ["}],"source_content_type":"text/x-python","patch_set":8,"id":"e4c2349e_0404b0d0","line":26,"updated":"2023-07-19 23:30:16.000000000","message":"This should be validated like the main tsig key algorithm here:\nhttps://github.com/openstack/designate/blob/master/designate/objects/tsigkey.py#L27\n\nBonus points if you move the valid algorithms list out to the constants file: https://github.com/openstack/designate/blob/master/designate/common/constants.py","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \u0027catalog_zone_fqdn\u0027: fields.DomainField(),"},{"line_number":24,"context_line":"        \u0027catalog_zone_refresh\u0027: fields.IntegerField(),"},{"line_number":25,"context_line":"        \u0027catalog_zone_tsig_key\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":26,"context_line":"        \u0027catalog_zone_tsig_algorithm\u0027: fields.StringFields(nullable\u003dTrue),"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    STRING_KEYS \u003d ["}],"source_content_type":"text/x-python","patch_set":8,"id":"a8ab1860_10f1558d","line":26,"in_reply_to":"e4c2349e_0404b0d0","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"}],"designate/objects/zone.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e3dccb4bd40c99b2a88db701433f56d09e321c8b","unresolved":true,"context_lines":[{"line_number":67,"context_line":"        \u0027transferred_at\u0027: fields.DateTimeField(nullable\u003dTrue, read_only\u003dFalse),"},{"line_number":68,"context_line":"        \u0027delayed_notify\u0027: fields.BooleanField(nullable\u003dTrue),"},{"line_number":69,"context_line":"        \u0027increment_serial\u0027: fields.BooleanField(nullable\u003dTrue),"},{"line_number":70,"context_line":"        \u0027catalog_zone\u0027: fields.BooleanField(nullable\u003dTrue),"},{"line_number":71,"context_line":"    }"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    STRING_KEYS \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"af8c370d_8a0c91d0","line":70,"updated":"2023-07-12 18:05:29.000000000","message":"Again, I think it might be best to use the \"type\" field above and simply add a \"CATALOG\" option to it.\nI don\u0027t think there is a case where you would have a \"SECONDARY\" of a catalog zone.","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"bb5a71dfe5377fc325ed1fdc3e3a799f9cbe4dfe","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        \u0027transferred_at\u0027: fields.DateTimeField(nullable\u003dTrue, read_only\u003dFalse),"},{"line_number":68,"context_line":"        \u0027delayed_notify\u0027: fields.BooleanField(nullable\u003dTrue),"},{"line_number":69,"context_line":"        \u0027increment_serial\u0027: fields.BooleanField(nullable\u003dTrue),"},{"line_number":70,"context_line":"        \u0027catalog_zone\u0027: fields.BooleanField(nullable\u003dTrue),"},{"line_number":71,"context_line":"    }"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    STRING_KEYS \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"77f1cf79_cf7a1d17","line":70,"in_reply_to":"af8c370d_8a0c91d0","updated":"2023-07-18 15:12:30.000000000","message":"Ack","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"}],"designate/storage/sqlalchemy/__init__.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":1541,"context_line":""},{"line_number":1542,"context_line":"        :param context: RPC Context."},{"line_number":1543,"context_line":"        :param pool_id: The ID of the pool to be deleted"},{"line_number":1544,"context_line":"        \"\"\""},{"line_number":1545,"context_line":"        pool \u003d self._find_pools(context, {\u0027id\u0027: pool_id}, one\u003dTrue)"},{"line_number":1546,"context_line":""},{"line_number":1547,"context_line":"        return self._delete(context, tables.pools, pool,"}],"source_content_type":"text/x-python","patch_set":8,"id":"a23a32ae_83086b47","line":1544,"updated":"2023-07-21 22:09:47.000000000","message":"We need to remove the catalog zone and tsig key when the pool is deleted.","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":1541,"context_line":""},{"line_number":1542,"context_line":"        :param context: RPC Context."},{"line_number":1543,"context_line":"        :param pool_id: The ID of the pool to be deleted"},{"line_number":1544,"context_line":"        \"\"\""},{"line_number":1545,"context_line":"        pool \u003d self._find_pools(context, {\u0027id\u0027: pool_id}, one\u003dTrue)"},{"line_number":1546,"context_line":""},{"line_number":1547,"context_line":"        return self._delete(context, tables.pools, pool,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3139e6e8_adcea881","line":1544,"in_reply_to":"a23a32ae_83086b47","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":2449,"context_line":"    def _create_catalog_zone(self, pool):"},{"line_number":2450,"context_line":"        recordsets \u003d objects.RecordSetList()"},{"line_number":2451,"context_line":"        ns_record \u003d objects.RecordList()"},{"line_number":2452,"context_line":"        ns_record.append(objects.Record(data\u003d\u0027invalid.\u0027))"},{"line_number":2453,"context_line":"        recordsets.append("},{"line_number":2454,"context_line":"            objects.RecordSet("},{"line_number":2455,"context_line":"                name\u003dpool.catalog_zone.catalog_zone_fqdn,"}],"source_content_type":"text/x-python","patch_set":8,"id":"412432e5_cb78613e","line":2452,"updated":"2023-07-21 22:09:47.000000000","message":"Can we add comments here that mention why these recordsets are here?\n\nExample:\n\\# Zones must have at least one NS record, per RFC 9432 using NSDNAME \u0027invalid.\u0027","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":2449,"context_line":"    def _create_catalog_zone(self, pool):"},{"line_number":2450,"context_line":"        recordsets \u003d objects.RecordSetList()"},{"line_number":2451,"context_line":"        ns_record \u003d objects.RecordList()"},{"line_number":2452,"context_line":"        ns_record.append(objects.Record(data\u003d\u0027invalid.\u0027))"},{"line_number":2453,"context_line":"        recordsets.append("},{"line_number":2454,"context_line":"            objects.RecordSet("},{"line_number":2455,"context_line":"                name\u003dpool.catalog_zone.catalog_zone_fqdn,"}],"source_content_type":"text/x-python","patch_set":8,"id":"89718af8_586d0cec","line":2452,"in_reply_to":"412432e5_cb78613e","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":2459,"context_line":"        )"},{"line_number":2460,"context_line":""},{"line_number":2461,"context_line":"        txt_record \u003d objects.RecordList()"},{"line_number":2462,"context_line":"        txt_record.append(objects.Record(data\u003d\u00272\u0027))"},{"line_number":2463,"context_line":"        recordsets.append("},{"line_number":2464,"context_line":"            objects.RecordSet("},{"line_number":2465,"context_line":"                name\u003df\u0027version.{pool.catalog_zone.catalog_zone_fqdn}\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"2dd331f2_88b6719b","line":2462,"updated":"2023-07-21 22:09:47.000000000","message":"Same here.\n\nExample:\n\\# add the schema version property record, currently \u00272\u0027","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":2459,"context_line":"        )"},{"line_number":2460,"context_line":""},{"line_number":2461,"context_line":"        txt_record \u003d objects.RecordList()"},{"line_number":2462,"context_line":"        txt_record.append(objects.Record(data\u003d\u00272\u0027))"},{"line_number":2463,"context_line":"        recordsets.append("},{"line_number":2464,"context_line":"            objects.RecordSet("},{"line_number":2465,"context_line":"                name\u003df\u0027version.{pool.catalog_zone.catalog_zone_fqdn}\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"cd44926c_ba7f1b64","line":2462,"in_reply_to":"2dd331f2_88b6719b","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":2469,"context_line":"        )"},{"line_number":2470,"context_line":"        catalog_zone \u003d objects.Zone("},{"line_number":2471,"context_line":"            name\u003dpool.catalog_zone.catalog_zone_fqdn,"},{"line_number":2472,"context_line":"            email\u003d\u0027email@example.com\u0027,  # TODO(jhartkopf):"},{"line_number":2473,"context_line":"                                        #  Which mail to use here?"},{"line_number":2474,"context_line":"            refresh\u003dpool.catalog_zone.catalog_zone_refresh,"},{"line_number":2475,"context_line":"            serial\u003d1,"}],"source_content_type":"text/x-python","patch_set":8,"id":"b3d0ffae_ee95ca71","line":2472,"updated":"2023-07-21 22:09:47.000000000","message":"Please use the managed resource email from the configuration file:\nhttps://github.com/openstack/designate/blob/master/designate/conf/central.py#L38","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":2469,"context_line":"        )"},{"line_number":2470,"context_line":"        catalog_zone \u003d objects.Zone("},{"line_number":2471,"context_line":"            name\u003dpool.catalog_zone.catalog_zone_fqdn,"},{"line_number":2472,"context_line":"            email\u003d\u0027email@example.com\u0027,  # TODO(jhartkopf):"},{"line_number":2473,"context_line":"                                        #  Which mail to use here?"},{"line_number":2474,"context_line":"            refresh\u003dpool.catalog_zone.catalog_zone_refresh,"},{"line_number":2475,"context_line":"            serial\u003d1,"}],"source_content_type":"text/x-python","patch_set":8,"id":"4ac9e54f_599b3956","line":2472,"in_reply_to":"b3d0ffae_ee95ca71","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":2497,"context_line":"            catalog_zone \u003d self._create_catalog_zone(pool)"},{"line_number":2498,"context_line":"            catalog_zone \u003d self.create_zone(context, catalog_zone)"},{"line_number":2499,"context_line":""},{"line_number":2500,"context_line":"            # update_zone() will ensure the record sets for us"},{"line_number":2501,"context_line":"            self.update_zone(context, catalog_zone)"},{"line_number":2502,"context_line":""},{"line_number":2503,"context_line":"        self._ensure_catalog_zone_consistent(context, pool)"}],"source_content_type":"text/x-python","patch_set":8,"id":"143731fd_d93e5d7a","line":2500,"updated":"2023-07-21 22:09:47.000000000","message":"I don\u0027t understand why we need to call update_zone() right after create_zone(). Can you expand the comment to give more of a reason?\n\nThe recordsets are dynamically created in the mdns handler, so I\u0027m not sure why this is needed.","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":2497,"context_line":"            catalog_zone \u003d self._create_catalog_zone(pool)"},{"line_number":2498,"context_line":"            catalog_zone \u003d self.create_zone(context, catalog_zone)"},{"line_number":2499,"context_line":""},{"line_number":2500,"context_line":"            # update_zone() will ensure the record sets for us"},{"line_number":2501,"context_line":"            self.update_zone(context, catalog_zone)"},{"line_number":2502,"context_line":""},{"line_number":2503,"context_line":"        self._ensure_catalog_zone_consistent(context, pool)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1261c637_d71d9bcb","line":2500,"in_reply_to":"143731fd_d93e5d7a","updated":"2023-08-08 14:37:29.000000000","message":"Previously, this was there because create_zone() seems to not create the zone\u0027s records in the DB, but update_zone() will.\n\nBut since the code is now refactored so that only the SOA record is saved to the DB, we do not need this anymore. NS and TXT should probably not be required in the DB and are now simply rendered, just like the member zone records.","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":2581,"context_line":"                tsigkey.secret !\u003d tsig_key or"},{"line_number":2582,"context_line":"                tsigkey.algorithm !\u003d tsig_algorithm"},{"line_number":2583,"context_line":"            ):"},{"line_number":2584,"context_line":"                tsigkey.secret \u003d tsig_key"},{"line_number":2585,"context_line":"                tsigkey.algorithm \u003d tsig_algorithm"},{"line_number":2586,"context_line":"                self.update_tsigkey(context, tsigkey)"},{"line_number":2587,"context_line":"        except exceptions.TsigKeyNotFound:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff7a669d_d97b962b","line":2584,"updated":"2023-07-21 22:09:47.000000000","message":"This branch is missing unit test coverage","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":2581,"context_line":"                tsigkey.secret !\u003d tsig_key or"},{"line_number":2582,"context_line":"                tsigkey.algorithm !\u003d tsig_algorithm"},{"line_number":2583,"context_line":"            ):"},{"line_number":2584,"context_line":"                tsigkey.secret \u003d tsig_key"},{"line_number":2585,"context_line":"                tsigkey.algorithm \u003d tsig_algorithm"},{"line_number":2586,"context_line":"                self.update_tsigkey(context, tsigkey)"},{"line_number":2587,"context_line":"        except exceptions.TsigKeyNotFound:"}],"source_content_type":"text/x-python","patch_set":8,"id":"aa751bfd_cefec9f6","line":2584,"in_reply_to":"ff7a669d_d97b962b","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":2586,"context_line":"                self.update_tsigkey(context, tsigkey)"},{"line_number":2587,"context_line":"        except exceptions.TsigKeyNotFound:"},{"line_number":2588,"context_line":"            tsigkey \u003d objects.TsigKey("},{"line_number":2589,"context_line":"                # TODO(jhartkopf): Which name to choose?"},{"line_number":2590,"context_line":"                #  Update name when zone FQDN changes?"},{"line_number":2591,"context_line":"                name\u003dcatalog_zone.name,"},{"line_number":2592,"context_line":"                secret\u003dtsig_key,"}],"source_content_type":"text/x-python","patch_set":8,"id":"8b95ed56_3160938f","line":2589,"updated":"2023-07-21 22:09:47.000000000","message":"I would use the catalog zone fqdn name here.","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":2586,"context_line":"                self.update_tsigkey(context, tsigkey)"},{"line_number":2587,"context_line":"        except exceptions.TsigKeyNotFound:"},{"line_number":2588,"context_line":"            tsigkey \u003d objects.TsigKey("},{"line_number":2589,"context_line":"                # TODO(jhartkopf): Which name to choose?"},{"line_number":2590,"context_line":"                #  Update name when zone FQDN changes?"},{"line_number":2591,"context_line":"                name\u003dcatalog_zone.name,"},{"line_number":2592,"context_line":"                secret\u003dtsig_key,"}],"source_content_type":"text/x-python","patch_set":8,"id":"b3559b42_5384f460","line":2589,"in_reply_to":"8b95ed56_3160938f","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":2587,"context_line":"        except exceptions.TsigKeyNotFound:"},{"line_number":2588,"context_line":"            tsigkey \u003d objects.TsigKey("},{"line_number":2589,"context_line":"                # TODO(jhartkopf): Which name to choose?"},{"line_number":2590,"context_line":"                #  Update name when zone FQDN changes?"},{"line_number":2591,"context_line":"                name\u003dcatalog_zone.name,"},{"line_number":2592,"context_line":"                secret\u003dtsig_key,"},{"line_number":2593,"context_line":"                algorithm\u003dtsig_algorithm,"}],"source_content_type":"text/x-python","patch_set":8,"id":"10adf3c0_6549e195","line":2590,"updated":"2023-07-21 22:09:47.000000000","message":"Yeah, it should update if the catalog zone name changes. But, really isn\u0027t that just a delete/create action?","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":2587,"context_line":"        except exceptions.TsigKeyNotFound:"},{"line_number":2588,"context_line":"            tsigkey \u003d objects.TsigKey("},{"line_number":2589,"context_line":"                # TODO(jhartkopf): Which name to choose?"},{"line_number":2590,"context_line":"                #  Update name when zone FQDN changes?"},{"line_number":2591,"context_line":"                name\u003dcatalog_zone.name,"},{"line_number":2592,"context_line":"                secret\u003dtsig_key,"},{"line_number":2593,"context_line":"                algorithm\u003dtsig_algorithm,"}],"source_content_type":"text/x-python","patch_set":8,"id":"a12eb2e7_c8e5177b","line":2590,"in_reply_to":"10adf3c0_6549e195","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"4f6ea4e744c54b3aabe96a998c5a7e7a7038ade4","unresolved":true,"context_lines":[{"line_number":1409,"context_line":"                    catalog_zone_fqdn\u003dcatalog_zone.name,"},{"line_number":1410,"context_line":"                    catalog_zone_refresh\u003dcatalog_zone.refresh,"},{"line_number":1411,"context_line":"                    catalog_zone_tsig_key\u003dtsigkey.secret"},{"line_number":1412,"context_line":"                    if tsigkey is not None else None,"},{"line_number":1413,"context_line":"                    catalog_zone_tsig_algorithm\u003dtsigkey.algorithm"},{"line_number":1414,"context_line":"                    if tsigkey is not None else None,"},{"line_number":1415,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":17,"id":"bba5fbc4_ef0c15d5","line":1412,"updated":"2023-11-15 23:04:31.000000000","message":"This was a little confusing to read. Probably better to just make these variables instead.\n\u003e secret \u003d tsigkey.secret if tsigkey is not None else None\n\u003e algorithm \u003d tsigkey.algorithm  if tsigkey is not None else None","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"158710eaaf74201a9fbdeeb4fd522be381d87053","unresolved":false,"context_lines":[{"line_number":1409,"context_line":"                    catalog_zone_fqdn\u003dcatalog_zone.name,"},{"line_number":1410,"context_line":"                    catalog_zone_refresh\u003dcatalog_zone.refresh,"},{"line_number":1411,"context_line":"                    catalog_zone_tsig_key\u003dtsigkey.secret"},{"line_number":1412,"context_line":"                    if tsigkey is not None else None,"},{"line_number":1413,"context_line":"                    catalog_zone_tsig_algorithm\u003dtsigkey.algorithm"},{"line_number":1414,"context_line":"                    if tsigkey is not None else None,"},{"line_number":1415,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":17,"id":"4ff9a403_9763fe3b","line":1412,"in_reply_to":"bba5fbc4_ef0c15d5","updated":"2023-11-16 13:00:36.000000000","message":"Done","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"2a8f5afdce5165502f4ed10b44839f4acbb95286","unresolved":true,"context_lines":[{"line_number":2469,"context_line":"    def _create_catalog_zone(self, pool):"},{"line_number":2470,"context_line":"        catalog_zone \u003d objects.Zone("},{"line_number":2471,"context_line":"            name\u003dpool.catalog_zone.catalog_zone_fqdn,"},{"line_number":2472,"context_line":"            email\u003ddesignate.conf.CONF["},{"line_number":2473,"context_line":"                \u0027service:central\u0027].managed_resource_email,"},{"line_number":2474,"context_line":"            refresh\u003dpool.catalog_zone.catalog_zone_refresh,"},{"line_number":2475,"context_line":"            serial\u003d1,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ef50687a_104d8470","line":2472,"updated":"2023-11-17 12:16:35.000000000","message":"This does not follow the general config pattern. Look at e.g. designate/central/service.py for an example.","commit_id":"8a1117b204c2327c93cfda725a8f6110e32c79ab"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"1e1f85977349f7d97749ab93657162c158fae28e","unresolved":false,"context_lines":[{"line_number":2469,"context_line":"    def _create_catalog_zone(self, pool):"},{"line_number":2470,"context_line":"        catalog_zone \u003d objects.Zone("},{"line_number":2471,"context_line":"            name\u003dpool.catalog_zone.catalog_zone_fqdn,"},{"line_number":2472,"context_line":"            email\u003ddesignate.conf.CONF["},{"line_number":2473,"context_line":"                \u0027service:central\u0027].managed_resource_email,"},{"line_number":2474,"context_line":"            refresh\u003dpool.catalog_zone.catalog_zone_refresh,"},{"line_number":2475,"context_line":"            serial\u003d1,"}],"source_content_type":"text/x-python","patch_set":18,"id":"a770fe9f_58d58963","line":2472,"in_reply_to":"ef50687a_104d8470","updated":"2023-11-20 15:27:39.000000000","message":"Done","commit_id":"8a1117b204c2327c93cfda725a8f6110e32c79ab"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"2a8f5afdce5165502f4ed10b44839f4acbb95286","unresolved":true,"context_lines":[{"line_number":2501,"context_line":""},{"line_number":2502,"context_line":"    # Ensures a catalog zone\u0027s data in pools.yaml is consistent with"},{"line_number":2503,"context_line":"    # its values in the database."},{"line_number":2504,"context_line":"    def _ensure_catalog_zone_consistent(self, context, pool):"},{"line_number":2505,"context_line":"        if not pool.obj_attr_is_set(\"catalog_zone\") or not pool.catalog_zone:"},{"line_number":2506,"context_line":"            return"},{"line_number":2507,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"9b9a3852_9309b82d","line":2504,"updated":"2023-11-17 12:16:35.000000000","message":"This code feels very complex and should at the very least be broken up into smaller pieces.","commit_id":"8a1117b204c2327c93cfda725a8f6110e32c79ab"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"1e1f85977349f7d97749ab93657162c158fae28e","unresolved":false,"context_lines":[{"line_number":2501,"context_line":""},{"line_number":2502,"context_line":"    # Ensures a catalog zone\u0027s data in pools.yaml is consistent with"},{"line_number":2503,"context_line":"    # its values in the database."},{"line_number":2504,"context_line":"    def _ensure_catalog_zone_consistent(self, context, pool):"},{"line_number":2505,"context_line":"        if not pool.obj_attr_is_set(\"catalog_zone\") or not pool.catalog_zone:"},{"line_number":2506,"context_line":"            return"},{"line_number":2507,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"4bd51a12_8c99b6cc","line":2504,"in_reply_to":"9b9a3852_9309b82d","updated":"2023-11-20 15:27:39.000000000","message":"Done, split up into multiple methods and added docstrings for each one.","commit_id":"8a1117b204c2327c93cfda725a8f6110e32c79ab"}],"designate/storage/sqlalchemy/alembic/versions/9099de8ae11c_add_catalog_zones.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e3dccb4bd40c99b2a88db701433f56d09e321c8b","unresolved":true,"context_lines":[{"line_number":31,"context_line":"def upgrade() -\u003e None:"},{"line_number":32,"context_line":"    op.add_column("},{"line_number":33,"context_line":"        \u0027zones\u0027,"},{"line_number":34,"context_line":"        sa.Column(\u0027catalog_zone\u0027, sa.Boolean, default\u003dFalse)"},{"line_number":35,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":1,"id":"d24f5152_75480145","line":34,"updated":"2023-07-12 18:05:29.000000000","message":"I think it would be better to use the zone \"type\" column that exists, and add a new type of \"CATALOG\".\n\nThis is what was listed in the spec.\n\nIs there a reason that would not work?","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"bb5a71dfe5377fc325ed1fdc3e3a799f9cbe4dfe","unresolved":false,"context_lines":[{"line_number":31,"context_line":"def upgrade() -\u003e None:"},{"line_number":32,"context_line":"    op.add_column("},{"line_number":33,"context_line":"        \u0027zones\u0027,"},{"line_number":34,"context_line":"        sa.Column(\u0027catalog_zone\u0027, sa.Boolean, default\u003dFalse)"},{"line_number":35,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":1,"id":"f67ced4a_171b1366","line":34,"in_reply_to":"d24f5152_75480145","updated":"2023-07-18 15:12:30.000000000","message":"Ack, changed according to the spec.","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"}],"designate/storage/sqlalchemy/tables.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e3dccb4bd40c99b2a88db701433f56d09e321c8b","unresolved":true,"context_lines":[{"line_number":140,"context_line":"    Column(\u0027reverse_name\u0027, String(255), nullable\u003dFalse),"},{"line_number":141,"context_line":"    Column(\u0027delayed_notify\u0027, Boolean, default\u003dFalse),"},{"line_number":142,"context_line":"    Column(\u0027increment_serial\u0027, Boolean, default\u003dFalse),"},{"line_number":143,"context_line":"    Column(\u0027catalog_zone\u0027, Boolean, default\u003dFalse),"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    UniqueConstraint(\u0027name\u0027, \u0027deleted\u0027, \u0027pool_id\u0027, name\u003d\u0027unique_zone_name\u0027),"},{"line_number":146,"context_line":"    ForeignKeyConstraint([\u0027parent_zone_id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"ecaed011_12d77e87","line":143,"updated":"2023-07-12 18:05:29.000000000","message":"Same here, I think we should use the \"type\" field instead.","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"bb5a71dfe5377fc325ed1fdc3e3a799f9cbe4dfe","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    Column(\u0027reverse_name\u0027, String(255), nullable\u003dFalse),"},{"line_number":141,"context_line":"    Column(\u0027delayed_notify\u0027, Boolean, default\u003dFalse),"},{"line_number":142,"context_line":"    Column(\u0027increment_serial\u0027, Boolean, default\u003dFalse),"},{"line_number":143,"context_line":"    Column(\u0027catalog_zone\u0027, Boolean, default\u003dFalse),"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    UniqueConstraint(\u0027name\u0027, \u0027deleted\u0027, \u0027pool_id\u0027, name\u003d\u0027unique_zone_name\u0027),"},{"line_number":146,"context_line":"    ForeignKeyConstraint([\u0027parent_zone_id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"cdf0781a_fb7373cc","line":143,"in_reply_to":"ecaed011_12d77e87","updated":"2023-07-18 15:12:30.000000000","message":"Ack","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"}],"designate/worker/tasks/zone.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e3dccb4bd40c99b2a88db701433f56d09e321c8b","unresolved":true,"context_lines":[{"line_number":76,"context_line":"                    self.target.backend.update_zone(self.context, self.zone)"},{"line_number":77,"context_line":"                    SendNotify(self.executor, self.zone, self.target)()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"                # Send NOTIFY for catalog zone"},{"line_number":80,"context_line":"                pool \u003d self.storage.find_pool("},{"line_number":81,"context_line":"                    self.context, criterion\u003d{\u0027id\u0027: self.zone.pool_id})"},{"line_number":82,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7fa51c30_ef50782b","line":79,"updated":"2023-07-12 18:05:29.000000000","message":"Is this necessary? It seems like line 69-77 should take care of catalog zones already.","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"bb5a71dfe5377fc325ed1fdc3e3a799f9cbe4dfe","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                    self.target.backend.update_zone(self.context, self.zone)"},{"line_number":77,"context_line":"                    SendNotify(self.executor, self.zone, self.target)()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"                # Send NOTIFY for catalog zone"},{"line_number":80,"context_line":"                pool \u003d self.storage.find_pool("},{"line_number":81,"context_line":"                    self.context, criterion\u003d{\u0027id\u0027: self.zone.pool_id})"},{"line_number":82,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"c4e774ef_9cd35a33","line":79,"in_reply_to":"7fa51c30_ef50782b","updated":"2023-07-18 15:12:30.000000000","message":"A later PS changed this so that this is not sent for catalog zones, i. e. only when a member zone gets updated etc., also send a NOTIFY for the corresponding catalog zone.","commit_id":"41fb6ff3889a151dbb3dbdbf182014997bff342e"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8da46e6d418b8ef7ced600e9ba023be8004cffce","unresolved":true,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        for retry in range(0, self.max_retries):"},{"line_number":68,"context_line":"            try:"},{"line_number":69,"context_line":"                if self.action \u003d\u003d \u0027CREATE\u0027:"},{"line_number":70,"context_line":"                    self.target.backend.create_zone(self.context, self.zone)"},{"line_number":71,"context_line":"                    SendNotify(self.executor, self.zone, self.target)()"},{"line_number":72,"context_line":"                elif self.action \u003d\u003d \u0027DELETE\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"c0eb0287_29a4d97d","line":69,"updated":"2023-07-19 23:30:16.000000000","message":"I think this logic needs to change, as it is here, I think both mechanisms would attempt to create the zone, i.e. BIND9 would still get rndc calls to create the zone.\nWouldn\u0027t we only do the create/delete if there is not a catalog zone configured? Otherwise send the NOTIFY?\nI just worry with will get errors with some backend drivers if it already exists/already deleted.","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":32755,"name":"Christian Rohmann","email":"christian.rohmann@inovex.de","username":"frittentheke"},"change_message_id":"1a825e8f69b53b7c6288bee401c7f3d1d5715f3c","unresolved":true,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        for retry in range(0, self.max_retries):"},{"line_number":68,"context_line":"            try:"},{"line_number":69,"context_line":"                if self.action \u003d\u003d \u0027CREATE\u0027:"},{"line_number":70,"context_line":"                    self.target.backend.create_zone(self.context, self.zone)"},{"line_number":71,"context_line":"                    SendNotify(self.executor, self.zone, self.target)()"},{"line_number":72,"context_line":"                elif self.action \u003d\u003d \u0027DELETE\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f19e831_c200d99e","line":69,"in_reply_to":"0a1ad28f_0cf8d071","updated":"2023-08-16 07:33:04.000000000","message":"\u003e Well, I don\u0027t think we can do no-op as you would still want to send a NOTIFY that the catalog zone serial has updated.\n\u003e If we do a separate drivers, that means you would have two for each backend type (BIND, PDNS, etc.) so that doesn\u0027t seem like a good path either.\n\nWhy would one require two drivers in that case? To me there could be a single generic \"catalog zone client\" driver, kinda like the Fake driver. That driver would not apply any active configuration (via RNDC or other APIs), since secondaries are using the catalog zone mechanism.... or am I not understanding the issue here?","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ca2c7588aee6085984aee68bf22e506f9b200859","unresolved":true,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        for retry in range(0, self.max_retries):"},{"line_number":68,"context_line":"            try:"},{"line_number":69,"context_line":"                if self.action \u003d\u003d \u0027CREATE\u0027:"},{"line_number":70,"context_line":"                    self.target.backend.create_zone(self.context, self.zone)"},{"line_number":71,"context_line":"                    SendNotify(self.executor, self.zone, self.target)()"},{"line_number":72,"context_line":"                elif self.action \u003d\u003d \u0027DELETE\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"8bb5b170_64977a60","line":69,"in_reply_to":"1f19e831_c200d99e","updated":"2023-08-17 20:27:35.000000000","message":"Yeah, I was thinking there were backend specific settings (the options for the backend drivers) that are different between the backends. However the more I look into what those are used for, I think making a single \"catalog-zone\" backend driver makes sense.\nPlease don\u0027t forget to add a plugin document for it with the example pools configuration:\nhttps://docs.openstack.org/designate/latest/admin/backends/index.html","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"6cac4bc98389d7465f4fb43332dbd844fec12cd0","unresolved":true,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        for retry in range(0, self.max_retries):"},{"line_number":68,"context_line":"            try:"},{"line_number":69,"context_line":"                if self.action \u003d\u003d \u0027CREATE\u0027:"},{"line_number":70,"context_line":"                    self.target.backend.create_zone(self.context, self.zone)"},{"line_number":71,"context_line":"                    SendNotify(self.executor, self.zone, self.target)()"},{"line_number":72,"context_line":"                elif self.action \u003d\u003d \u0027DELETE\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"0a1ad28f_0cf8d071","line":69,"in_reply_to":"840090c5_aca847e3","updated":"2023-08-10 20:30:36.000000000","message":"Well, I don\u0027t think we can do no-op as you would still want to send a NOTIFY that the catalog zone serial has updated.\nIf we do a separate drivers, that means you would have two for each backend type (BIND, PDNS, etc.) so that doesn\u0027t seem like a good path either.\n\nI think we should have a conditional here that checks if the pool is catalog zone enabled, and if so, just send the catalog zone NOTIFY, otherwise run this existing code path.","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"08364c2e867504cf91448377d069164d2c4c4230","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        for retry in range(0, self.max_retries):"},{"line_number":68,"context_line":"            try:"},{"line_number":69,"context_line":"                if self.action \u003d\u003d \u0027CREATE\u0027:"},{"line_number":70,"context_line":"                    self.target.backend.create_zone(self.context, self.zone)"},{"line_number":71,"context_line":"                    SendNotify(self.executor, self.zone, self.target)()"},{"line_number":72,"context_line":"                elif self.action \u003d\u003d \u0027DELETE\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"f12674c1_3f0fae0f","line":69,"in_reply_to":"8bb5b170_64977a60","updated":"2023-08-24 14:18:48.000000000","message":"Done, catalog zone backend driver and docs are now added.","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":true,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        for retry in range(0, self.max_retries):"},{"line_number":68,"context_line":"            try:"},{"line_number":69,"context_line":"                if self.action \u003d\u003d \u0027CREATE\u0027:"},{"line_number":70,"context_line":"                    self.target.backend.create_zone(self.context, self.zone)"},{"line_number":71,"context_line":"                    SendNotify(self.executor, self.zone, self.target)()"},{"line_number":72,"context_line":"                elif self.action \u003d\u003d \u0027DELETE\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"840090c5_aca847e3","line":69,"in_reply_to":"c0eb0287_29a4d97d","updated":"2023-08-08 14:37:29.000000000","message":"We also ran into this issue. What do you think of using the fake driver (or a new \"catalog zone driver\") which would simply be a noop for these calls?","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"9cd80ca36105c0f574b3130e41a67d2a3bf1f4e7","unresolved":true,"context_lines":[{"line_number":76,"context_line":"                    self.target.backend.update_zone(self.context, self.zone)"},{"line_number":77,"context_line":"                    SendNotify(self.executor, self.zone, self.target)()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"                if self.zone.type !\u003d \"CATALOG\":"},{"line_number":80,"context_line":"                    # Send NOTIFY for catalog zone"},{"line_number":81,"context_line":"                    pool \u003d self.storage.find_pool("},{"line_number":82,"context_line":"                        self.context, criterion\u003d{\u0027id\u0027: self.zone.pool_id})"}],"source_content_type":"text/x-python","patch_set":8,"id":"2dd999e4_413f4881","line":79,"updated":"2023-08-24 21:25:52.000000000","message":"We should move this over to the catalog backend driver. Otherwise this code runs for drivers that don\u0027t have catalog zones.","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8a08cf6e0d8caffe71cb07c96b28fcd9c8d4004b","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                    try:"},{"line_number":84,"context_line":"                        catalog_zone \u003d self.storage.get_catalog_zone("},{"line_number":85,"context_line":"                            self.context, pool)"},{"line_number":86,"context_line":"                        SendNotify(self.executor, catalog_zone, self.target)()"},{"line_number":87,"context_line":"                    except exceptions.ZoneNotFound:"},{"line_number":88,"context_line":"                        pass"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"d867d8e1_dd237f14","line":86,"updated":"2023-07-21 22:09:47.000000000","message":"This branch is missing unit test coverage","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"e61c6b464c4726f96187567692881dae0d3caf88","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    try:"},{"line_number":84,"context_line":"                        catalog_zone \u003d self.storage.get_catalog_zone("},{"line_number":85,"context_line":"                            self.context, pool)"},{"line_number":86,"context_line":"                        SendNotify(self.executor, catalog_zone, self.target)()"},{"line_number":87,"context_line":"                    except exceptions.ZoneNotFound:"},{"line_number":88,"context_line":"                        pass"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"6ba59e37_81efdf7c","line":86,"in_reply_to":"d867d8e1_dd237f14","updated":"2023-08-08 14:37:29.000000000","message":"Done","commit_id":"4706c0f595201656145e122bf7c1104330da658f"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"d38389f6cf9be3595cd7c6c8854fad8afa0566c6","unresolved":true,"context_lines":[{"line_number":68,"context_line":"        for retry in range(0, self.max_retries):"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                # Check whether a catalog zone exists for this pool"},{"line_number":71,"context_line":"                catalog_zone \u003d None"},{"line_number":72,"context_line":"                pool \u003d self.storage.find_pool("},{"line_number":73,"context_line":"                    self.context, criterion\u003d{\u0027id\u0027: self.zone.pool_id})"},{"line_number":74,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"7814e71c_e5805ecf","line":71,"updated":"2023-11-15 12:55:08.000000000","message":"Why do we need a SQL call here when the flag has a type indicating if it is a catalog zone or not?","commit_id":"9717f1503956ef422da758493019de5557ec5657"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"61d38fe289e4a6ad754e87beb3256d0c9f78158f","unresolved":true,"context_lines":[{"line_number":68,"context_line":"        for retry in range(0, self.max_retries):"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                # Check whether a catalog zone exists for this pool"},{"line_number":71,"context_line":"                catalog_zone \u003d None"},{"line_number":72,"context_line":"                pool \u003d self.storage.find_pool("},{"line_number":73,"context_line":"                    self.context, criterion\u003d{\u0027id\u0027: self.zone.pool_id})"},{"line_number":74,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"83e9549e_4d87daf1","line":71,"in_reply_to":"7814e71c_e5805ecf","updated":"2023-11-15 15:23:31.000000000","message":"For primary/secondary zones, we again need to check whether that zone belongs to a pool with a CatZ. If a CatZ exists for that pool, we need to get its CatZ from the DB in order to send out NOTIFY messages for the CatZ.","commit_id":"9717f1503956ef422da758493019de5557ec5657"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"9fe2c54b984840408b6c4658355b49b1e1ed1866","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        for retry in range(0, self.max_retries):"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                # Check whether a catalog zone exists for this pool"},{"line_number":71,"context_line":"                catalog_zone \u003d None"},{"line_number":72,"context_line":"                pool \u003d self.storage.find_pool("},{"line_number":73,"context_line":"                    self.context, criterion\u003d{\u0027id\u0027: self.zone.pool_id})"},{"line_number":74,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"57877d26_9f21aa29","line":71,"in_reply_to":"83e9549e_4d87daf1","updated":"2023-11-15 22:50:30.000000000","message":"Ack","commit_id":"9717f1503956ef422da758493019de5557ec5657"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"9fe2c54b984840408b6c4658355b49b1e1ed1866","unresolved":true,"context_lines":[{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                # Check whether a catalog zone exists for this pool"},{"line_number":71,"context_line":"                catalog_zone \u003d None"},{"line_number":72,"context_line":"                pool \u003d self.storage.find_pool("},{"line_number":73,"context_line":"                    self.context, criterion\u003d{\u0027id\u0027: self.zone.pool_id})"},{"line_number":74,"context_line":"                try:"},{"line_number":75,"context_line":"                    catalog_zone \u003d self.storage.get_catalog_zone("}],"source_content_type":"text/x-python","patch_set":17,"id":"8324ab56_117434c0","line":72,"updated":"2023-11-15 22:50:30.000000000","message":"I would recommend moving get_catalog_zone above the for loop to line 67. I don\u0027t believe there is any benefit re-checking this failure everytime we fail to update the backend (or notify).","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"},{"author":{"_account_id":33634,"name":"Jan Hartkopf","email":"j@hartkopf.io","username":"jhartkopf"},"change_message_id":"158710eaaf74201a9fbdeeb4fd522be381d87053","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                # Check whether a catalog zone exists for this pool"},{"line_number":71,"context_line":"                catalog_zone \u003d None"},{"line_number":72,"context_line":"                pool \u003d self.storage.find_pool("},{"line_number":73,"context_line":"                    self.context, criterion\u003d{\u0027id\u0027: self.zone.pool_id})"},{"line_number":74,"context_line":"                try:"},{"line_number":75,"context_line":"                    catalog_zone \u003d self.storage.get_catalog_zone("}],"source_content_type":"text/x-python","patch_set":17,"id":"d69116f1_b5c86a8e","line":72,"in_reply_to":"8324ab56_117434c0","updated":"2023-11-16 13:00:36.000000000","message":"Done","commit_id":"c6c3dc992ffb8d6edca77f4de338e2eb0e73ac14"}]}
