)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"d67350aaf8077a5746db37d117ff71f3d3801bfa","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Ensure spawn pool workers have logging configured"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Spawn workers start as fresh interpreter processes and do not inherit the"},{"line_number":10,"context_line":"parent configuration or logging setup. This can lose log records and gives"},{"line_number":11,"context_line":"periodic tasks configuration state that differs from the parent."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"79f1e80d_bee99c4e","line":9,"updated":"2026-08-06 17:05:09.000000000","message":"(nit) please wrap lines at 72 characters https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"63887b5047f62164c94fc5e269386cfd9d7e8b20"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0f79e5ffe56707c7ed4165bdcd8b141544da10e2","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Ensure spawn pool workers have logging configured"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Spawn workers start as fresh interpreter processes and do not inherit the"},{"line_number":10,"context_line":"parent configuration or logging setup. This can lose log records and gives"},{"line_number":11,"context_line":"periodic tasks configuration state that differs from the parent."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"ce25d6b1_1cbe2dc2","line":9,"in_reply_to":"0ccfbc09_9ce29955","updated":"2026-08-13 03:59:04.000000000","message":"I don\u0027t think this is addressed. The 7th line has 77 characters. I don\u0027t know what\u0027s done really.","commit_id":"63887b5047f62164c94fc5e269386cfd9d7e8b20"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"2b0d3712abe81677fde12bbc94d1396220f4e105","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Ensure spawn pool workers have logging configured"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Spawn workers start as fresh interpreter processes and do not inherit the"},{"line_number":10,"context_line":"parent configuration or logging setup. This can lose log records and gives"},{"line_number":11,"context_line":"periodic tasks configuration state that differs from the parent."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"0ccfbc09_9ce29955","line":9,"in_reply_to":"79f1e80d_bee99c4e","updated":"2026-08-07 20:27:44.000000000","message":"Done","commit_id":"63887b5047f62164c94fc5e269386cfd9d7e8b20"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"d67350aaf8077a5746db37d117ff71f3d3801bfa","unresolved":true,"context_lines":[{"line_number":18,"context_line":"repeated ConfigOpts deserialization through both initializer arguments and the"},{"line_number":19,"context_line":"PeriodicTasks task payload."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Depends-On: https://review.opendev.org/c/openstack/requirements/+/997527"},{"line_number":22,"context_line":"Co-authored-by: Daniel Bengtsson \u003cdbengt@redhat.com\u003e"},{"line_number":23,"context_line":"Signed-off-by: Pavlo Kostianov \u003cpkostian@redhat.com\u003e"},{"line_number":24,"context_line":"Signed-off-by: Daniel Bengtsson \u003cdbengt@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"773a8850_7517a0b4","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":72},"updated":"2026-08-06 17:05:09.000000000","message":"Please bump minversion of oslo.config then","commit_id":"63887b5047f62164c94fc5e269386cfd9d7e8b20"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"2b0d3712abe81677fde12bbc94d1396220f4e105","unresolved":false,"context_lines":[{"line_number":18,"context_line":"repeated ConfigOpts deserialization through both initializer arguments and the"},{"line_number":19,"context_line":"PeriodicTasks task payload."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Depends-On: https://review.opendev.org/c/openstack/requirements/+/997527"},{"line_number":22,"context_line":"Co-authored-by: Daniel Bengtsson \u003cdbengt@redhat.com\u003e"},{"line_number":23,"context_line":"Signed-off-by: Pavlo Kostianov \u003cpkostian@redhat.com\u003e"},{"line_number":24,"context_line":"Signed-off-by: Daniel Bengtsson \u003cdbengt@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"33004f7e_e162082a","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":72},"in_reply_to":"773a8850_7517a0b4","updated":"2026-08-07 20:27:44.000000000","message":"Done","commit_id":"63887b5047f62164c94fc5e269386cfd9d7e8b20"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":38752,"name":"Pavlo Kostianov","email":"pkostian@redhat.com","username":"pkostian"},"change_message_id":"c4f006d950c4eb2a0e573cdec9b20a6015ffb56a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"89e4ba67_67b4b819","updated":"2026-04-02 10:46:42.000000000","message":"recheck","commit_id":"fdfe2b2737861868431f97010e009f2a582ddc28"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"ada721e0b322b1588fd24f6836f6ef7a67edcc37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c9aff3e9_cc745b67","updated":"2026-04-02 15:24:52.000000000","message":"recheck","commit_id":"fdfe2b2737861868431f97010e009f2a582ddc28"},{"author":{"_account_id":38752,"name":"Pavlo Kostianov","email":"pkostian@redhat.com","username":"pkostian"},"change_message_id":"66ac0885231c2562013c49fda0cc1a7235efc382","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"dd714b97_ae7a0ed5","updated":"2026-04-13 07:57:47.000000000","message":"recheck","commit_id":"fdfe2b2737861868431f97010e009f2a582ddc28"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"20f6e8e0ba44702af770e77a599a3dda5968f98b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4f7dfe59_e68dcb31","updated":"2026-06-04 15:19:30.000000000","message":"LGTM, thanks Daniel","commit_id":"8f3787c39dc92b0dfd7108c90f60b4a2dd62416e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"3ed9d028a789785f43daa65a5eebeb78b263b52c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c889b155_b362ff37","updated":"2026-06-04 17:45:12.000000000","message":"almost lgtm but we are adding the non-test code in test-only file","commit_id":"8f3787c39dc92b0dfd7108c90f60b4a2dd62416e"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"6efb30ef07dfa0d314265f983c113a4778bb718d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"110bf167_d94a3121","updated":"2026-06-09 17:29:54.000000000","message":"recheck","commit_id":"0d9234d5a41cf95e5f9d196e57291b6af8478e30"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0b9e8803edca96108ece1dfbfc260b7883b76226","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"99887768_12158298","updated":"2026-06-11 17:41:28.000000000","message":"this lgtm, but let\u0027s make it utils file more common for future addition of all util function.","commit_id":"0d9234d5a41cf95e5f9d196e57291b6af8478e30"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"d930acd13f496e8ede9bd1490076afcd456b828b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"cf0d8b55_0492ed5f","updated":"2026-06-14 15:36:12.000000000","message":"recheck","commit_id":"0f3d78595b403929f9c8dcb217b5ac3f9acdb6f9"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"1733c96dd4240f907b087855f0821a5aeadcaa60","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"45793126_a088528c","updated":"2026-06-17 12:30:33.000000000","message":"Posting -1 again due to the remaining concern about config file loading","commit_id":"842b6df46e6460696f6d02eeb3d548cb87bc8804"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"5144b61ef7edb3c600db66ed24270a80d890b9f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"4974b429_03c2df11","updated":"2026-06-18 14:47:36.000000000","message":"LGTM","commit_id":"ee8cb764c2a0a56c612a6abcf64a43d9ab7b4f69"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"fc71d1526e3de41de276e1c0dd690e19847ba427","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"2ef21d23_d7ae649f","updated":"2026-07-20 14:06:59.000000000","message":"recheck","commit_id":"7854428e604997e40b75aa0f236f4ff833df7801"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"6a56212863fe056133c78d22444499a35d45487d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"82117d86_37997238","updated":"2026-07-28 10:15:34.000000000","message":"recheck","commit_id":"7854428e604997e40b75aa0f236f4ff833df7801"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"c7095d69948dd510415b605f3ad5d5af6eaa69c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"509223f4_395890a9","updated":"2026-08-03 13:11:11.000000000","message":"recheck","commit_id":"1e11ec6afc1c82e98dfed68f2e68b23420079218"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5f35c9cc59ea98c8c184519ad16fb77ae89ba937","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"ab1496ce_42db435b","updated":"2026-07-31 19:35:32.000000000","message":"recheck","commit_id":"1e11ec6afc1c82e98dfed68f2e68b23420079218"},{"author":{"_account_id":38732,"name":"Dustin Schoenbrun","display_name":"Dustin Schoenbrun","email":"duschoen@redhat.com","username":"duschoen"},"change_message_id":"22b0e1cfa3d735d9890b99e96708edc62307dc54","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"85fffa88_45225a1e","updated":"2026-08-07 21:31:18.000000000","message":"Looks good to me!","commit_id":"ba54da8770187928bf713fd2b1ac4ecb1f3e7659"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"acfe7df76d66e88c7e0d212acce1305210ad57a1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"5a204385_c40b6046","updated":"2026-08-17 13:37:34.000000000","message":"recheck","commit_id":"9deda1f0bef8bd809ab049c41e55a3eb23f34f42"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"c9dbf13e8400cc482426a077538af6738b13b256","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"661042d9_e52251ad","updated":"2026-08-14 09:42:28.000000000","message":"recheck","commit_id":"9deda1f0bef8bd809ab049c41e55a3eb23f34f42"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"28b02b3b529e3dfe1437fece325ad4042110622c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"ec0e3b8d_5f15f8ee","updated":"2026-08-17 10:07:24.000000000","message":"recheck","commit_id":"9deda1f0bef8bd809ab049c41e55a3eb23f34f42"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"224773a7f5aa488e7593c3d9bfe1c487a32d050e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"03d4a201_68e2217a","updated":"2026-08-17 22:34:56.000000000","message":"recheck","commit_id":"2b82687f3bbf625ac19675a3f8ab3bf9f49259d0"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"8e3f7eff0b1f0a6c6e6ac4cd0cf65210151257b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"14457cd2_0135a715","updated":"2026-08-18 11:40:47.000000000","message":"recheck","commit_id":"2b82687f3bbf625ac19675a3f8ab3bf9f49259d0"}],"oslo_service/_fork_safety_workers.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"3ed9d028a789785f43daa65a5eebeb78b263b52c","unresolved":true,"context_lines":[{"line_number":39,"context_line":"    return x * 2"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def configure_worker_oslo_logging(config_files, project\u003d\u0027oslo.service\u0027):"},{"line_number":43,"context_line":"    \"\"\"Pool initializer: configure oslo_log in a spawn worker."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    ``oslo.config.cfg.ConfigOpts`` is not picklable (it contains lambdas),"}],"source_content_type":"text/x-python","patch_set":2,"id":"cbe8d8ec_72c722b7","line":42,"range":{"start_line":42,"start_character":3,"end_line":42,"end_character":33},"updated":"2026-06-04 17:45:12.000000000","message":"this is not just test function but used in oslo_service/periodic_task.py and this file is mentioned as test file @L15, We should move this function to oslo_service/periodic_task.py itself or create a new file utils under oslo_service/","commit_id":"8f3787c39dc92b0dfd7108c90f60b4a2dd62416e"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"b67ec82d42d741b11b23c8f8f3d27f8f8d11c984","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    return x * 2"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def configure_worker_oslo_logging(config_files, project\u003d\u0027oslo.service\u0027):"},{"line_number":43,"context_line":"    \"\"\"Pool initializer: configure oslo_log in a spawn worker."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    ``oslo.config.cfg.ConfigOpts`` is not picklable (it contains lambdas),"}],"source_content_type":"text/x-python","patch_set":2,"id":"6637e44d_a0b6ba80","line":42,"range":{"start_line":42,"start_character":3,"end_line":42,"end_character":33},"in_reply_to":"cbe8d8ec_72c722b7","updated":"2026-06-04 19:34:31.000000000","message":"Done","commit_id":"8f3787c39dc92b0dfd7108c90f60b4a2dd62416e"}],"oslo_service/_spawn_utils.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0b9e8803edca96108ece1dfbfc260b7883b76226","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"e8e2a469_17eb4873","updated":"2026-06-11 17:41:28.000000000","message":"I will suggest to name it utils.py so that we can add other non-spawn common util function also.","commit_id":"0d9234d5a41cf95e5f9d196e57291b6af8478e30"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"23091bbf0c62c543d6ecfd43a7cf19cb18b2c34a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"c0e35618_269c49f6","in_reply_to":"3aacde1d_15cfdf5d","updated":"2026-06-12 16:39:37.000000000","message":"Sure, thanks, it works fine for me.","commit_id":"0d9234d5a41cf95e5f9d196e57291b6af8478e30"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5de3f8eede4dd36f5c4d92e276af029690781062","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3aacde1d_15cfdf5d","in_reply_to":"e8e2a469_17eb4873","updated":"2026-06-12 12:48:23.000000000","message":"Thanks a lot. I named it _spawn_utils.py because the current helper is spawn-specific. I would prefer to keep it scoped for now to avoid creating a broad utils module too early. If we later add more generic helpers, we can introduce a wider utility module then.","commit_id":"0d9234d5a41cf95e5f9d196e57291b6af8478e30"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"4ba6df5eb340b7e07bb2b8e9ace9fd48806fa49c","unresolved":true,"context_lines":[{"line_number":15,"context_line":"\"\"\"Utilities for spawn-based worker processes.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def configure_worker_oslo_logging(config_files, project\u003d\u0027oslo.service\u0027):"},{"line_number":19,"context_line":"    \"\"\"Pool initializer: configure oslo_log in a spawn worker."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    ``oslo.config.cfg.ConfigOpts`` is not picklable (it contains lambdas),"}],"source_content_type":"text/x-python","patch_set":7,"id":"2056a816_c22f6ff6","line":18,"range":{"start_line":18,"start_character":48,"end_line":18,"end_character":70},"updated":"2026-06-16 16:47:32.000000000","message":"This results in creating a logger instance with different project/product_name and breaks at least json log formater. We should use the value which is passed down in the parent process, in logging.setup call.\n\nexample: https://github.com/openstack/nova/blob/3ac36dbfd1f3ac00c17ce8dbb4ae97ab120e153e/nova/cmd/compute.py#L48","commit_id":"dabb8618752b160d66b4cef23110a5b7f92fd7d5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"35e556dc86ea515fc35c28086fb2d0214d007e8c","unresolved":true,"context_lines":[{"line_number":15,"context_line":"\"\"\"Utilities for spawn-based worker processes.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def configure_worker_oslo_logging(config_files, project\u003d\u0027oslo.service\u0027):"},{"line_number":19,"context_line":"    \"\"\"Pool initializer: configure oslo_log in a spawn worker."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    ``oslo.config.cfg.ConfigOpts`` is not picklable (it contains lambdas),"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f209875_b89cdec5","line":18,"range":{"start_line":18,"start_character":48,"end_line":18,"end_character":70},"in_reply_to":"2056a816_c22f6ff6","updated":"2026-06-16 16:58:26.000000000","message":"\u003e breaks at least json log formater.\n\nI noticed this isn\u0027t correct and the project argument is used when json format is NOT used...\n\nhttps://github.com/openstack/oslo.log/blob/692ec8617a5d23dc36c592e31367e46e04c7ce8f/oslo_log/log.py#L519","commit_id":"dabb8618752b160d66b4cef23110a5b7f92fd7d5"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"0681e3a50aeaf4438ca86bff0562550bb2809025","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Utilities for spawn-based worker processes.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def configure_worker_oslo_logging(config_files, project\u003d\u0027oslo.service\u0027):"},{"line_number":19,"context_line":"    \"\"\"Pool initializer: configure oslo_log in a spawn worker."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    ``oslo.config.cfg.ConfigOpts`` is not picklable (it contains lambdas),"}],"source_content_type":"text/x-python","patch_set":7,"id":"07ec57a3_79cd3abd","line":18,"range":{"start_line":18,"start_character":48,"end_line":18,"end_character":70},"in_reply_to":"7f209875_b89cdec5","updated":"2026-06-17 10:55:39.000000000","message":"Done","commit_id":"dabb8618752b160d66b4cef23110a5b7f92fd7d5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"4ba6df5eb340b7e07bb2b8e9ace9fd48806fa49c","unresolved":true,"context_lines":[{"line_number":28,"context_line":"    ``init_args`` when calling"},{"line_number":29,"context_line":"    :func:`~oslo_service._multiprocessing.get_spawn_pool`."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    ``fix_eventlet\u003dFalse`` is passed because spawn workers are fresh"},{"line_number":32,"context_line":"    interpreter processes with no eventlet monkey-patching."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    :param config_files: List of config file paths from the parent\u0027s"}],"source_content_type":"text/x-python","patch_set":7,"id":"88afcfcc_cf7f5723","line":31,"range":{"start_line":31,"start_character":6,"end_line":31,"end_character":18},"updated":"2026-06-16 16:47:32.000000000","message":"This does not exist.","commit_id":"dabb8618752b160d66b4cef23110a5b7f92fd7d5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"4c19fce8ff038506c92c99649512bab2f9440a88","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    ``init_args`` when calling"},{"line_number":29,"context_line":"    :func:`~oslo_service._multiprocessing.get_spawn_pool`."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    ``fix_eventlet\u003dFalse`` is passed because spawn workers are fresh"},{"line_number":32,"context_line":"    interpreter processes with no eventlet monkey-patching."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    :param config_files: List of config file paths from the parent\u0027s"}],"source_content_type":"text/x-python","patch_set":7,"id":"f41044a5_bebe4035","line":31,"range":{"start_line":31,"start_character":6,"end_line":31,"end_character":18},"in_reply_to":"88afcfcc_cf7f5723","updated":"2026-06-16 16:48:25.000000000","message":"Ignore this. I noticed this explains the internal logic.","commit_id":"dabb8618752b160d66b4cef23110a5b7f92fd7d5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"4ba6df5eb340b7e07bb2b8e9ace9fd48806fa49c","unresolved":true,"context_lines":[{"line_number":32,"context_line":"    interpreter processes with no eventlet monkey-patching."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    :param config_files: List of config file paths from the parent\u0027s"},{"line_number":35,"context_line":"                         ``conf.config_file``. Passing an empty list"},{"line_number":36,"context_line":"                         makes oslo_log fall back to its defaults."},{"line_number":37,"context_line":"    :param project: Product name forwarded to ``oslo_log.log.setup``"},{"line_number":38,"context_line":"                    (used in log formatting). Defaults to ``\u0027oslo.service\u0027``."},{"line_number":39,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3568434f_965666b4","line":36,"range":{"start_line":35,"start_character":47,"end_line":36,"end_character":66},"updated":"2026-06-16 16:47:32.000000000","message":"This indicates actual problem. IMHO we should not silently fallback in this case.","commit_id":"dabb8618752b160d66b4cef23110a5b7f92fd7d5"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"0681e3a50aeaf4438ca86bff0562550bb2809025","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    interpreter processes with no eventlet monkey-patching."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    :param config_files: List of config file paths from the parent\u0027s"},{"line_number":35,"context_line":"                         ``conf.config_file``. Passing an empty list"},{"line_number":36,"context_line":"                         makes oslo_log fall back to its defaults."},{"line_number":37,"context_line":"    :param project: Product name forwarded to ``oslo_log.log.setup``"},{"line_number":38,"context_line":"                    (used in log formatting). Defaults to ``\u0027oslo.service\u0027``."},{"line_number":39,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"82fafbf8_6231a05f","line":36,"range":{"start_line":35,"start_character":47,"end_line":36,"end_character":66},"in_reply_to":"3568434f_965666b4","updated":"2026-06-17 10:55:39.000000000","message":"Done","commit_id":"dabb8618752b160d66b4cef23110a5b7f92fd7d5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"600b882705eaef9e0ac778475670701639937192","unresolved":true,"context_lines":[{"line_number":20,"context_line":"from oslo_log import log as oslo_log"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"_OSLO_LOG_OPTION_NAMES \u003d ("},{"line_number":24,"context_line":"    \u0027debug\u0027,"},{"line_number":25,"context_line":"    \u0027log_config_append\u0027,"},{"line_number":26,"context_line":"    \u0027log_date_format\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"dacfe49e_765576bf","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":22},"updated":"2026-06-18 11:05:16.000000000","message":"I\u0027m against hard-coding these within oslo.service because it causes large pain in case we add/remove/rename any existing options in oslo.log. We should rather add an appropriate interface in oslo.log to get these, though I still believe fixing the picklability of CONF instance is the right approach and is anyway needed by multiple services.","commit_id":"de6725cb2fb8bce9e9f1d4800264eb009f157aaa"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"cd71a013b47a02796a6f3a710aa8880019a71dc4","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_log import log as oslo_log"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"_OSLO_LOG_OPTION_NAMES \u003d ("},{"line_number":24,"context_line":"    \u0027debug\u0027,"},{"line_number":25,"context_line":"    \u0027log_config_append\u0027,"},{"line_number":26,"context_line":"    \u0027log_date_format\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"e6778be0_733bab07","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":22},"in_reply_to":"dacfe49e_765576bf","updated":"2026-06-18 11:58:15.000000000","message":"Done","commit_id":"de6725cb2fb8bce9e9f1d4800264eb009f157aaa"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"37b67e97a5f220a41409ad9bfd78ac9d460b87f5","unresolved":true,"context_lines":[{"line_number":87,"context_line":"):"},{"line_number":88,"context_line":"    \"\"\"Pool initializer: configure oslo_log in a spawn worker."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    ``oslo.config.cfg.ConfigOpts`` is not picklable (it contains lambdas),"},{"line_number":91,"context_line":"    so the parent passes only the effective oslo.log option values - a plain"},{"line_number":92,"context_line":"    list of tuples - as ``init_args``. Each worker then creates its own"},{"line_number":93,"context_line":"    ``cfg.ConfigOpts``, registers oslo_log options, and applies the parent\u0027s"}],"source_content_type":"text/x-python","patch_set":12,"id":"3e809091_19ac6b52","line":90,"range":{"start_line":90,"start_character":42,"end_line":90,"end_character":51},"updated":"2026-06-24 15:38:05.000000000","message":"As I mentioned earlier this sounds like a large blocker for the whole threading context change, because conf is quite usually expected to be shared among workers. This is the primary reason why we saw problems with services like neutron when we merged the initial oslo.change which implemented forceful migration.\n\nIf there is any working use case of this and we urgently need to fix logging in that case then I won\u0027t block this change (other cores can merge this if they think this is ready), although again I believe we should fix this root problem so that the fork context can be adopted in services, and then we may not carry this hack beyond that point.","commit_id":"ee8cb764c2a0a56c612a6abcf64a43d9ab7b4f69"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"28edff899046af3b204c8095c29fc4b8712e9c48","unresolved":false,"context_lines":[{"line_number":87,"context_line":"):"},{"line_number":88,"context_line":"    \"\"\"Pool initializer: configure oslo_log in a spawn worker."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    ``oslo.config.cfg.ConfigOpts`` is not picklable (it contains lambdas),"},{"line_number":91,"context_line":"    so the parent passes only the effective oslo.log option values - a plain"},{"line_number":92,"context_line":"    list of tuples - as ``init_args``. Each worker then creates its own"},{"line_number":93,"context_line":"    ``cfg.ConfigOpts``, registers oslo_log options, and applies the parent\u0027s"}],"source_content_type":"text/x-python","patch_set":12,"id":"ed8766fa_b0b3fe48","line":90,"range":{"start_line":90,"start_character":42,"end_line":90,"end_character":51},"in_reply_to":"2ff81067_8d6d221e","updated":"2026-07-14 09:55:20.000000000","message":"Done","commit_id":"ee8cb764c2a0a56c612a6abcf64a43d9ab7b4f69"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"6304953bb75be96c2650362c7d8e7e5cbae83353","unresolved":true,"context_lines":[{"line_number":87,"context_line":"):"},{"line_number":88,"context_line":"    \"\"\"Pool initializer: configure oslo_log in a spawn worker."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    ``oslo.config.cfg.ConfigOpts`` is not picklable (it contains lambdas),"},{"line_number":91,"context_line":"    so the parent passes only the effective oslo.log option values - a plain"},{"line_number":92,"context_line":"    list of tuples - as ``init_args``. Each worker then creates its own"},{"line_number":93,"context_line":"    ``cfg.ConfigOpts``, registers oslo_log options, and applies the parent\u0027s"}],"source_content_type":"text/x-python","patch_set":12,"id":"2ff81067_8d6d221e","line":90,"range":{"start_line":90,"start_character":42,"end_line":90,"end_character":51},"in_reply_to":"3e809091_19ac6b52","updated":"2026-06-26 15:11:52.000000000","message":"Thanks a lot for the detailed explanation. I agree that the underlying issue is broader than logging and that solving ConfigOpts support for spawn workers would be the better long-term approach.\n\nBased on your feedback, I spent some time investigating the root problem in oslo.config and put together an initial prototype here:\n\nhttps://review.opendev.org/c/openstack/oslo.config/+/995080\n\nThe idea is to allow ConfigOpts state to be transferred to spawn workers while preserving registered options, defaults, overrides, and parsed configuration state, instead of only solving the logging use case.\n\nFor this oslo.service change, my goal was to keep the scope limited to restoring logging in parallel periodic task workers until a more general solution becomes available.\n\nI\u0027d really appreciate your feedback on the oslo.config approach and whether you think this is heading in the right direction.","commit_id":"ee8cb764c2a0a56c612a6abcf64a43d9ab7b4f69"}],"oslo_service/periodic_task.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"4ba6df5eb340b7e07bb2b8e9ace9fd48806fa49c","unresolved":true,"context_lines":[{"line_number":339,"context_line":"        for full_task_name, task_name, task, next_run in due_tasks:"},{"line_number":340,"context_line":"            self._periodic_last_run[task_name] \u003d next_run"},{"line_number":341,"context_line":"        try:"},{"line_number":342,"context_line":"            config_files \u003d list(self.conf.config_file)"},{"line_number":343,"context_line":"        except Exception:"},{"line_number":344,"context_line":"            config_files \u003d []"},{"line_number":345,"context_line":"        pool \u003d _multiprocessing.get_spawn_pool("}],"source_content_type":"text/x-python","patch_set":7,"id":"4b09e1e6_ab23f887","line":342,"range":{"start_line":342,"start_character":42,"end_line":342,"end_character":53},"updated":"2026-06-16 16:47:32.000000000","message":"Does this ever work? I don\u0027t see any config_file argument in ConfigOpts class, IIUC.","commit_id":"dabb8618752b160d66b4cef23110a5b7f92fd7d5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9efa937fe59c7d86f3228cdf31afae278565fcc9","unresolved":true,"context_lines":[{"line_number":339,"context_line":"        for full_task_name, task_name, task, next_run in due_tasks:"},{"line_number":340,"context_line":"            self._periodic_last_run[task_name] \u003d next_run"},{"line_number":341,"context_line":"        try:"},{"line_number":342,"context_line":"            config_files \u003d list(self.conf.config_file)"},{"line_number":343,"context_line":"        except Exception:"},{"line_number":344,"context_line":"            config_files \u003d []"},{"line_number":345,"context_line":"        pool \u003d _multiprocessing.get_spawn_pool("}],"source_content_type":"text/x-python","patch_set":7,"id":"c0d11b1d_ef4de481","line":342,"range":{"start_line":342,"start_character":42,"end_line":342,"end_character":53},"in_reply_to":"3b3d3c8f_85f9b825","updated":"2026-06-17 13:44:54.000000000","message":"One more thing we should be careful about is that this may not properly pick up defaults overridden by set_default due to usage of an independent instance.","commit_id":"dabb8618752b160d66b4cef23110a5b7f92fd7d5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"39c495ab24f1b4c30696dc895b2d5011001d2b0a","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        for full_task_name, task_name, task, next_run in due_tasks:"},{"line_number":340,"context_line":"            self._periodic_last_run[task_name] \u003d next_run"},{"line_number":341,"context_line":"        try:"},{"line_number":342,"context_line":"            config_files \u003d list(self.conf.config_file)"},{"line_number":343,"context_line":"        except Exception:"},{"line_number":344,"context_line":"            config_files \u003d []"},{"line_number":345,"context_line":"        pool \u003d _multiprocessing.get_spawn_pool("}],"source_content_type":"text/x-python","patch_set":7,"id":"72e6bce9_c853fcb5","line":342,"range":{"start_line":342,"start_character":42,"end_line":342,"end_character":53},"in_reply_to":"4b09e1e6_ab23f887","updated":"2026-06-16 16:53:22.000000000","message":"Ignore this now, too.","commit_id":"dabb8618752b160d66b4cef23110a5b7f92fd7d5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"f00147331c387598f65f596ea29a691b4614f23f","unresolved":true,"context_lines":[{"line_number":339,"context_line":"        for full_task_name, task_name, task, next_run in due_tasks:"},{"line_number":340,"context_line":"            self._periodic_last_run[task_name] \u003d next_run"},{"line_number":341,"context_line":"        try:"},{"line_number":342,"context_line":"            config_files \u003d list(self.conf.config_file)"},{"line_number":343,"context_line":"        except Exception:"},{"line_number":344,"context_line":"            config_files \u003d []"},{"line_number":345,"context_line":"        pool \u003d _multiprocessing.get_spawn_pool("}],"source_content_type":"text/x-python","patch_set":7,"id":"3b3d3c8f_85f9b825","line":342,"range":{"start_line":342,"start_character":42,"end_line":342,"end_character":53},"in_reply_to":"72e6bce9_c853fcb5","updated":"2026-06-16 17:04:00.000000000","message":"OK I noticed this comes from --config-file argument. Sorry for the noise.\n\nHowever I\u0027m unsure if this works with config files which are implicitly loaded by default (for example files in /etc/nova.conf.d ) and I suspect only the files explicitly passed by --config-file argument may e picked up. We should actually find out the files which are automatically detected by oslo.config.","commit_id":"dabb8618752b160d66b4cef23110a5b7f92fd7d5"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"085fa36403816bd3d3eb5c7db2796448e64c5ce9","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        for full_task_name, task_name, task, next_run in due_tasks:"},{"line_number":340,"context_line":"            self._periodic_last_run[task_name] \u003d next_run"},{"line_number":341,"context_line":"        try:"},{"line_number":342,"context_line":"            config_files \u003d list(self.conf.config_file)"},{"line_number":343,"context_line":"        except Exception:"},{"line_number":344,"context_line":"            config_files \u003d []"},{"line_number":345,"context_line":"        pool \u003d _multiprocessing.get_spawn_pool("}],"source_content_type":"text/x-python","patch_set":7,"id":"c87ea7bc_fd4eb334","line":342,"range":{"start_line":342,"start_character":42,"end_line":342,"end_character":53},"in_reply_to":"c0d11b1d_ef4de481","updated":"2026-06-18 11:00:33.000000000","message":"Done","commit_id":"dabb8618752b160d66b4cef23110a5b7f92fd7d5"}],"oslo_service/tests/test_periodic.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"d67350aaf8077a5746db37d117ff71f3d3801bfa","unresolved":true,"context_lines":[{"line_number":544,"context_line":"        manager \u003d _ConfigStateManager(self.conf)"},{"line_number":545,"context_line":"        process \u003d _multiprocessing.get_spawn_context().Process("},{"line_number":546,"context_line":"            target\u003d_verify_serialized_config_state,"},{"line_number":547,"context_line":"            args\u003d(pickle.dumps(self.conf), pickle.dumps(manager)),"},{"line_number":548,"context_line":"        )"},{"line_number":549,"context_line":"        process.start()"},{"line_number":550,"context_line":"        process.join(10)"}],"source_content_type":"text/x-python","patch_set":16,"id":"eec01a9f_5bd43a98","line":547,"range":{"start_line":547,"start_character":18,"end_line":547,"end_character":30},"updated":"2026-08-06 17:05:09.000000000","message":"Why do we need this pickle handling here, assuming you are trying to verify the actual behavior within a process ?","commit_id":"63887b5047f62164c94fc5e269386cfd9d7e8b20"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"2b0d3712abe81677fde12bbc94d1396220f4e105","unresolved":false,"context_lines":[{"line_number":544,"context_line":"        manager \u003d _ConfigStateManager(self.conf)"},{"line_number":545,"context_line":"        process \u003d _multiprocessing.get_spawn_context().Process("},{"line_number":546,"context_line":"            target\u003d_verify_serialized_config_state,"},{"line_number":547,"context_line":"            args\u003d(pickle.dumps(self.conf), pickle.dumps(manager)),"},{"line_number":548,"context_line":"        )"},{"line_number":549,"context_line":"        process.start()"},{"line_number":550,"context_line":"        process.join(10)"}],"source_content_type":"text/x-python","patch_set":16,"id":"f8035b08_f733dda8","line":547,"range":{"start_line":547,"start_character":18,"end_line":547,"end_character":30},"in_reply_to":"eec01a9f_5bd43a98","updated":"2026-08-07 20:27:44.000000000","message":"Done","commit_id":"63887b5047f62164c94fc5e269386cfd9d7e8b20"}]}
