)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"a2334725c447737a44678ebbb8c8bcd25cc730af","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"060f1083_29ffe23a","updated":"2025-08-16 23:51:35.000000000","message":"recheck","commit_id":"b551c03cdf674142dfdaf9702be45c678ece0957"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"903679a44022b9232e0e91dfa8a089eed7fe09fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"06bbd62d_cf8140a4","updated":"2025-08-08 09:52:12.000000000","message":"recheck","commit_id":"b551c03cdf674142dfdaf9702be45c678ece0957"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"33dfdefc274de016d4cc4e7d10e3900fe59ea0d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"43b90c5e_6fa7a32a","updated":"2025-08-11 09:05:02.000000000","message":"recheck","commit_id":"b551c03cdf674142dfdaf9702be45c678ece0957"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"22167decd503a5516cf53b575c64f01e2e21daf6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"6bd8fb97_c45130e1","updated":"2025-08-08 11:52:07.000000000","message":"recheck","commit_id":"b551c03cdf674142dfdaf9702be45c678ece0957"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"a14f061bcd4b3594ffd44f755fe068a1f40ab438","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"521fb923_0c5858ff","updated":"2025-08-20 20:53:42.000000000","message":"recheck","commit_id":"20f8918279e81c3bc9671cd83239b5b80642e642"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"d54502601db2e57e0d7cf1950d6f2ddc735bba5f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"b7de9b1b_ecfe1470","updated":"2025-08-26 08:36:12.000000000","message":"recheck","commit_id":"614623545037926789e5b80809f67f3ae2b53950"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"08827fbc48feba09e3e376f049865e4389095b10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"2d67940a_69faa479","updated":"2025-09-18 13:11:13.000000000","message":"-1 mainly due to the concern by accepting conf\u003dNone but the other parts look good.","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9bdbaea20068c5711a627929453be294cdac84cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"8c097624_f3b6a057","updated":"2025-09-17 14:36:56.000000000","message":"LGTM","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"}],"oslo_service/backend/_eventlet/loopingcall.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"484e33afac0d4c977f23ff53507dd9a92e9decc3","unresolved":true,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from oslo_service._i18n import _"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class LoopingCallDone(Exception):"}],"source_content_type":"text/x-python","patch_set":11,"id":"bf231460_077383e8","side":"PARENT","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":33},"updated":"2025-09-03 13:46:12.000000000","message":"This can be kept, then you don\u0027t need the change in `RetryDecorator.__call__`","commit_id":"c98feeb23dfc12e743185860b4912ad584439525"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"ab5f440c0f85b8c515071ed9051dd7a62734d542","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from oslo_service._i18n import _"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class LoopingCallDone(Exception):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1b291625_27bb8c74","side":"PARENT","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":33},"in_reply_to":"bf231460_077383e8","updated":"2025-09-06 16:35:49.000000000","message":"Done","commit_id":"c98feeb23dfc12e743185860b4912ad584439525"}],"oslo_service/backend/_eventlet/service.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"08827fbc48feba09e3e376f049865e4389095b10","unresolved":true,"context_lines":[{"line_number":170,"context_line":"    def __init__(self, conf\u003dNone, restart_method\u003d\u0027reload\u0027):"},{"line_number":171,"context_line":"        \"\"\"Initialize the service launcher."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        :param conf: Configuration object (optional)"},{"line_number":174,"context_line":"        :param restart_method: If \u0027reload\u0027, calls reload_config_files on"},{"line_number":175,"context_line":"            SIGHUP. If \u0027mutate\u0027, calls mutate_config_files on SIGHUP."},{"line_number":176,"context_line":"            Other values produce a ValueError."}],"source_content_type":"text/x-python","patch_set":14,"id":"259ec374_3e5e5993","line":173,"range":{"start_line":173,"start_character":8,"end_line":173,"end_character":52},"updated":"2025-09-18 13:11:13.000000000","message":"There are number of places where self.conf is used which may be broken when conf is None. IMO we should not make it optional.","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"1720336a39fe56a15d366985374f3de88fe3717b","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    def __init__(self, conf\u003dNone, restart_method\u003d\u0027reload\u0027):"},{"line_number":171,"context_line":"        \"\"\"Initialize the service launcher."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        :param conf: Configuration object (optional)"},{"line_number":174,"context_line":"        :param restart_method: If \u0027reload\u0027, calls reload_config_files on"},{"line_number":175,"context_line":"            SIGHUP. If \u0027mutate\u0027, calls mutate_config_files on SIGHUP."},{"line_number":176,"context_line":"            Other values produce a ValueError."}],"source_content_type":"text/x-python","patch_set":14,"id":"22c06942_bdf26165","line":173,"range":{"start_line":173,"start_character":8,"end_line":173,"end_character":52},"in_reply_to":"259ec374_3e5e5993","updated":"2025-09-24 07:16:51.000000000","message":"Done","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"7216d12b92317b437622269739061464d4354db2","unresolved":true,"context_lines":[{"line_number":176,"context_line":"            Other values produce a ValueError."},{"line_number":177,"context_line":"        :returns: None"},{"line_number":178,"context_line":"        \"\"\""},{"line_number":179,"context_line":"        self.conf \u003d conf"},{"line_number":180,"context_line":"        if conf is not None:"},{"line_number":181,"context_line":"            conf.register_opts(_options.service_opts)"},{"line_number":182,"context_line":"        self.services \u003d Services(restart_method\u003drestart_method)"},{"line_number":183,"context_line":"        if self.conf:"},{"line_number":184,"context_line":"            self.backdoor_port \u003d eventlet_backdoor.initialize_if_enabled("},{"line_number":185,"context_line":"                self.conf)"},{"line_number":186,"context_line":"        else:"},{"line_number":187,"context_line":"            self.backdoor_port \u003d None"},{"line_number":188,"context_line":"        self.restart_method \u003d restart_method"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def launch_service(self, service, workers\u003d1):"}],"source_content_type":"text/x-python","patch_set":16,"id":"e8ad1618_ad224ef0","line":187,"range":{"start_line":179,"start_character":24,"end_line":187,"end_character":37},"updated":"2025-09-29 14:29:18.000000000","message":"Oops. Please revert these changes, too.","commit_id":"5228d4c5929e06851da00c777ed6575ec47619da"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"1e92bcb7e7092a310c0b01362042c3cc4f450f31","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            Other values produce a ValueError."},{"line_number":177,"context_line":"        :returns: None"},{"line_number":178,"context_line":"        \"\"\""},{"line_number":179,"context_line":"        self.conf \u003d conf"},{"line_number":180,"context_line":"        if conf is not None:"},{"line_number":181,"context_line":"            conf.register_opts(_options.service_opts)"},{"line_number":182,"context_line":"        self.services \u003d Services(restart_method\u003drestart_method)"},{"line_number":183,"context_line":"        if self.conf:"},{"line_number":184,"context_line":"            self.backdoor_port \u003d eventlet_backdoor.initialize_if_enabled("},{"line_number":185,"context_line":"                self.conf)"},{"line_number":186,"context_line":"        else:"},{"line_number":187,"context_line":"            self.backdoor_port \u003d None"},{"line_number":188,"context_line":"        self.restart_method \u003d restart_method"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def launch_service(self, service, workers\u003d1):"}],"source_content_type":"text/x-python","patch_set":16,"id":"716100d9_8399fddb","line":187,"range":{"start_line":179,"start_character":24,"end_line":187,"end_character":37},"in_reply_to":"e8ad1618_ad224ef0","updated":"2025-10-01 06:20:51.000000000","message":"Done","commit_id":"5228d4c5929e06851da00c777ed6575ec47619da"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5ba7b939a6026d72e3097a52fa6984277e9c4256","unresolved":true,"context_lines":[{"line_number":177,"context_line":"        :returns: None"},{"line_number":178,"context_line":"        \"\"\""},{"line_number":179,"context_line":"        self.conf \u003d conf"},{"line_number":180,"context_line":"        if conf is not None:"},{"line_number":181,"context_line":"            conf.register_opts(_options.service_opts)"},{"line_number":182,"context_line":"        self.services \u003d Services(restart_method\u003drestart_method)"},{"line_number":183,"context_line":"        self.backdoor_port \u003d ("}],"source_content_type":"text/x-python","patch_set":17,"id":"4deefa94_0b3f0069","line":180,"range":{"start_line":180,"start_character":8,"end_line":180,"end_character":28},"updated":"2025-09-30 12:54:45.000000000","message":"Again, Using conf\u003dNone breaks the other methods. This change has no benefit but is even make things worse because it delays the problem detection. I don\u0027t know if you intentionally kept this for some reason ?","commit_id":"e84d3d11c1afe238a29b4c26d3517238fc4cc23f"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"59d127a8cf5886a8f6ecdadf2eac240a78490f7c","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        :returns: None"},{"line_number":178,"context_line":"        \"\"\""},{"line_number":179,"context_line":"        self.conf \u003d conf"},{"line_number":180,"context_line":"        if conf is not None:"},{"line_number":181,"context_line":"            conf.register_opts(_options.service_opts)"},{"line_number":182,"context_line":"        self.services \u003d Services(restart_method\u003drestart_method)"},{"line_number":183,"context_line":"        self.backdoor_port \u003d ("}],"source_content_type":"text/x-python","patch_set":17,"id":"0f26b145_35944673","line":180,"range":{"start_line":180,"start_character":8,"end_line":180,"end_character":28},"in_reply_to":"4deefa94_0b3f0069","updated":"2025-10-07 09:54:08.000000000","message":"Done","commit_id":"e84d3d11c1afe238a29b4c26d3517238fc4cc23f"}],"oslo_service/backend/_eventlet/threadgroup.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"484e33afac0d4c977f23ff53507dd9a92e9decc3","unresolved":true,"context_lines":[{"line_number":182,"context_line":"            return"},{"line_number":183,"context_line":"        wait_time \u003d kwargs.get(\u0027wait_time\u0027, 1)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        from oslo_utils import timeutils"},{"line_number":186,"context_line":"        watch \u003d timeutils.StopWatch(duration\u003dtimeout)"},{"line_number":187,"context_line":"        watch.start()"},{"line_number":188,"context_line":"        while self._any_threads_alive():"}],"source_content_type":"text/x-python","patch_set":11,"id":"dff97ef0_ce6c0da3","line":185,"range":{"start_line":185,"start_character":8,"end_line":185,"end_character":40},"updated":"2025-09-03 13:46:12.000000000","message":"Can we avoid this and use top-level import consistently ?","commit_id":"bf210fb71f57701d526a7197ba668900eee7f330"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"faee617e832600a92932251f40aa257ccd92e7c8","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            return"},{"line_number":183,"context_line":"        wait_time \u003d kwargs.get(\u0027wait_time\u0027, 1)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        from oslo_utils import timeutils"},{"line_number":186,"context_line":"        watch \u003d timeutils.StopWatch(duration\u003dtimeout)"},{"line_number":187,"context_line":"        watch.start()"},{"line_number":188,"context_line":"        while self._any_threads_alive():"}],"source_content_type":"text/x-python","patch_set":11,"id":"7fa6f953_7cacba10","line":185,"range":{"start_line":185,"start_character":8,"end_line":185,"end_character":40},"in_reply_to":"dff97ef0_ce6c0da3","updated":"2025-09-05 04:12:06.000000000","message":"Done","commit_id":"bf210fb71f57701d526a7197ba668900eee7f330"}],"oslo_service/backend/_threading/__init__.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"08827fbc48feba09e3e376f049865e4389095b10","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        return {"},{"line_number":30,"context_line":"            # Service-related classes"},{"line_number":31,"context_line":"            \"ServiceBase\": service.ServiceBase,"},{"line_number":32,"context_line":"            \"ServiceLauncher\": service.ServiceLauncher,"},{"line_number":33,"context_line":"            \"Launcher\": service.Launcher,"},{"line_number":34,"context_line":"            \"ProcessLauncher\": service.ProcessLauncher,"},{"line_number":35,"context_line":"            \"Service\": service.Service,"},{"line_number":36,"context_line":"            \"Services\": service.Services,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7b30c4c8_13f144fd","line":33,"range":{"start_line":31,"start_character":47,"end_line":33,"end_character":41},"updated":"2025-09-18 13:11:13.000000000","message":"This smells like a bug which we should fix in stable branches. Should we have a separate change so that we can backport this ?","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"775e88db8985358a1aca6c22c72f00db5aab2e65","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        return {"},{"line_number":30,"context_line":"            # Service-related classes"},{"line_number":31,"context_line":"            \"ServiceBase\": service.ServiceBase,"},{"line_number":32,"context_line":"            \"ServiceLauncher\": service.ServiceLauncher,"},{"line_number":33,"context_line":"            \"Launcher\": service.Launcher,"},{"line_number":34,"context_line":"            \"ProcessLauncher\": service.ProcessLauncher,"},{"line_number":35,"context_line":"            \"Service\": service.Service,"},{"line_number":36,"context_line":"            \"Services\": service.Services,"}],"source_content_type":"text/x-python","patch_set":14,"id":"00e538af_75871979","line":33,"range":{"start_line":31,"start_character":47,"end_line":33,"end_character":41},"in_reply_to":"603293ec_e22fd430","updated":"2025-09-24 09:05:40.000000000","message":"Indeed","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"56d36ef05b4fc959d7243e1e766a3f510756fd4b","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        return {"},{"line_number":30,"context_line":"            # Service-related classes"},{"line_number":31,"context_line":"            \"ServiceBase\": service.ServiceBase,"},{"line_number":32,"context_line":"            \"ServiceLauncher\": service.ServiceLauncher,"},{"line_number":33,"context_line":"            \"Launcher\": service.Launcher,"},{"line_number":34,"context_line":"            \"ProcessLauncher\": service.ProcessLauncher,"},{"line_number":35,"context_line":"            \"Service\": service.Service,"},{"line_number":36,"context_line":"            \"Services\": service.Services,"}],"source_content_type":"text/x-python","patch_set":14,"id":"dce18163_da81e575","line":33,"range":{"start_line":31,"start_character":47,"end_line":33,"end_character":41},"in_reply_to":"7b30c4c8_13f144fd","updated":"2025-09-23 06:18:34.000000000","message":"Ok right I will do it in a separate patch, you\u0027re right.","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"990d108e3effd67a9b52972a14daf1a25d31b856","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        return {"},{"line_number":30,"context_line":"            # Service-related classes"},{"line_number":31,"context_line":"            \"ServiceBase\": service.ServiceBase,"},{"line_number":32,"context_line":"            \"ServiceLauncher\": service.ServiceLauncher,"},{"line_number":33,"context_line":"            \"Launcher\": service.Launcher,"},{"line_number":34,"context_line":"            \"ProcessLauncher\": service.ProcessLauncher,"},{"line_number":35,"context_line":"            \"Service\": service.Service,"},{"line_number":36,"context_line":"            \"Services\": service.Services,"}],"source_content_type":"text/x-python","patch_set":14,"id":"603293ec_e22fd430","line":33,"range":{"start_line":31,"start_character":47,"end_line":33,"end_character":41},"in_reply_to":"bc759e81_7a82b62f","updated":"2025-09-24 08:24:12.000000000","message":"I think you have watch old version, because I have made that change.","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9a6bfe1a880b61caddcdd9b6d2d52d0a18c2e1bf","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        return {"},{"line_number":30,"context_line":"            # Service-related classes"},{"line_number":31,"context_line":"            \"ServiceBase\": service.ServiceBase,"},{"line_number":32,"context_line":"            \"ServiceLauncher\": service.ServiceLauncher,"},{"line_number":33,"context_line":"            \"Launcher\": service.Launcher,"},{"line_number":34,"context_line":"            \"ProcessLauncher\": service.ProcessLauncher,"},{"line_number":35,"context_line":"            \"Service\": service.Service,"},{"line_number":36,"context_line":"            \"Services\": service.Services,"}],"source_content_type":"text/x-python","patch_set":14,"id":"bc759e81_7a82b62f","line":33,"range":{"start_line":31,"start_character":47,"end_line":33,"end_character":41},"in_reply_to":"dce18163_da81e575","updated":"2025-09-24 07:42:54.000000000","message":"Have you extracted that logic into a new patch?","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"}],"oslo_service/backend/_threading/loopingcall.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"80a1716e2b4839d0fa04689409fa581a933f6a08","unresolved":true,"context_lines":[{"line_number":66,"context_line":"        # Store kwargs separately for threading backend compatibility"},{"line_number":67,"context_line":"        self.kwargs \u003d kwargs"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _init_abort_mechanism(self):"},{"line_number":70,"context_line":"        self._abort \u003d threading.Event()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a1836f6_3ff52641","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":29},"updated":"2025-09-03 13:49:11.000000000","message":"Instead of doing this change this to _get_abort and return an instance then use it in `__init__` to set self._abort.","commit_id":"bf210fb71f57701d526a7197ba668900eee7f330"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"4516a6308241267685af1a534ab15b1f43f0859d","unresolved":true,"context_lines":[{"line_number":66,"context_line":"        # Store kwargs separately for threading backend compatibility"},{"line_number":67,"context_line":"        self.kwargs \u003d kwargs"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _init_abort_mechanism(self):"},{"line_number":70,"context_line":"        self._abort \u003d threading.Event()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":11,"id":"9b4881dd_01a2f0a4","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":29},"in_reply_to":"3a1836f6_3ff52641","updated":"2025-09-17 13:28:16.000000000","message":"Thank you for the review! I\u0027ve successfully addressed all the feedback and implemented the requested changes. The patch now properly extracts shared logic between eventlet and threading backends while maintaining full API compatibility.","commit_id":"bf210fb71f57701d526a7197ba668900eee7f330"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"e69902b1b9585d305a7260346b3c5fac5a22cec6","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        # Store kwargs separately for threading backend compatibility"},{"line_number":67,"context_line":"        self.kwargs \u003d kwargs"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _init_abort_mechanism(self):"},{"line_number":70,"context_line":"        self._abort \u003d threading.Event()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":11,"id":"35ba0eb9_5ecc4ebf","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":29},"in_reply_to":"9b4881dd_01a2f0a4","updated":"2025-09-17 13:28:55.000000000","message":"Done","commit_id":"bf210fb71f57701d526a7197ba668900eee7f330"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"08827fbc48feba09e3e376f049865e4389095b10","unresolved":true,"context_lines":[{"line_number":65,"context_line":"        # Store kwargs separately for threading backend compatibility"},{"line_number":66,"context_line":"        self.kwargs \u003d kwargs"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _get_abort(self):"},{"line_number":69,"context_line":"        \"\"\"Return a new abort mechanism instance.\"\"\""},{"line_number":70,"context_line":"        return threading.Event()"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"d4dab269_a78e3aa8","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":18},"updated":"2025-09-18 13:11:13.000000000","message":"_get_abort_mechanism ?","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"1720336a39fe56a15d366985374f3de88fe3717b","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        # Store kwargs separately for threading backend compatibility"},{"line_number":66,"context_line":"        self.kwargs \u003d kwargs"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _get_abort(self):"},{"line_number":69,"context_line":"        \"\"\"Return a new abort mechanism instance.\"\"\""},{"line_number":70,"context_line":"        return threading.Event()"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"acca7b72_b6037c72","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":18},"in_reply_to":"d4dab269_a78e3aa8","updated":"2025-09-24 07:16:51.000000000","message":"Done","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"08827fbc48feba09e3e376f049865e4389095b10","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        \"\"\"Return a new abort mechanism instance.\"\"\""},{"line_number":70,"context_line":"        return threading.Event()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _init_abort_mechanism(self):"},{"line_number":73,"context_line":"        self._abort \u003d self._get_abort()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":14,"id":"cde7587a_236e2a46","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":29},"updated":"2025-09-18 13:11:13.000000000","message":"Move this to the parent class because the logic is identical in the two backends.","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"56d36ef05b4fc959d7243e1e766a3f510756fd4b","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        \"\"\"Return a new abort mechanism instance.\"\"\""},{"line_number":70,"context_line":"        return threading.Event()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _init_abort_mechanism(self):"},{"line_number":73,"context_line":"        self._abort \u003d self._get_abort()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":14,"id":"f56c4aae_a054fdba","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":29},"in_reply_to":"cde7587a_236e2a46","updated":"2025-09-23 06:18:34.000000000","message":"Yes right, thanks a lot!","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"1720336a39fe56a15d366985374f3de88fe3717b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        \"\"\"Return a new abort mechanism instance.\"\"\""},{"line_number":70,"context_line":"        return threading.Event()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _init_abort_mechanism(self):"},{"line_number":73,"context_line":"        self._abort \u003d self._get_abort()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":14,"id":"f9984987_4ea81db7","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":29},"in_reply_to":"f56c4aae_a054fdba","updated":"2025-09-24 07:16:51.000000000","message":"Done","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"}],"oslo_service/backend/_threading/service.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"08827fbc48feba09e3e376f049865e4389095b10","unresolved":true,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class Launcher:"},{"line_number":93,"context_line":"    def __init__(self, conf\u003dNone, restart_method\u003d\u0027reload\u0027):"},{"line_number":94,"context_line":"        self._launcher \u003d None"},{"line_number":95,"context_line":"        self.conf \u003d conf"},{"line_number":96,"context_line":"        self.restart_method \u003d restart_method"}],"source_content_type":"text/x-python","patch_set":14,"id":"254b1c33_f41c54f1","line":93,"range":{"start_line":93,"start_character":4,"end_line":93,"end_character":59},"updated":"2025-09-18 13:11:13.000000000","message":"This smells like a bug which we should fix in stable branches. Should we have a separate change so that we can backport this ?\n\nAlso maybe add a note to deprecate conf/restart_module ?","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"775e88db8985358a1aca6c22c72f00db5aab2e65","unresolved":true,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class Launcher:"},{"line_number":93,"context_line":"    def __init__(self, conf\u003dNone, restart_method\u003d\u0027reload\u0027):"},{"line_number":94,"context_line":"        self._launcher \u003d None"},{"line_number":95,"context_line":"        self.conf \u003d conf"},{"line_number":96,"context_line":"        self.restart_method \u003d restart_method"}],"source_content_type":"text/x-python","patch_set":14,"id":"f2d8293d_7dbb423e","line":93,"range":{"start_line":93,"start_character":4,"end_line":93,"end_character":59},"in_reply_to":"22c98f9b_3ba2060c","updated":"2025-09-24 09:05:40.000000000","message":"This comment still seems relevant","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"56d36ef05b4fc959d7243e1e766a3f510756fd4b","unresolved":true,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class Launcher:"},{"line_number":93,"context_line":"    def __init__(self, conf\u003dNone, restart_method\u003d\u0027reload\u0027):"},{"line_number":94,"context_line":"        self._launcher \u003d None"},{"line_number":95,"context_line":"        self.conf \u003d conf"},{"line_number":96,"context_line":"        self.restart_method \u003d restart_method"}],"source_content_type":"text/x-python","patch_set":14,"id":"22c98f9b_3ba2060c","line":93,"range":{"start_line":93,"start_character":4,"end_line":93,"end_character":59},"in_reply_to":"254b1c33_f41c54f1","updated":"2025-09-23 06:18:34.000000000","message":"Ok I will do that.","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"082881cf743abd4fc73543600a06d4071aa7f478","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class Launcher:"},{"line_number":93,"context_line":"    def __init__(self, conf\u003dNone, restart_method\u003d\u0027reload\u0027):"},{"line_number":94,"context_line":"        self._launcher \u003d None"},{"line_number":95,"context_line":"        self.conf \u003d conf"},{"line_number":96,"context_line":"        self.restart_method \u003d restart_method"}],"source_content_type":"text/x-python","patch_set":14,"id":"920ddb3d_3d59683f","line":93,"range":{"start_line":93,"start_character":4,"end_line":93,"end_character":59},"in_reply_to":"6ad92421_6b39a215","updated":"2025-09-24 10:18:28.000000000","message":"No it\u0027s fixed on the version 16.","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"36bc8c8c0b47ec80ff173c027b4da27253a1f38e","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class Launcher:"},{"line_number":93,"context_line":"    def __init__(self, conf\u003dNone, restart_method\u003d\u0027reload\u0027):"},{"line_number":94,"context_line":"        self._launcher \u003d None"},{"line_number":95,"context_line":"        self.conf \u003d conf"},{"line_number":96,"context_line":"        self.restart_method \u003d restart_method"}],"source_content_type":"text/x-python","patch_set":14,"id":"6ad92421_6b39a215","line":93,"range":{"start_line":93,"start_character":4,"end_line":93,"end_character":59},"in_reply_to":"f2d8293d_7dbb423e","updated":"2025-09-24 10:17:46.000000000","message":"Done","commit_id":"9e6beba4cd9ac5357c067b21a5b6b0f1865e9b70"}],"oslo_service/backend/_threading/threadgroup.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4626a2ad38c018ef05735d909bab14c4a7f597a5","unresolved":true,"context_lines":[{"line_number":52,"context_line":"    \"\"\"A group of threads and timers similar to eventlet\u0027s GreenPool.\"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def __init__(self, max_threads\u003d1000):"},{"line_number":55,"context_line":"        super().__init__(thread_pool_size\u003dmax_threads)"},{"line_number":56,"context_line":"        self._lock \u003d threading.Lock()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _create_fixed_timer(self, callback, args, kwargs):"}],"source_content_type":"text/x-python","patch_set":19,"id":"72760121_fdb8d2d0","line":55,"updated":"2025-11-14 13:11:46.000000000","message":"This renaming broke backward compatibility and cause heat to fail with oslo.service 4.4.0. Heat is being fixed via https://review.opendev.org/c/openstack/heat/+/967212","commit_id":"8c74d0718dc11ed5088ac9ff318f049c2a97cd39"}]}
