)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"b0a518fc9c57bb5f057b2838a746f684667b1b7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"8b560d5a_d35a93b5","updated":"2025-10-17 13:37:08.000000000","message":"WIP","commit_id":"ce8b17dba10bd5808fb538f83aec2cff81353476"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"4f12f141a0ac6bb88fc5a55b34c1bb4a7d48df21","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"dd40d9de_1a7989ec","updated":"2025-10-19 21:25:13.000000000","message":"recheck failure due to big load on zuul nodes","commit_id":"c026f7c0e236a8a78f5ef153c03a2d8d97f7cc75"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"a0a81bef8136c46aee4f83509bd06953f4fb4d5d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"7aa80f28_989b6baf","updated":"2025-11-04 14:04:35.000000000","message":"there might be a race conditions with this patch, I am checking","commit_id":"bc5d32ebd728a4a2d155ad13fac29dce9c76b838"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e087f07d9d75efd1b897e7361fcfbb9d49b65183","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"1210b9af_c1273f9e","updated":"2026-01-16 19:07:25.000000000","message":"I have some concerns here we need to look at.","commit_id":"2c9549baf8f95873dc435e53f360f2d4d4e62947"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"a22042bf69a58f96fa62385006227fac801bca97","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"35f9d91d_739098b0","updated":"2026-01-13 14:14:28.000000000","message":"recheck grenade failure is not related to the patch","commit_id":"2c9549baf8f95873dc435e53f360f2d4d4e62947"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"997eae4892e09400e28fd46dda53fface2034895","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"a86e90ff_15f32f48","updated":"2026-01-19 18:25:15.000000000","message":"Reminder to myself: I am still missing the release notes and adapt the commit msg","commit_id":"3d61b3675703bc202b79271c6b03bad6ca8332e8"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"a9eeda2a0d400f0dc753fc920bb597b6680e136b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"2dc32af1_1200715a","updated":"2026-01-20 19:06:58.000000000","message":"Gerrit UI complains about conflicts again, I will rebase via cli","commit_id":"54ba6cc36065181291e1e49281bcd693c7cd2f3e"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"ecc5d3c3135ccd994380a046742901ef6130ed49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"19cc61a3_4dd78cef","updated":"2026-01-21 00:36:53.000000000","message":"recheck failure is not related to the patch","commit_id":"5731f92bdc750d3bca32f06cbdcdbddca6bf93a0"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"aafd0a274e5b798eb4837aad9b9413eee04b435d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"1c4e4ce5_f4e380aa","updated":"2026-01-21 10:51:59.000000000","message":"recheck failure is not related to the patch","commit_id":"5731f92bdc750d3bca32f06cbdcdbddca6bf93a0"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"fac8cbb9116cc41d2f708d798dc70fd2541ced3f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"e8a3d7a5_c2579116","updated":"2026-01-21 09:11:03.000000000","message":"recheck failure is not related to the patch","commit_id":"5731f92bdc750d3bca32f06cbdcdbddca6bf93a0"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"e28e03c4ccf877839158ee25e01068fd1fd2ae22","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"dea264cf_d3084930","updated":"2026-02-16 09:36:10.000000000","message":"Adding W+1 as we are 1 week from feature freeze","commit_id":"2c8b5ea864c413579000d44b2eb174a4817dd7c5"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"40cfb6610c50d8ccca48a747e42244de339a95b4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"c1ddb8f2_d07c7398","updated":"2026-02-05 21:25:36.000000000","message":"LGTM","commit_id":"2c8b5ea864c413579000d44b2eb174a4817dd7c5"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"7f8ca2f6ad56a3f00d2f56efa7573de8f73b7128","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"65d81963_206d722a","updated":"2026-02-16 10:46:33.000000000","message":"recheck failure is not related to the patch","commit_id":"2c8b5ea864c413579000d44b2eb174a4817dd7c5"}],"designate/central/service.py":[{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"0164cbb3bbe9282db48becffc552abe316c6bf11","unresolved":true,"context_lines":[{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        Ensures the provided zone_name is not blacklisted."},{"line_number":264,"context_line":"        \"\"\""},{"line_number":265,"context_line":"        from concurrent.futures import ThreadPoolExecutor"},{"line_number":266,"context_line":"        from concurrent.futures import TimeoutError"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        blacklists \u003d self.storage.find_blacklists(context)"}],"source_content_type":"text/x-python","patch_set":10,"id":"857384a7_650f64da","line":265,"updated":"2025-11-07 00:53:58.000000000","message":"This is so very smelly 😄","commit_id":"5544eb2595a7257057b0a907c515ee0d84b58f5c"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"9fd253f1be3b60561e1104d0243acb2cec1d52ec","unresolved":true,"context_lines":[{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        Ensures the provided zone_name is not blacklisted."},{"line_number":264,"context_line":"        \"\"\""},{"line_number":265,"context_line":"        from concurrent.futures import ThreadPoolExecutor"},{"line_number":266,"context_line":"        from concurrent.futures import TimeoutError"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        blacklists \u003d self.storage.find_blacklists(context)"}],"source_content_type":"text/x-python","patch_set":10,"id":"e683ee75_6ff23783","line":265,"in_reply_to":"5a1c3f73_e2550d8d","updated":"2025-11-14 16:08:16.000000000","message":"But why not import it at the top of the file?","commit_id":"5544eb2595a7257057b0a907c515ee0d84b58f5c"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"56c20255c4417dd1a6b358b67ce2308e95146bbf","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        Ensures the provided zone_name is not blacklisted."},{"line_number":264,"context_line":"        \"\"\""},{"line_number":265,"context_line":"        from concurrent.futures import ThreadPoolExecutor"},{"line_number":266,"context_line":"        from concurrent.futures import TimeoutError"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        blacklists \u003d self.storage.find_blacklists(context)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7077ce1d_093cfadb","line":265,"in_reply_to":"7737a58a_ff47d397","updated":"2026-01-20 09:45:06.000000000","message":"Done","commit_id":"5544eb2595a7257057b0a907c515ee0d84b58f5c"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"350b4b4ebf5cdbad68d1c1abc26842d8b260b63f","unresolved":true,"context_lines":[{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        Ensures the provided zone_name is not blacklisted."},{"line_number":264,"context_line":"        \"\"\""},{"line_number":265,"context_line":"        from concurrent.futures import ThreadPoolExecutor"},{"line_number":266,"context_line":"        from concurrent.futures import TimeoutError"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        blacklists \u003d self.storage.find_blacklists(context)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a1c3f73_e2550d8d","line":265,"in_reply_to":"857384a7_650f64da","updated":"2025-11-07 10:22:47.000000000","message":"This is one of the parts that broke the whole flow after removing eventlet (using signals).\nI used ThreadPoolExecutor to get access to future.result(timeout. \nMaybe to improve the performance, I can reuse the same ThreadPoolExecutor so that \u0027with\u0027 won\u0027t create a new one every time. Any other suggestions are welcome.","commit_id":"5544eb2595a7257057b0a907c515ee0d84b58f5c"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"7e5d27baae52edf98c43b36197b5a0a1e5d82483","unresolved":true,"context_lines":[{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        Ensures the provided zone_name is not blacklisted."},{"line_number":264,"context_line":"        \"\"\""},{"line_number":265,"context_line":"        from concurrent.futures import ThreadPoolExecutor"},{"line_number":266,"context_line":"        from concurrent.futures import TimeoutError"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        blacklists \u003d self.storage.find_blacklists(context)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7737a58a_ff47d397","line":265,"in_reply_to":"e683ee75_6ff23783","updated":"2025-11-14 16:48:35.000000000","message":"I agree, I will do that in my next PS.\n\nI had some cases that I imported modules that were using eventlet and I didn\u0027t know they did, so eventlet was automagically initialized and I got errors. I got a little paranoid with imports at the top of the file. With that being said, if there is one module that I am sure that doesn\u0027t use eventlet is probably ThreadPoolExecutor lol.\n\nI will also re-use that same instance of ThreadPoolExecutor as I suggested.","commit_id":"5544eb2595a7257057b0a907c515ee0d84b58f5c"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e087f07d9d75efd1b897e7361fcfbb9d49b65183","unresolved":true,"context_lines":[{"line_number":2704,"context_line":"        created_zone_import \u003d self.storage.create_zone_import(context,"},{"line_number":2705,"context_line":"                                                              zone_import)"},{"line_number":2706,"context_line":""},{"line_number":2707,"context_line":"        self.tg.add_thread(self._import_zone, context, created_zone_import,"},{"line_number":2708,"context_line":"                           request_body)"},{"line_number":2709,"context_line":""},{"line_number":2710,"context_line":"        return created_zone_import"}],"source_content_type":"text/x-python","patch_set":14,"id":"aa950720_8767597b","side":"PARENT","line":2707,"updated":"2026-01-16 19:07:25.000000000","message":"Why couldn\u0027t we keep this? Shouldn\u0027t oslo_service hide the details of the thread group? A quick glance at oslo service implies this call should still work.","commit_id":"af5c82823cfb27ea202755c90343530f7e606f12"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"56c20255c4417dd1a6b358b67ce2308e95146bbf","unresolved":false,"context_lines":[{"line_number":2704,"context_line":"        created_zone_import \u003d self.storage.create_zone_import(context,"},{"line_number":2705,"context_line":"                                                              zone_import)"},{"line_number":2706,"context_line":""},{"line_number":2707,"context_line":"        self.tg.add_thread(self._import_zone, context, created_zone_import,"},{"line_number":2708,"context_line":"                           request_body)"},{"line_number":2709,"context_line":""},{"line_number":2710,"context_line":"        return created_zone_import"}],"source_content_type":"text/x-python","patch_set":14,"id":"e3a97e9b_2470460f","side":"PARENT","line":2707,"in_reply_to":"aa950720_8767597b","updated":"2026-01-20 09:45:06.000000000","message":"Done","commit_id":"af5c82823cfb27ea202755c90343530f7e606f12"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e087f07d9d75efd1b897e7361fcfbb9d49b65183","unresolved":true,"context_lines":[{"line_number":2711,"context_line":"        # RPC worker threads, at least for now"},{"line_number":2712,"context_line":"        # TODO(oschwart) replace this later with an asynchronous implementation"},{"line_number":2713,"context_line":"        zone \u003d None"},{"line_number":2714,"context_line":"        with _ZONE_IMPORT_LOCK:"},{"line_number":2715,"context_line":"            try:"},{"line_number":2716,"context_line":"                dnspython_zone \u003d dnszone.from_text("},{"line_number":2717,"context_line":"                    request_body,"}],"source_content_type":"text/x-python","patch_set":14,"id":"588ddc01_6a6729d3","line":2714,"updated":"2026-01-16 19:07:25.000000000","message":"What evidence do we have that we need this global lock?\n\nIf we really do need it, is there a way we can use the zone level locking instead of blocking all zone import calls?","commit_id":"2c9549baf8f95873dc435e53f360f2d4d4e62947"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"56c20255c4417dd1a6b358b67ce2308e95146bbf","unresolved":true,"context_lines":[{"line_number":2711,"context_line":"        # RPC worker threads, at least for now"},{"line_number":2712,"context_line":"        # TODO(oschwart) replace this later with an asynchronous implementation"},{"line_number":2713,"context_line":"        zone \u003d None"},{"line_number":2714,"context_line":"        with _ZONE_IMPORT_LOCK:"},{"line_number":2715,"context_line":"            try:"},{"line_number":2716,"context_line":"                dnspython_zone \u003d dnszone.from_text("},{"line_number":2717,"context_line":"                    request_body,"}],"source_content_type":"text/x-python","patch_set":14,"id":"db6098cd_00b4422d","line":2714,"in_reply_to":"588ddc01_6a6729d3","updated":"2026-01-20 09:45:06.000000000","message":"Back then, I couldn\u0027t solve that mystery about \ndnszone.from_text\n+\n(missing os.environ[\u0027EVENTLET_NO_GREENDNS\u0027] \u003d \u0027yes\u0027)\n\nSome context: when we don\u0027t have that environment variable defined, we get the following error \nhttps://paste.openstack.org/show/bDfNCP8fECOM2DAd1225/\n\ndue to monkey patching.\n\nIt was quite an extreme move but I thought that migrating mdns to asyncio / threading will solve it. So while I still think we should migrate mdns, it looks like we don\u0027t need to do it right now, and definitely not making it synchronous.\nThanks for reviewing the patch.","commit_id":"2c9549baf8f95873dc435e53f360f2d4d4e62947"}],"designate/conf/central.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e087f07d9d75efd1b897e7361fcfbb9d49b65183","unresolved":true,"context_lines":[{"line_number":23,"context_line":"CENTRAL_OPTS \u003d ["},{"line_number":24,"context_line":"    cfg.IntOpt(\u0027workers\u0027,"},{"line_number":25,"context_line":"               help\u003d\u0027Number of central worker processes to spawn\u0027),"},{"line_number":26,"context_line":"    cfg.IntOpt(\u0027threads\u0027, default\u003d100,"},{"line_number":27,"context_line":"               help\u003d\u0027Number of central threads to spawn\u0027),"},{"line_number":28,"context_line":"    cfg.IntOpt(\u0027max_zone_name_len\u0027, default\u003d255,"},{"line_number":29,"context_line":"               help\u003d\"Maximum zone name length\"),"}],"source_content_type":"text/x-python","patch_set":14,"id":"720533ef_a7ae724a","line":26,"updated":"2026-01-16 19:07:25.000000000","message":"This needs to be mentioned in the release notes.","commit_id":"2c9549baf8f95873dc435e53f360f2d4d4e62947"}],"designate/service.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e087f07d9d75efd1b897e7361fcfbb9d49b65183","unresolved":true,"context_lines":[{"line_number":95,"context_line":"            return"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        LOG.info(\u0027Initializing RPC server for %s\u0027, self.name)"},{"line_number":98,"context_line":"        self.exception_thread_local \u003d rpc_decorator.ExceptionThreadLocal()"},{"line_number":99,"context_line":"        target \u003d messaging.Target(topic\u003dself.rpc_topic, server\u003dself.host)"},{"line_number":100,"context_line":"        self.rpc_server \u003d rpc.get_server(target, self.endpoints)"},{"line_number":101,"context_line":"        self.rpc_server.start()"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa3969f5_99ec5622","line":98,"updated":"2026-01-16 19:07:25.000000000","message":"Why do we need this here? It\u0027s duplicate to line 81 above in the __init__","commit_id":"2c9549baf8f95873dc435e53f360f2d4d4e62947"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"56c20255c4417dd1a6b358b67ce2308e95146bbf","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            return"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        LOG.info(\u0027Initializing RPC server for %s\u0027, self.name)"},{"line_number":98,"context_line":"        self.exception_thread_local \u003d rpc_decorator.ExceptionThreadLocal()"},{"line_number":99,"context_line":"        target \u003d messaging.Target(topic\u003dself.rpc_topic, server\u003dself.host)"},{"line_number":100,"context_line":"        self.rpc_server \u003d rpc.get_server(target, self.endpoints)"},{"line_number":101,"context_line":"        self.rpc_server.start()"}],"source_content_type":"text/x-python","patch_set":14,"id":"d6791867_be87e0db","line":98,"in_reply_to":"fa3969f5_99ec5622","updated":"2026-01-20 09:45:06.000000000","message":"Done","commit_id":"2c9549baf8f95873dc435e53f360f2d4d4e62947"}],"releasenotes/notes/remove-eventlet-from-central-ce8b17db.yaml":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e087f07d9d75efd1b897e7361fcfbb9d49b65183","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    **Zone Import Changes:**"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    - Zone imports now execute synchronously instead of asynchronously in a"},{"line_number":10,"context_line":"      background thread. The ``create_zone_import`` API call will block until"},{"line_number":11,"context_line":"      the zone import completes or fails."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"09240c73_99b9decf","line":9,"updated":"2026-01-16 19:07:25.000000000","message":"This concerns me. This was async because large zone imports could take longer than the API response timeout.","commit_id":"2c9549baf8f95873dc435e53f360f2d4d4e62947"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"56c20255c4417dd1a6b358b67ce2308e95146bbf","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    **Zone Import Changes:**"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    - Zone imports now execute synchronously instead of asynchronously in a"},{"line_number":10,"context_line":"      background thread. The ``create_zone_import`` API call will block until"},{"line_number":11,"context_line":"      the zone import completes or fails."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"b340ddc9_86406680","line":9,"in_reply_to":"09240c73_99b9decf","updated":"2026-01-20 09:45:06.000000000","message":"Now that we have evidences that we don\u0027t need to make zone imports synchronous, I will change the release notes, thanks.","commit_id":"2c9549baf8f95873dc435e53f360f2d4d4e62947"}]}
