)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c06f354f263fb503cc356b09bd2191b6cebfefb4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0e533cea_944e23fd","updated":"2023-10-25 22:46:59.000000000","message":"This patch will help debugging the memcache issue. However, I have different opinion on the actual memcache error logging implementation. That\u0027ll be great if we can reuse the current logic and also make sure connections are freed.","commit_id":"639ea0adb79571a4ce3d1a679d2fa710d5b9fc4c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"511ffde2e91c4163272f5fad9aa75e3481926f26","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"625d6134_375924c4","updated":"2023-10-26 17:24:53.000000000","message":"thanks @Jianjian","commit_id":"639ea0adb79571a4ce3d1a679d2fa710d5b9fc4c"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"69ada62d8d44002fed8924f6deec19daac74fa9d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f8a2682b_08d2c067","updated":"2023-10-27 04:02:19.000000000","message":"LGTM.","commit_id":"965908d7534492377a55e094e822d14948b9f6f3"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"e7b9de2114978251de447bbf4ea45b5d13ce3dc7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3d250dba_156030d7","updated":"2023-10-30 07:47:00.000000000","message":"Looks awesome, thanks guys. Knowing more about what action and why it failed will be super useful!","commit_id":"965908d7534492377a55e094e822d14948b9f6f3"}],"swift/common/memcached.py":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c06f354f263fb503cc356b09bd2191b6cebfefb4","unresolved":true,"context_lines":[{"line_number":430,"context_line":"                    if msg !\u003d b\u0027STORED\u0027:"},{"line_number":431,"context_line":"                        if not six.PY2:"},{"line_number":432,"context_line":"                            msg \u003d msg.decode(\u0027ascii\u0027)"},{"line_number":433,"context_line":"                        self._log_error(server, cmd, \u0027sending\u0027, msg)"},{"line_number":434,"context_line":"                        continue"},{"line_number":435,"context_line":"                    self._return_conn(server, fp, sock)"},{"line_number":436,"context_line":"                    return"}],"source_content_type":"text/x-python","patch_set":1,"id":"45f5cb62_96634d20","line":433,"updated":"2023-10-25 22:46:59.000000000","message":"I feel we should reuse _exception_occurred(), it will not only print out the same format error log, and also it will free fp \u0026 free socket \u0026 _return_conn which current change does none of them.\n\n\nwe can define a new exception.\n```class MemcacheOutOfMemoryError(Exception):\n    pass```\n\n\nAnd then just call it at here:\n```raise MemcacheOutOfMemoryError(\"Memcached Out of Memory.\")```","commit_id":"639ea0adb79571a4ce3d1a679d2fa710d5b9fc4c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"511ffde2e91c4163272f5fad9aa75e3481926f26","unresolved":false,"context_lines":[{"line_number":430,"context_line":"                    if msg !\u003d b\u0027STORED\u0027:"},{"line_number":431,"context_line":"                        if not six.PY2:"},{"line_number":432,"context_line":"                            msg \u003d msg.decode(\u0027ascii\u0027)"},{"line_number":433,"context_line":"                        self._log_error(server, cmd, \u0027sending\u0027, msg)"},{"line_number":434,"context_line":"                        continue"},{"line_number":435,"context_line":"                    self._return_conn(server, fp, sock)"},{"line_number":436,"context_line":"                    return"}],"source_content_type":"text/x-python","patch_set":1,"id":"33d50366_87f69451","line":433,"in_reply_to":"45f5cb62_96634d20","updated":"2023-10-26 17:24:53.000000000","message":"good call! by adding the continue I caused the _return_conn to never be reached\n\nI think I can just use a MemcacheConnectionError - we don\u0027t know why the set failed so it may not be out of memory","commit_id":"639ea0adb79571a4ce3d1a679d2fa710d5b9fc4c"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"69ada62d8d44002fed8924f6deec19daac74fa9d","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def memcache_servers(self):"},{"line_number":246,"context_line":"        return list(self._client_cache.keys())"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def _log_error(self, server, cmd, action, msg):"},{"line_number":249,"context_line":"        self.logger.error("},{"line_number":250,"context_line":"            \"Error %(action)s to memcached: %(server)s\""},{"line_number":251,"context_line":"            \": with key_prefix %(key_prefix)s, method %(method)s: %(msg)s\","}],"source_content_type":"text/x-python","patch_set":2,"id":"4118122e_46d5b2d6","line":248,"updated":"2023-10-27 04:02:19.000000000","message":"I wish we could call this new function at here:\nhttps://review.opendev.org/c/openstack/swift/+/898964/2/swift/common/memcached.py#284\n\nBut that ``self.logger.error`` requires ``time_spent``.","commit_id":"965908d7534492377a55e094e822d14948b9f6f3"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"69ada62d8d44002fed8924f6deec19daac74fa9d","unresolved":false,"context_lines":[{"line_number":4929,"context_line":"                              \u0027container.info.cache.miss.200\u0027: 1,"},{"line_number":4930,"context_line":"                              \u0027container.info.infocache.hit\u0027: 1,"},{"line_number":4931,"context_line":"                              \u0027object.shard_updating.cache.skip.200\u0027: 1,"},{"line_number":4932,"context_line":"                              \u0027object.shard_updating.cache.set_error\u0027: 1},"},{"line_number":4933,"context_line":"                             stats)"},{"line_number":4934,"context_line":"            # verify statsd prefix is not mutated"},{"line_number":4935,"context_line":"            self.assertEqual([], self.app.logger.log_dict[\u0027set_statsd_prefix\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"c8a8993a_fe40fb1c","line":4932,"updated":"2023-10-27 04:02:19.000000000","message":"this is new metrics when set fails.","commit_id":"965908d7534492377a55e094e822d14948b9f6f3"}]}
