)]}'
{"swift/account/reaper.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e392f770a23697862085ef10bdfac81dbb35fd88","unresolved":true,"context_lines":[{"line_number":388,"context_line":"                listing_failed \u003d True"},{"line_number":389,"context_line":"                self.logger.error("},{"line_number":390,"context_line":"                    \u0027Timeout Exception with %s\u0027, node_to_string(node))"},{"line_number":391,"context_line":"            if listing_failed:"},{"line_number":392,"context_line":"                self.stats_containers_possibly_remaining +\u003d 1"},{"line_number":393,"context_line":"                self.logger.increment(\u0027containers_possibly_remaining\u0027)"},{"line_number":394,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":1,"id":"6411496e_9220d062","line":391,"updated":"2026-05-27 16:24:54.000000000","message":"We can\u0027t just use the `None` sentinel we set at the start?\n```\nif objects is None:\n    ...\n    return\nelif not objects:\n    break\n```","commit_id":"d08b7e8a2698cb7e173f40f695e86a5a7dda2e02"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"af0a99599f1dadb4e201a344113fd63e1c60a6ea","unresolved":false,"context_lines":[{"line_number":388,"context_line":"                listing_failed \u003d True"},{"line_number":389,"context_line":"                self.logger.error("},{"line_number":390,"context_line":"                    \u0027Timeout Exception with %s\u0027, node_to_string(node))"},{"line_number":391,"context_line":"            if listing_failed:"},{"line_number":392,"context_line":"                self.stats_containers_possibly_remaining +\u003d 1"},{"line_number":393,"context_line":"                self.logger.increment(\u0027containers_possibly_remaining\u0027)"},{"line_number":394,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":1,"id":"518a710a_7c051d1d","line":391,"in_reply_to":"6411496e_9220d062","updated":"2026-06-01 19:39:32.000000000","message":"Done","commit_id":"d08b7e8a2698cb7e173f40f695e86a5a7dda2e02"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"af0a99599f1dadb4e201a344113fd63e1c60a6ea","unresolved":true,"context_lines":[{"line_number":387,"context_line":"                    \u0027Timeout Exception with %s\u0027, node_to_string(node))"},{"line_number":388,"context_line":"            if objects is None:"},{"line_number":389,"context_line":"                self.stats_containers_possibly_remaining +\u003d 1"},{"line_number":390,"context_line":"                self.logger.increment(\u0027containers_possibly_remaining\u0027)"},{"line_number":391,"context_line":"                return"},{"line_number":392,"context_line":"            if not objects:"},{"line_number":393,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":2,"id":"0a9119fa_75bc75e2","line":390,"range":{"start_line":390,"start_character":39,"end_line":390,"end_character":68},"updated":"2026-06-01 19:39:32.000000000","message":"I\u0027m not sure we should be using the same stat as below. If we *do*, I\u0027m not sure we want `containers_possibly_remaining` rather than `containers_remaining` (we issued no DELETE, so it must remain as valid as when we came into the function).\n\nI think I get why you (or your agent) would go for this -- we didn\u0027t get a good response, so we don\u0027t really know whether the container is (or should be) there or not -- but the current stats mean one of three specific cases:\n\n- we tried to delete the container and got back a quorum saying we succeeded,\n- we tried to delete the container and didn\u0027t get back any successful responses\n- we tried to delete the container and got back a mix of success and failure, with a quorum of failures\n\nThere\u0027s a common thread to all of these: *we tried to delete the container.* So maybe it\u0027d be better to have some new stat, like `unlistable_containers`?\n\n(Side note: it\u0027s kinda wild that we always use the last node and make no attempt to try any of the other nodes, even when we get timeouts or socket errors.)","commit_id":"f76353f519beb21055c8bf8d6063153fdfe3507e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"af0a99599f1dadb4e201a344113fd63e1c60a6ea","unresolved":true,"context_lines":[{"line_number":447,"context_line":"            self.logger.increment(\u0027containers_deleted\u0027)"},{"line_number":448,"context_line":"        elif not successes:"},{"line_number":449,"context_line":"            self.stats_containers_remaining +\u003d 1"},{"line_number":450,"context_line":"            self.logger.increment(\u0027containers_remaining\u0027)"},{"line_number":451,"context_line":"        else:"},{"line_number":452,"context_line":"            self.stats_containers_possibly_remaining +\u003d 1"},{"line_number":453,"context_line":"            self.logger.increment(\u0027containers_possibly_remaining\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"2910b5e1_64d36064","line":450,"updated":"2026-06-01 19:39:32.000000000","message":"Interesting that we emit this even when we get 3x timeouts -- who knows whether the container server eventually got around to reading the request and trying to act on it!","commit_id":"f76353f519beb21055c8bf8d6063153fdfe3507e"}]}
