)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"1a29814a595c3f7089ff1a63312c51aea1304c93","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8decc60d_912dd881","updated":"2026-07-06 13:53:52.000000000","message":"check-rdo","commit_id":"e9d12d8786fe9b3b1acc6428c808759930fd3410"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"e281f45b4b09e9ddbd40319ea09824f4a2b544ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"d74f8dab_42b5522f","updated":"2026-07-03 06:07:58.000000000","message":"recheck","commit_id":"e9d12d8786fe9b3b1acc6428c808759930fd3410"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"9772ffb39b968074114c5b6b9d0e79578bd34b0f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"35d9fde8_a84ac6a1","updated":"2026-08-03 14:43:16.000000000","message":"LGTM, just a question. Do you plan to backport it? if yes, would be good to open a LP bug to track the fix. I don\u0027t think that a release note is needed for this. Otherwise we can merge as is.\nThanks!","commit_id":"6dbf544a7dd740b8d4300a6221ec20e0a1fee33c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"22aff7386a83b62d185688a7edad79d169f9d2dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"056125c3_490934e1","updated":"2026-08-13 16:11:08.000000000","message":"recheck pbr issue","commit_id":"6dbf544a7dd740b8d4300a6221ec20e0a1fee33c"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"d5de3191368739f6204ae53e276b428693c76586","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c00a2e02_d1e279fe","in_reply_to":"35d9fde8_a84ac6a1","updated":"2026-08-03 17:14:09.000000000","message":"I didn\u0027t think in backporting it. Although strictly speaking it may happen, It\u0027s actually pretty rare to hit it out of the functional tests where we run all services in the same process (including applier, api, and decision-engine). That\u0027s why we only found this in functional tests.","commit_id":"6dbf544a7dd740b8d4300a6221ec20e0a1fee33c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9d2d52ec8de3f09439fcb61afd8bd153a7e48906","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"dd814ad2_57a6b07c","in_reply_to":"89c46059_4a15630a","updated":"2026-08-13 13:37:47.000000000","message":"that is also a bug\n\nthe stragies/planner/plugins should all be loaded once up front not lazy loaded\n\nthis is all out os scope of this patch so ill approve for now but we shoudl file a bug to ensure we stop lazy loading and only do this once.","commit_id":"6dbf544a7dd740b8d4300a6221ec20e0a1fee33c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e448806c40cc39e7d3bbe8ffc47e9fee6422706","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e8d71b40_0a869279","in_reply_to":"c00a2e02_d1e279fe","updated":"2026-08-06 13:47:14.000000000","message":"i think there is a larger issue here which is we shoudl not be reloadign this cofnig at all when triggering the audit\n\nconfigs shoudl only be loaded once on startup of the decsion engine and again only if it recieves a sig_hup","commit_id":"6dbf544a7dd740b8d4300a6221ec20e0a1fee33c"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"5b663b994e4a9c543b8e7f4ea74541f2b6e7f596","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"89c46059_4a15630a","in_reply_to":"e8d71b40_0a869279","updated":"2026-08-06 13:55:33.000000000","message":"I think the problem comes from the fact that config options are registered when loading a new plugin, and iirc in some cases that happens when starting a strategy or a planner as they are loade on demand, not when starting the process.\n\nhttps://github.com/openstack/watcher/blob/2b997f0a6b854c5370e0bd927c586b9c3ffa6893/watcher/common/loader/default.py#L71-L72\n\nSo it register new options and reload config.\n\nI didn\u0027t check in detail, but i think getting rid of that reload will require more changes to be done.","commit_id":"6dbf544a7dd740b8d4300a6221ec20e0a1fee33c"}],"watcher/common/loader/default.py":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"f49a90e762b03d6fe6398a4fa78a5661219ae4c0","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return driver"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _reload_config(self):"},{"line_number":59,"context_line":"        self.conf.reload_config_files()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def get_entry_name(self, name):"},{"line_number":62,"context_line":"        return \".\".join([self.namespace, name])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ae69335a_af9ee8ba","line":59,"updated":"2026-06-25 10:24:33.000000000","message":"No test directly verifies _reload_config() delegates to reload_config_files(). The existing suite stubs _parse_cli_opts in setUp, exercising the path only incidentally. A revert to self.conf(...) would not be caught.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: A focused unit test asserting _reload_config delegates to reload_config_files() would lock in the fix and prevent a silent regression that reintroduces the NotInitializedError race in concurrent functional tests.\n\n**Recommendation**:\nAdd a unit test in watcher/tests/unit/common/loader/test_loader.py that patches cfg.CONF.reload_config_files with autospec\u003dTrue, calls loader_manager._reload_config(), and asserts the mock was called once. Optionally assert the method does not invoke ConfigOpts.__call__ (self.conf(...)).","commit_id":"4b6bfeea83f0f9d8ed0e2866e7c5f60dd0e129a0"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"ceb269df562779e76957ae7406e2772b4aa857c5","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return driver"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _reload_config(self):"},{"line_number":59,"context_line":"        self.conf.reload_config_files()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def get_entry_name(self, name):"},{"line_number":62,"context_line":"        return \".\".join([self.namespace, name])"}],"source_content_type":"text/x-python","patch_set":1,"id":"619c7f5b_e2b44d01","line":59,"in_reply_to":"ae69335a_af9ee8ba","updated":"2026-06-25 11:45:23.000000000","message":"adding a unit test to assert that a method calls another one when that\u0027s the only thing it does seems unnecessary? Note this reload_config is exercised in the integration and functional tests actually.","commit_id":"4b6bfeea83f0f9d8ed0e2866e7c5f60dd0e129a0"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"1cb8d5f2c4859110d421af4bdb0976819053e1dd","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return driver"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _reload_config(self):"},{"line_number":59,"context_line":"        self.conf.reload_config_files()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def get_entry_name(self, name):"}],"source_content_type":"text/x-python","patch_set":2,"id":"8cabbc70_8bab04f2","line":58,"updated":"2026-07-02 19:09:05.000000000","message":"No unit test covers _reload_config() or verifies reload_config_files() is used instead of the ConfigOpts __call__ pattern. Existing tests mock around config reload but never directly test _reload_config. A regression test would protect this fix from being reverted.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Benefit**: A unit test that asserts reload_config_files() is called (rather than __call__) would prevent accidental regression to the race-prone pattern and document the intended oslo.config API usage for future contributors.\n\n**Recommendation**:\nAdd a test in watcher/tests/unit/common/loader/test_loader.py that mocks self.conf and verifies that _reload_config() calls reload_config_files() rather than __call__. Example: create a DefaultLoader with a mock conf object, call _reload_config(), and assert m_conf.reload_config_files.assert_called_once_with().","commit_id":"e9d12d8786fe9b3b1acc6428c808759930fd3410"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"38fd0164c3f2e4c232ec5cd4f5e2a78e433dd859","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return driver"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _reload_config(self):"},{"line_number":59,"context_line":"        self.conf.reload_config_files()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def get_entry_name(self, name):"}],"source_content_type":"text/x-python","patch_set":2,"id":"8fa3e08e_37dadeda","line":58,"updated":"2026-07-03 06:28:00.000000000","message":"_reload_config() has no docstring. The reason reload_config_files() is used instead of ConfigOpts.__call__ (to avoid the clear() -\u003e _namespace\u003dNone race window) is non-obvious and only in the commit message. A maintainer could revert to self.conf(...) and reintroduce the race.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Prevents regression of this concurrency fix by making the thread-safety rationale visible at the call site, where the commit message is not seen.\n\n**Recommendation**:\nAdd a brief docstring such as: Re-parse config files atomically. Uses reload_config_files() rather than __call__() to avoid clearing _namespace mid-reload, which would race with concurrent CONF readers in threaded audit processing.","commit_id":"e9d12d8786fe9b3b1acc6428c808759930fd3410"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"1cb8d5f2c4859110d421af4bdb0976819053e1dd","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return driver"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _reload_config(self):"},{"line_number":59,"context_line":"        self.conf.reload_config_files()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def get_entry_name(self, name):"},{"line_number":62,"context_line":"        return \".\".join([self.namespace, name])"}],"source_content_type":"text/x-python","patch_set":2,"id":"7fb521e8_17fce74c","line":59,"updated":"2026-07-02 19:09:05.000000000","message":"reload_config_files() catches oslo.config Error exceptions and returns False, whereas the previous self.conf(...) propagated them. _reload_config() ignores the return value, silently swallowing reload failures and using stale namespace values. This is a behavioral change beyond the race fix.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Config parse errors during plugin loading are silently ignored. In the old code, a missing config file or invalid required option would raise an exception caught by load() and surface as LoadingError. Now the stale namespace is used and incorrect config values may be silently loaded.\n\n**Suggestion**:\nConsider checking the boolean return value of reload_config_files() and logging a warning when it returns False. For example: if not self.conf.reload_config_files(): LOG.warning(\u0027Failed to reload config files during plugin loading\u0027). Alternatively, add a code comment documenting that the softer error handling is an acceptable tradeoff for thread safety.","commit_id":"e9d12d8786fe9b3b1acc6428c808759930fd3410"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2e448806c40cc39e7d3bbe8ffc47e9fee6422706","unresolved":true,"context_lines":[{"line_number":54,"context_line":"            raise exception.LoadingError(name\u003dname)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return driver"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _reload_config(self):"},{"line_number":59,"context_line":"        self.conf.reload_config_files()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def get_entry_name(self, name):"},{"line_number":62,"context_line":"        return \".\".join([self.namespace, name])"}],"source_content_type":"text/x-python","patch_set":4,"id":"f8aac10c_4695ba5e","line":59,"range":{"start_line":57,"start_character":1,"end_line":59,"end_character":39},"updated":"2026-08-06 13:47:14.000000000","message":"so we shoudl not be reloadign the config on each audit run at all.\n\nthat shoudl only happen on SIG_UP or once on start up and never again while the agent is runnign.\n\ni think this is ok for now but we need to rework this seperately","commit_id":"6dbf544a7dd740b8d4300a6221ec20e0a1fee33c"}]}
