)]}'
{"oslo_service/backend/_threading/service.py":[{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"50f8a32ab669042abd4e9c70ea167d87b4bfb3b4","unresolved":true,"context_lines":[{"line_number":93,"context_line":"    :param graceful_shutdown_timeout: Timeout for graceful shutdown."},{"line_number":94,"context_line":"    :param conf: oslo.config ConfigOpts instance."},{"line_number":95,"context_line":"    :param restart_method: \u0027reload\u0027 or \u0027mutate\u0027 for SIGHUP handling."},{"line_number":96,"context_line":"    :param start_method: multiprocessing start method, ``fork`` or ``spawn``."},{"line_number":97,"context_line":"    :returns: A tuple (manager_context, manager)."},{"line_number":98,"context_line":"    \"\"\""},{"line_number":99,"context_line":"    manager_context \u003d _select_service_manager_context("}],"source_content_type":"text/x-python","patch_set":2,"id":"265d0e90_98f46527","line":96,"range":{"start_line":96,"start_character":11,"end_line":96,"end_character":23},"updated":"2026-07-29 14:02:12.000000000","message":"I found this name a bit confusing, especially in comparison of the other parameter `restart_method` where people might think that they are related in terms of purpose. What do you think about something like `selected_multiprocessing_context`?","commit_id":"f402f4eb8ec9e07ccc166c0607e80abec259fe9a"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"12f0500731958a64b492a5c19bea49dc9c3ce931","unresolved":true,"context_lines":[{"line_number":93,"context_line":"    :param graceful_shutdown_timeout: Timeout for graceful shutdown."},{"line_number":94,"context_line":"    :param conf: oslo.config ConfigOpts instance."},{"line_number":95,"context_line":"    :param restart_method: \u0027reload\u0027 or \u0027mutate\u0027 for SIGHUP handling."},{"line_number":96,"context_line":"    :param start_method: multiprocessing start method, ``fork`` or ``spawn``."},{"line_number":97,"context_line":"    :returns: A tuple (manager_context, manager)."},{"line_number":98,"context_line":"    \"\"\""},{"line_number":99,"context_line":"    manager_context \u003d _select_service_manager_context("}],"source_content_type":"text/x-python","patch_set":2,"id":"d17aabc4_2e1bef1c","line":96,"range":{"start_line":96,"start_character":11,"end_line":96,"end_character":23},"in_reply_to":"265d0e90_98f46527","updated":"2026-07-29 22:58:45.000000000","message":"I understand the concern, but start_method deliberately follows Python’s multiprocessing terminology and the corresponding get_context() / get_start_method() APIs. restart_method controls the launcher behavior on SIGHUP, so although the names are close, they represent established and distinct concepts. I’d prefer to keep start_method consistent with Python’s API.","commit_id":"f402f4eb8ec9e07ccc166c0607e80abec259fe9a"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"acb65ee29e7dcacb30b6abff4489f6de7d07c1be","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    :param graceful_shutdown_timeout: Timeout for graceful shutdown."},{"line_number":94,"context_line":"    :param conf: oslo.config ConfigOpts instance."},{"line_number":95,"context_line":"    :param restart_method: \u0027reload\u0027 or \u0027mutate\u0027 for SIGHUP handling."},{"line_number":96,"context_line":"    :param start_method: multiprocessing start method, ``fork`` or ``spawn``."},{"line_number":97,"context_line":"    :returns: A tuple (manager_context, manager)."},{"line_number":98,"context_line":"    \"\"\""},{"line_number":99,"context_line":"    manager_context \u003d _select_service_manager_context("}],"source_content_type":"text/x-python","patch_set":2,"id":"824144b7_88e5e3ff","line":96,"range":{"start_line":96,"start_character":11,"end_line":96,"end_character":23},"in_reply_to":"d17aabc4_2e1bef1c","updated":"2026-07-30 10:40:41.000000000","message":"indeed, good point, I didn\u0027t noticed that, then, LGTM","commit_id":"f402f4eb8ec9e07ccc166c0607e80abec259fe9a"}],"oslo_service/tests/functional/test_fork_safety_regression.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"3ea7b5630e4854ce2f387223517fc3d54c601bea","unresolved":true,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"def _run_minimal_service_launcher_with_active_thread(status_queue):"},{"line_number":144,"context_line":"    \"\"\"Launch a ServiceLauncher worker while another thread holds a lock."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    The important assertion is that an explicit spawn request is honored. If"},{"line_number":147,"context_line":"    oslo.service regresses to fork, the child process would be created from a"},{"line_number":148,"context_line":"    process with an active background thread. That can inherit locked state"},{"line_number":149,"context_line":"    without the owning thread and is exactly the unsafe pattern this"},{"line_number":150,"context_line":"    functional regression test guards against."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    Cotyledon\u0027s ServiceManager.run() handles signals most reliably from the"},{"line_number":153,"context_line":"    main thread, so a control thread waits for worker markers and stops the"}],"source_content_type":"text/x-python","patch_set":2,"id":"6cb403e5_acbca5e8","line":150,"range":{"start_line":145,"start_character":1,"end_line":150,"end_character":46},"updated":"2026-07-30 13:45:36.000000000","message":"Why do we need this change ?","commit_id":"f402f4eb8ec9e07ccc166c0607e80abec259fe9a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"c9fe163ce251cc0d1ec332daf3b7379e9a5b59c4","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"def _run_minimal_service_launcher_with_active_thread(status_queue):"},{"line_number":144,"context_line":"    \"\"\"Launch a ServiceLauncher worker while another thread holds a lock."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    The important assertion is that an explicit spawn request is honored. If"},{"line_number":147,"context_line":"    oslo.service regresses to fork, the child process would be created from a"},{"line_number":148,"context_line":"    process with an active background thread. That can inherit locked state"},{"line_number":149,"context_line":"    without the owning thread and is exactly the unsafe pattern this"},{"line_number":150,"context_line":"    functional regression test guards against."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    Cotyledon\u0027s ServiceManager.run() handles signals most reliably from the"},{"line_number":153,"context_line":"    main thread, so a control thread waits for worker markers and stops the"}],"source_content_type":"text/x-python","patch_set":2,"id":"222357d2_7b2c2a68","line":150,"range":{"start_line":145,"start_character":1,"end_line":150,"end_character":46},"in_reply_to":"1fe1f570_ab6ae4ff","updated":"2026-07-31 00:24:36.000000000","message":"OK I somehow overlooked the diff in the first line.","commit_id":"f402f4eb8ec9e07ccc166c0607e80abec259fe9a"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"9ffca7c858ba0f8a76c624020a38387ee974f6c8","unresolved":true,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"def _run_minimal_service_launcher_with_active_thread(status_queue):"},{"line_number":144,"context_line":"    \"\"\"Launch a ServiceLauncher worker while another thread holds a lock."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    The important assertion is that an explicit spawn request is honored. If"},{"line_number":147,"context_line":"    oslo.service regresses to fork, the child process would be created from a"},{"line_number":148,"context_line":"    process with an active background thread. That can inherit locked state"},{"line_number":149,"context_line":"    without the owning thread and is exactly the unsafe pattern this"},{"line_number":150,"context_line":"    functional regression test guards against."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    Cotyledon\u0027s ServiceManager.run() handles signals most reliably from the"},{"line_number":153,"context_line":"    main thread, so a control thread waits for worker markers and stops the"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fe1f570_ab6ae4ff","line":150,"range":{"start_line":145,"start_character":1,"end_line":150,"end_character":46},"in_reply_to":"6cb403e5_acbca5e8","updated":"2026-07-31 00:08:20.000000000","message":"This only updates the test documentation to match its new semantics. ServiceLauncher now keeps fork as the default, while this regression test explicitly requests spawn. The previous wording incorrectly implied that the launcher selected spawn by default.","commit_id":"f402f4eb8ec9e07ccc166c0607e80abec259fe9a"}]}
