)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b090cf66fffbfef005409d6134e74d3587fdbf97","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"cb8ffa02_216b7ed1","updated":"2026-02-05 04:52:50.000000000","message":"I finished my testing and it is working as expected. It will be used like: https://review.opendev.org/c/openstack/nova/+/975586/2/nova/conf/base.py#27\n\n\nTested in https://review.opendev.org/c/openstack/nova/+/975739\n\n- Nova can get the new default 180 sec\nFeb 05 04:24:34.855972 npe42c988d92654 nova-compute[53466]: DEBUG oslo_service.backend._eventlet.service [None req-4a0bd689-fede-4b57-8b57-171189a1c771 None None] graceful_shutdown_timeout \u003d 180 {{(pid\u003d53466) log_opt_values /opt/stack/data/venv/lib/python3.11/site-packages/oslo_config/cfg.py:2817}}\n\n- https://zuul.opendev.org/t/openstack/build/fe500ba3f9a44c9281229b86e969b420/log/compute1/logs/screen-n-cpu.txt#51","commit_id":"7f3bba9262566f70830c6f940ae8dcc562abb18f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d34fb52efff1d0ca04b1e30c41f6d63b2c6053d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"550021c8_f3356124","updated":"2026-02-05 13:13:56.000000000","message":"I have one question and a nit","commit_id":"7f3bba9262566f70830c6f940ae8dcc562abb18f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"47ede44ab5c4a71d7e2c9ab7d452eac05780d904","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d2844f5b_0f0c1e26","updated":"2026-02-03 20:48:41.000000000","message":"I will be testing it with nova change and update the result","commit_id":"7f3bba9262566f70830c6f940ae8dcc562abb18f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"40721af7559d0c77da96e691b88ff0bb4c21f0d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"fdf98fa7_d2fd55bc","updated":"2026-02-05 21:12:30.000000000","message":"recheck \n\nFailure is not related to this change. it seems some existing tests are facing ServiceManager singleton voilation. let me fix that as a separate change\n\n  File \"/home/zuul/src/opendev.org/openstack/oslo.service/.tox/py310/lib/python3.10/site-packages/cotyledon/_service_manager.py\", line 151, in __init__\n    raise RuntimeError(msg)\nRuntimeError: Only one instance of ServiceManager per application is allowed","commit_id":"a0aaac4ceb17edd2f24684bb53a9d0d41c2085a4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"cda4498ffc40176b5e3bd962d8e7180e83489a51","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5882b38d_829906ab","in_reply_to":"fdf98fa7_d2fd55bc","updated":"2026-02-05 21:17:08.000000000","message":"fixing here https://review.opendev.org/c/openstack/oslo.service/+/975863","commit_id":"a0aaac4ceb17edd2f24684bb53a9d0d41c2085a4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"2cf477b361d8064259e80eccce311eefe278278a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"8da264dd_0eb85b36","updated":"2026-02-11 15:47:11.000000000","message":"recheck gate should be ok now","commit_id":"7c457ffdd80e909f4f3c0875fdcb983c92d6d624"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8d6a4853a92b71b6e87b1ffd4041c988c5bf742a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7ce4333b_c273f6b4","updated":"2026-02-12 03:53:22.000000000","message":"recheck tempest job is green now https://review.opendev.org/c/openstack/tempest/+/976501","commit_id":"7c457ffdd80e909f4f3c0875fdcb983c92d6d624"}],"oslo_service/_options.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d34fb52efff1d0ca04b1e30c41f6d63b2c6053d0","unresolved":true,"context_lines":[{"line_number":207,"context_line":"    :param kwargs: oslo.service[service_opts] configuration variable and"},{"line_number":208,"context_line":"                   their new default value."},{"line_number":209,"context_line":"    \"\"\""},{"line_number":210,"context_line":"    conf.register_opts(service_opts)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    if kwargs:"},{"line_number":213,"context_line":"        cfg.set_defaults(service_opts, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"d24c3221_ddb9eff1","line":210,"updated":"2026-02-05 13:13:56.000000000","message":"I assume we call this elsewhere to to get the configs registered even if no default override is needed like [1][2]. Is it OK to register the same set of config option a second time if override is neede?\n\n\n[1]https://github.com/openstack/oslo.service/blob/325f30c50b7aa724cde9ca605deb73f387eebf53/oslo_service/backend/_threading/service.py#L205\n[2]https://github.com/openstack/nova/blob/75aed9a19dcf8f26fcb9e84db7a0696acefd56d6/nova/api/openstack/wsgi_app.py#L121","commit_id":"7f3bba9262566f70830c6f940ae8dcc562abb18f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"99fbb330f050afcd31cd61bb9d0b055b097eda2a","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    :param kwargs: oslo.service[service_opts] configuration variable and"},{"line_number":208,"context_line":"                   their new default value."},{"line_number":209,"context_line":"    \"\"\""},{"line_number":210,"context_line":"    conf.register_opts(service_opts)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    if kwargs:"},{"line_number":213,"context_line":"        cfg.set_defaults(service_opts, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6e2b913d_ac768f63","line":210,"in_reply_to":"3f6c588b_78492565","updated":"2026-02-05 19:23:37.000000000","message":"Done","commit_id":"7f3bba9262566f70830c6f940ae8dcc562abb18f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eb392efa5a99b403b09f8cb852c04e321c7787ae","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    :param kwargs: oslo.service[service_opts] configuration variable and"},{"line_number":208,"context_line":"                   their new default value."},{"line_number":209,"context_line":"    \"\"\""},{"line_number":210,"context_line":"    conf.register_opts(service_opts)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    if kwargs:"},{"line_number":213,"context_line":"        cfg.set_defaults(service_opts, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"49a20f4d_49cae072","line":210,"in_reply_to":"6e2b913d_ac768f63","updated":"2026-02-06 10:16:05.000000000","message":"Thanks for checking","commit_id":"7f3bba9262566f70830c6f940ae8dcc562abb18f"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"60948aee1f2ac3799be3e02fb6ac777d71b014ab","unresolved":true,"context_lines":[{"line_number":207,"context_line":"    :param kwargs: oslo.service[service_opts] configuration variable and"},{"line_number":208,"context_line":"                   their new default value."},{"line_number":209,"context_line":"    \"\"\""},{"line_number":210,"context_line":"    conf.register_opts(service_opts)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    if kwargs:"},{"line_number":213,"context_line":"        cfg.set_defaults(service_opts, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"eef34b7c_3176fd41","line":210,"in_reply_to":"d24c3221_ddb9eff1","updated":"2026-02-05 13:59:55.000000000","message":"That\u0027s a good catch... I think your concern is right and we need to have a logic to avoid duplicate registration.","commit_id":"7f3bba9262566f70830c6f940ae8dcc562abb18f"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"4fdc162a3e5eb9147f63b0bfbeb682faf5a59595","unresolved":true,"context_lines":[{"line_number":207,"context_line":"    :param kwargs: oslo.service[service_opts] configuration variable and"},{"line_number":208,"context_line":"                   their new default value."},{"line_number":209,"context_line":"    \"\"\""},{"line_number":210,"context_line":"    conf.register_opts(service_opts)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    if kwargs:"},{"line_number":213,"context_line":"        cfg.set_defaults(service_opts, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"db3c3c86_6615ac18","line":210,"in_reply_to":"eef34b7c_3176fd41","updated":"2026-02-05 14:53:46.000000000","message":"It just reminds me of the fact that registering the identical options twice just works. So I think we should be ok.","commit_id":"7f3bba9262566f70830c6f940ae8dcc562abb18f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"45819dd3ab7a38b81b977455797b8b5245e8663f","unresolved":true,"context_lines":[{"line_number":207,"context_line":"    :param kwargs: oslo.service[service_opts] configuration variable and"},{"line_number":208,"context_line":"                   their new default value."},{"line_number":209,"context_line":"    \"\"\""},{"line_number":210,"context_line":"    conf.register_opts(service_opts)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    if kwargs:"},{"line_number":213,"context_line":"        cfg.set_defaults(service_opts, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f6c588b_78492565","line":210,"in_reply_to":"eef34b7c_3176fd41","updated":"2026-02-05 19:12:20.000000000","message":"Yes, that is not issue as same opt registration is ok. In register_opts, oslo.config check if the register opt is same or not. If same then it just return without re-registering it[1] and only throw DuplicateOptError if they are not[2]. I tested it with all three registering the option for Nova case and because the opt is same in same conf so there will not be any  DuplicateOptError\n- this set defaults method in nova/conf/base.py[3]\n- oslo_service/backend/_threading/service.py\n- nova/api/openstack/wsgi_app.py)\n\nBasically there can be two use cases: \n\n1. When other OpenStack service set their default: \n   If these options are registered in different conf object, then they are always the first time registration for that conf object. So Different service can register and set their default without any issue.\n\n2. Same service register multiple times:\n   Any service registering it on same conf object then, oslo.config check that it same option is already registered so do not error and do not re-register.\n\nThose cases are easy to test in unit test, let me add more test cases.\n\nAlso, add a public common method for registration so that nova hack can be removed.\n\n[1] https://github.com/openstack/oslo.config/blob/1e3e45c6b035993593d718235f3f2d44f9a8bbe5/oslo_config/cfg.py#L2716\n\n[2]https://github.com/openstack/oslo.config/blob/1e3e45c6b035993593d718235f3f2d44f9a8bbe5/oslo_config/cfg.py#L361\n\n[3] https://review.opendev.org/c/openstack/nova/+/975586/2/nova/conf/base.py#27","commit_id":"7f3bba9262566f70830c6f940ae8dcc562abb18f"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"38402bae881d7bbdc4df21e4feecbc0c953eb7dc","unresolved":true,"context_lines":[{"line_number":195,"context_line":"]"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"def register_service_opts(conf: cfg.ConfigOpts,) -\u003e None:"},{"line_number":199,"context_line":"    \"\"\"Register the service opts configuration options."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    :param conf: Configuration object, managed by the caller."}],"source_content_type":"text/x-python","patch_set":3,"id":"f25c4b40_7a4a875b","line":198,"range":{"start_line":198,"start_character":4,"end_line":198,"end_character":25},"updated":"2026-02-06 12:11:20.000000000","message":"Sorry I overlooked this earlier but I noticed that this is part of a private module. Can we create oslo_service.opts and move these two new methods to that \"public\" one ? Alternatively I think we can just move _options.py to options.py to make it public.","commit_id":"a0aaac4ceb17edd2f24684bb53a9d0d41c2085a4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a63e35ea0b1082c7bc1e7dbb369e3ea2ff5427ea","unresolved":false,"context_lines":[{"line_number":195,"context_line":"]"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"def register_service_opts(conf: cfg.ConfigOpts,) -\u003e None:"},{"line_number":199,"context_line":"    \"\"\"Register the service opts configuration options."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    :param conf: Configuration object, managed by the caller."}],"source_content_type":"text/x-python","patch_set":3,"id":"a0d607c3_572d775e","line":198,"range":{"start_line":198,"start_character":4,"end_line":198,"end_character":25},"in_reply_to":"009b2e05_e3fac473","updated":"2026-02-06 18:12:49.000000000","message":"ok, I will add opts and keep _options.py in same way as it has all other options also which are not public one and renaming it will break projects as they are using _options already. But agree that the public method should be in public module. Thanks for highlighting that.","commit_id":"a0aaac4ceb17edd2f24684bb53a9d0d41c2085a4"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70d70a4b18cc54e9b69857b98a601e4f5434a43a","unresolved":true,"context_lines":[{"line_number":195,"context_line":"]"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"def register_service_opts(conf: cfg.ConfigOpts,) -\u003e None:"},{"line_number":199,"context_line":"    \"\"\"Register the service opts configuration options."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    :param conf: Configuration object, managed by the caller."}],"source_content_type":"text/x-python","patch_set":3,"id":"009b2e05_e3fac473","line":198,"range":{"start_line":198,"start_character":4,"end_line":198,"end_character":25},"in_reply_to":"f25c4b40_7a4a875b","updated":"2026-02-06 13:46:46.000000000","message":"I agree with that, otherwise this patch LGTM","commit_id":"a0aaac4ceb17edd2f24684bb53a9d0d41c2085a4"}],"oslo_service/tests/test_options.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d34fb52efff1d0ca04b1e30c41f6d63b2c6053d0","unresolved":true,"context_lines":[{"line_number":32,"context_line":"        self.assertFalse(self.conf.log_options)"},{"line_number":33,"context_line":"        self.assertEqual(120, self.conf.graceful_shutdown_timeout)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_set__defaults_for_single_optoin(self):"},{"line_number":36,"context_line":"        _options.set_service_opts_defaults("},{"line_number":37,"context_line":"            self.conf,"},{"line_number":38,"context_line":"            graceful_shutdown_timeout\u003d30"}],"source_content_type":"text/x-python","patch_set":1,"id":"28447f48_0075a43b","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":44},"updated":"2026-02-05 13:13:56.000000000","message":"nit:option","commit_id":"7f3bba9262566f70830c6f940ae8dcc562abb18f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"99fbb330f050afcd31cd61bb9d0b055b097eda2a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.assertFalse(self.conf.log_options)"},{"line_number":33,"context_line":"        self.assertEqual(120, self.conf.graceful_shutdown_timeout)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_set__defaults_for_single_optoin(self):"},{"line_number":36,"context_line":"        _options.set_service_opts_defaults("},{"line_number":37,"context_line":"            self.conf,"},{"line_number":38,"context_line":"            graceful_shutdown_timeout\u003d30"}],"source_content_type":"text/x-python","patch_set":1,"id":"e747329f_c3647451","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":44},"in_reply_to":"28447f48_0075a43b","updated":"2026-02-05 19:23:37.000000000","message":"Done","commit_id":"7f3bba9262566f70830c6f940ae8dcc562abb18f"}]}
