)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f03d78427c4f66e86cd18d82d8150e1377c9fe1f","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Alistair Coles \u003calistairncoles@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-02-23 16:42:11 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"backend_ratelimit: log when conf file disappears then reappears"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The backend_ratelimit will log a warning the first time it fails to"},{"line_number":10,"context_line":"load a config file that had previously been successfully loaded. This"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"eed1867e_efc6a07d","line":7,"updated":"2024-03-08 20:25:43.000000000","message":"i think we get an info log line anytime the file appears if it wasn\u0027t previously expected even if the cofig is unchanged - which is great!","commit_id":"99d61b33558ad986a898f61537e91e7d4860dbb7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f03d78427c4f66e86cd18d82d8150e1377c9fe1f","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"backend_ratelimit: log when conf file disappears then reappears"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The backend_ratelimit will log a warning the first time it fails to"},{"line_number":10,"context_line":"load a config file that had previously been successfully loaded. This"},{"line_number":11,"context_line":"patch adds an info log when the middleware first successfully loads a"},{"line_number":12,"context_line":"config file that had previously failed to be loaded."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"d1fd59e7_fc6b4491","line":9,"updated":"2024-03-08 20:25:43.000000000","message":"\"the first time it fails\"\n\nthis is trying to describe existing behavior, right?  I thought it was only on start-up that we warn_if_missing?  Othewise it just waits for the file to show up and logs info/debug.","commit_id":"99d61b33558ad986a898f61537e91e7d4860dbb7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"65f46e1aeb108522ac10d2ba8e097fbc433bdda4","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"backend_ratelimit: log when conf file disappears then reappears"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The backend_ratelimit will log a warning the first time it fails to"},{"line_number":10,"context_line":"load a config file that had previously been successfully loaded. This"},{"line_number":11,"context_line":"patch adds an info log when the middleware first successfully loads a"},{"line_number":12,"context_line":"config file that had previously failed to be loaded."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"748c1682_e998a21f","line":9,"in_reply_to":"d1fd59e7_fc6b4491","updated":"2024-03-11 18:16:13.000000000","message":"yes, reworded in squashed commit","commit_id":"99d61b33558ad986a898f61537e91e7d4860dbb7"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"65f46e1aeb108522ac10d2ba8e097fbc433bdda4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"fecc0baa_0f9ff0f9","updated":"2024-03-11 18:16:13.000000000","message":"@Clay renamed the car to reflect \"expected\", good call\n\nsquashing...","commit_id":"99d61b33558ad986a898f61537e91e7d4860dbb7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f03d78427c4f66e86cd18d82d8150e1377c9fe1f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5f7c68ce_6a5accd4","updated":"2024-03-08 20:25:43.000000000","message":"this seems great; I\u0027d suggest we squash it into the un-merged patch that introduces reloadable config.\n\nConsider changing the attribute name to \"expected\" or some derivative other than \"loaded\" - I feel like the symenatic meaning in __init__ is very much \"expected\" and not \"was successfully loaded\" and in load_config expected would be equally descriptive of the state we want future invocation\u0027s logging to react to.","commit_id":"99d61b33558ad986a898f61537e91e7d4860dbb7"}],"swift/common/middleware/backend_ratelimit.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f03d78427c4f66e86cd18d82d8150e1377c9fe1f","unresolved":true,"context_lines":[{"line_number":70,"context_line":"            self._config_file_loaded \u003d True"},{"line_number":71,"context_line":"        except KeyError:"},{"line_number":72,"context_line":"            self.conf_path \u003d default_conf_path"},{"line_number":73,"context_line":"            self._config_file_loaded \u003d False"},{"line_number":74,"context_line":"        self.config_reload_interval \u003d non_negative_float("},{"line_number":75,"context_line":"            filter_conf.get(\u0027config_reload_interval\u0027,"},{"line_number":76,"context_line":"                            DEFAULT_CONFIG_RELOAD_INTERVAL))"}],"source_content_type":"text/x-python","patch_set":1,"id":"dba212de_8cd4fc90","line":73,"updated":"2024-03-08 20:25:43.000000000","message":"this attribute name reads to me something like \"we found a config file and loaded it\" - but it seems to be closer to \"we had an explicit (but not necessarily non default) config path specified\"\n\nthen later we\u0027ll try and load it, I assume the file can be missing - in which case we won\u0027t load it.","commit_id":"99d61b33558ad986a898f61537e91e7d4860dbb7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f03d78427c4f66e86cd18d82d8150e1377c9fe1f","unresolved":true,"context_lines":[{"line_number":121,"context_line":"                                 self.conf_path)"},{"line_number":122,"context_line":"            elif not self._config_file_loaded:"},{"line_number":123,"context_line":"                self.logger.info(\u0027Loaded config file %s, config unchanged\u0027,"},{"line_number":124,"context_line":"                                 self.conf_path)"},{"line_number":125,"context_line":"            else:"},{"line_number":126,"context_line":"                self.logger.debug(\u0027Loaded config file %s, config unchanged\u0027,"},{"line_number":127,"context_line":"                                  self.conf_path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df80c2c3_f8b0bf66","line":124,"updated":"2024-03-08 20:25:43.000000000","message":"this message *reads* the same as the next else branch - but it\u0027s at info level instead of debug level - I\u0027m not sure how ops should understand the difference.\n\nI think this is saying, \"i had a config from app section, now I have a config from the new file - but they\u0027re the same\"","commit_id":"99d61b33558ad986a898f61537e91e7d4860dbb7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f03d78427c4f66e86cd18d82d8150e1377c9fe1f","unresolved":true,"context_lines":[{"line_number":125,"context_line":"            else:"},{"line_number":126,"context_line":"                self.logger.debug(\u0027Loaded config file %s, config unchanged\u0027,"},{"line_number":127,"context_line":"                                  self.conf_path)"},{"line_number":128,"context_line":"            self._config_file_loaded \u003d True"},{"line_number":129,"context_line":"        except IOError as err:"},{"line_number":130,"context_line":"            if self._config_file_loaded:"},{"line_number":131,"context_line":"                self.logger.warning(\u0027Failed to load config file: %s\u0027, err)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b51a21af_b198978d","line":128,"updated":"2024-03-08 20:25:43.000000000","message":"oh ok, but here - regardless of ho we decided on self.conf_path - we now consider it \"loaded\"\n\nI think \"expected\" might kind of still work, in that \"if we load a config we\u0027re going to expect it next time\"","commit_id":"99d61b33558ad986a898f61537e91e7d4860dbb7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f03d78427c4f66e86cd18d82d8150e1377c9fe1f","unresolved":true,"context_lines":[{"line_number":128,"context_line":"            self._config_file_loaded \u003d True"},{"line_number":129,"context_line":"        except IOError as err:"},{"line_number":130,"context_line":"            if self._config_file_loaded:"},{"line_number":131,"context_line":"                self.logger.warning(\u0027Failed to load config file: %s\u0027, err)"},{"line_number":132,"context_line":"            self._config_file_loaded \u003d False"},{"line_number":133,"context_line":"        except ValueError as err:"},{"line_number":134,"context_line":"            # ...but if it exists it should be valid"}],"source_content_type":"text/x-python","patch_set":1,"id":"aa282963_ddc5e601","line":131,"updated":"2024-03-08 20:25:43.000000000","message":"ok, and if we expected a config (maybe because it was named explicitly in the app section) - but we get an IOError, we log a warning and carry-on.","commit_id":"99d61b33558ad986a898f61537e91e7d4860dbb7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f03d78427c4f66e86cd18d82d8150e1377c9fe1f","unresolved":true,"context_lines":[{"line_number":129,"context_line":"        except IOError as err:"},{"line_number":130,"context_line":"            if self._config_file_loaded:"},{"line_number":131,"context_line":"                self.logger.warning(\u0027Failed to load config file: %s\u0027, err)"},{"line_number":132,"context_line":"            self._config_file_loaded \u003d False"},{"line_number":133,"context_line":"        except ValueError as err:"},{"line_number":134,"context_line":"            # ...but if it exists it should be valid"},{"line_number":135,"context_line":"            self.logger.warning(\u0027Invalid config file %s: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"62e752ec_5d36f09b","line":132,"updated":"2024-03-08 20:25:43.000000000","message":"ok, so if we got the default path and an IOError reading it then we say the config file is not \"loaded\"\n\nmaybe \"expected\" would be a better name for this attr?","commit_id":"99d61b33558ad986a898f61537e91e7d4860dbb7"}],"test/unit/common/middleware/test_backend_ratelimit.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f03d78427c4f66e86cd18d82d8150e1377c9fe1f","unresolved":true,"context_lines":[{"line_number":633,"context_line":"        now +\u003d 100"},{"line_number":634,"context_line":"        info_lines, warning_lines \u003d do_request(now)"},{"line_number":635,"context_line":"        self.assertFalse(info_lines)"},{"line_number":636,"context_line":"        self.assertFalse(warning_lines)"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"    def test_config_file_reload_disabled(self):"},{"line_number":639,"context_line":"        # verify that conf file options are not periodically reloaded when"}],"source_content_type":"text/x-python","patch_set":1,"id":"5e9cfc11_515b5c0e","line":636,"updated":"2024-03-08 20:25:43.000000000","message":"nice, this test closly matches the expected behavior from reading the commit message.","commit_id":"99d61b33558ad986a898f61537e91e7d4860dbb7"}]}
