)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f7486f49c74cf535a1136ecbdf49fe456b07e748","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1f4d967e_d21dc24a","updated":"2024-05-15 02:57:04.000000000","message":"so there\u0027s now 3 refactorings and 2 squash patches between the one we\u0027re carrying and where I want to get to in prod.\n\nI\u0027d like some feedback on if any of (pre)refactor patches have enough merit on their own to maybe move *ahead* of the Carrying patch with an eyey towards merging to master before our next release?  It\u0027s annoying to have to carry refactors - I assume eventually all the different \"strategy\" experiments get merged into a single Carrying patch and we eventually clean it up so it\u0027 only has the ideas that worked and eventually master gets just that (and whatever pre-factor cleanups we\u0027d already merged).","commit_id":"bd4fdf2096b57a634b24b22820d4e97907fda90e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a7be641c_8c390602","updated":"2024-07-19 12:07:24.000000000","message":"this all looks good","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e59289a6615b7911a150b7e55af1d769a891ccaf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"c587c065_7e5700b9","updated":"2024-09-11 13:03:46.000000000","message":"recheck\n\nsome kind of timeout, unrelated\n\nopenstack.tests.functional.examples.test_compute.TestCompute.test_compute\n-------------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n\n      File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/tests/functional/examples/test_compute.py\", line 47, in test_compute\n    create.create_server(self.conn)\n\n      File \"/home/zuul/src/opendev.org/openstack/openstacksdk/examples/compute/create.py\", line 72, in create_server\n    server \u003d conn.compute.wait_for_server(server)\n\n      File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/compute/v2/_proxy.py\", line 2636, in wait_for_server\n    return resource.wait_for_status(\n\n      File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/resource.py\", line 2458, in wait_for_status\n    raise exceptions.ResourceFailure(\n\n    openstack.exceptions.ResourceFailure: Server:da4ae0f8-8d1e-4b42-b08f-f10faf0b72b6 transitioned to failure state ERROR","commit_id":"de610bff203a0c79f10ffc2f29c62133a09c7e2a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"df895db10d58b5e0ca1deefc071feda975867c37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"8279f1b8_f2c21d0d","updated":"2024-09-11 15:14:48.000000000","message":"recheck\n\ntest/probe/test_container_merge_policy_index.py::TestContainerMergePolicyIndex::test_reconciler_move_object_twice FAILED\n\nhttps://bugs.launchpad.net/swift/+bug/2028175","commit_id":"de610bff203a0c79f10ffc2f29c62133a09c7e2a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f704feec851671bd3b28b095f4be347706535bfb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"4709ea22_95b045d2","updated":"2024-10-24 21:10:51.000000000","message":"oh good, this one is going to be mostly unchanged too.","commit_id":"a41207cf3d796ee2070694c489bfe17a68fe81cf"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"808c7f03f53146278f1ae81f9f128efbe333ef64","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"513b5445_6e824011","updated":"2024-11-01 21:08:38.000000000","message":"this one is probably good; I forget why it was hard to put ahead of the deprecate-expirer-options/introduce-expirer-config-obj patch","commit_id":"0febd2ab06bd56db511b2c87c0203a9975ab397e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c60459d6fc39f2578e916ddc4bd09d9f28d2c3e8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"c313f280_0b1b0c76","updated":"2024-11-05 00:23:44.000000000","message":"I think everyone likes this small refactor!","commit_id":"637408b2e3136e51f0584d0e1f7017448410a19f"}],"swift/obj/expirer.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f7486f49c74cf535a1136ecbdf49fe456b07e748","unresolved":true,"context_lines":[{"line_number":436,"context_line":"                    \u0027obj_count\u0027: obj_count})"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"            my_index, divisor, my_containers \u003d \\"},{"line_number":439,"context_line":"                self.select_task_containers_to_expire(task_account)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"            # For backwards compatibility with tests, the"},{"line_number":442,"context_line":"            # task_account_container_iter is passed into"}],"source_content_type":"text/x-python","patch_set":1,"id":"01daf61f_01670842","line":439,"updated":"2024-05-15 02:57:04.000000000","message":"the main idea here is that my_index, divisor can vary based on the task_containers we find in the account - currently they don\u0027t, but just like \"iter_task_accounts_to_expire\" you have to trust me this refactoring will make sense after the follow-up:\n\n918366: Parallel distirbuted task container iteration | https://review.opendev.org/c/openstack/swift/+/918366","commit_id":"bd4fdf2096b57a634b24b22820d4e97907fda90e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"808c7f03f53146278f1ae81f9f128efbe333ef64","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                    \u0027obj_count\u0027: obj_count})"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"            my_index, divisor, my_containers \u003d \\"},{"line_number":439,"context_line":"                self.select_task_containers_to_expire(task_account)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"            # For backwards compatibility with tests, the"},{"line_number":442,"context_line":"            # task_account_container_iter is passed into"}],"source_content_type":"text/x-python","patch_set":1,"id":"7cd3bf80_06310e20","line":439,"in_reply_to":"01daf61f_01670842","updated":"2024-11-01 21:08:38.000000000","message":"Done","commit_id":"bd4fdf2096b57a634b24b22820d4e97907fda90e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":true,"context_lines":[{"line_number":446,"context_line":"            yield (self.expirer_config.account_name,"},{"line_number":447,"context_line":"                   self.process, self.processes)"},{"line_number":448,"context_line":"        else:"},{"line_number":449,"context_line":"            yield self.expirer_config.account_name, 0, 1"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def get_task_containers_to_expire(self, task_account):"},{"line_number":452,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"7bc45597_a948b688","side":"PARENT","line":449,"updated":"2024-07-19 12:07:24.000000000","message":"ok, so maybe this iter was a hangover from some anticipated-but-not-realised future expansion of expirer accounts. In fact it yields precisely once and is therefore redundant.","commit_id":"6fe94c3c0074b7e4d74d7cf23a198b869e816ce7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f704feec851671bd3b28b095f4be347706535bfb","unresolved":false,"context_lines":[{"line_number":446,"context_line":"            yield (self.expirer_config.account_name,"},{"line_number":447,"context_line":"                   self.process, self.processes)"},{"line_number":448,"context_line":"        else:"},{"line_number":449,"context_line":"            yield self.expirer_config.account_name, 0, 1"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def get_task_containers_to_expire(self, task_account):"},{"line_number":452,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"d5d501a9_3dcec33f","side":"PARENT","line":449,"in_reply_to":"7bc45597_a948b688","updated":"2024-10-24 21:10:51.000000000","message":"Acknowledged","commit_id":"6fe94c3c0074b7e4d74d7cf23a198b869e816ce7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":true,"context_lines":[{"line_number":578,"context_line":"        try:"},{"line_number":579,"context_line":"            self.logger.debug(\u0027Run begin\u0027)"},{"line_number":580,"context_line":"            for task_account, my_index, divisor in \\"},{"line_number":581,"context_line":"                    self.iter_task_accounts_to_expire():"},{"line_number":582,"context_line":"                container_count, obj_count \u003d \\"},{"line_number":583,"context_line":"                    self.swift.get_account_info(task_account)"},{"line_number":584,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"e1041f36_2302f9db","side":"PARENT","line":581,"updated":"2024-07-19 12:07:24.000000000","message":"ok, this for loop was only ever going to have one iteration, so ditch it","commit_id":"6fe94c3c0074b7e4d74d7cf23a198b869e816ce7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f704feec851671bd3b28b095f4be347706535bfb","unresolved":false,"context_lines":[{"line_number":578,"context_line":"        try:"},{"line_number":579,"context_line":"            self.logger.debug(\u0027Run begin\u0027)"},{"line_number":580,"context_line":"            for task_account, my_index, divisor in \\"},{"line_number":581,"context_line":"                    self.iter_task_accounts_to_expire():"},{"line_number":582,"context_line":"                container_count, obj_count \u003d \\"},{"line_number":583,"context_line":"                    self.swift.get_account_info(task_account)"},{"line_number":584,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"74d03dce_4ee00b3e","side":"PARENT","line":581,"in_reply_to":"e1041f36_2302f9db","updated":"2024-10-24 21:10:51.000000000","message":"Acknowledged","commit_id":"6fe94c3c0074b7e4d74d7cf23a198b869e816ce7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":true,"context_lines":[{"line_number":584,"context_line":""},{"line_number":585,"context_line":"                # the task account is skipped if there are no task container"},{"line_number":586,"context_line":"                if not container_count:"},{"line_number":587,"context_line":"                    continue"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"                self.logger.info("},{"line_number":590,"context_line":"                    \u0027Pass beginning for task account %(account)s; \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"6362d3f7_e1eac85a","side":"PARENT","line":587,"updated":"2024-07-19 12:07:24.000000000","message":"ok, so we\u0027re dropping the early exit but that seems reasonable: the iter_containers that follows may be more up to date than account info, plus we get a log message when there\u0027s apparently no work to do. All seems harmless.","commit_id":"6fe94c3c0074b7e4d74d7cf23a198b869e816ce7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f704feec851671bd3b28b095f4be347706535bfb","unresolved":false,"context_lines":[{"line_number":584,"context_line":""},{"line_number":585,"context_line":"                # the task account is skipped if there are no task container"},{"line_number":586,"context_line":"                if not container_count:"},{"line_number":587,"context_line":"                    continue"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"                self.logger.info("},{"line_number":590,"context_line":"                    \u0027Pass beginning for task account %(account)s; \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"66a21054_51c08160","side":"PARENT","line":587,"in_reply_to":"6362d3f7_e1eac85a","updated":"2024-10-24 21:10:51.000000000","message":"Acknowledged","commit_id":"6fe94c3c0074b7e4d74d7cf23a198b869e816ce7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":true,"context_lines":[{"line_number":442,"context_line":"        expirer calculates the assigned index for each expiration task. The"},{"line_number":443,"context_line":"        assigned index is in [0, 1, ..., divisor - 1].  When running multiple"},{"line_number":444,"context_line":"        expirer processes each have their own \"my_index\". The expirer whose"},{"line_number":445,"context_line":"        \"my_index\" is equal to the assigned index will reap object targeted by"},{"line_number":446,"context_line":"        the task. Because each expirer is configured to have a unique"},{"line_number":447,"context_line":"        \"my_index\", task objects are executed by only one expirer."},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"306d3b05_65f00d05","line":445,"updated":"2024-07-19 12:07:24.000000000","message":"s/object/objects/","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d657ca437703489a849172926f2d7f99c49d961c","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        expirer calculates the assigned index for each expiration task. The"},{"line_number":443,"context_line":"        assigned index is in [0, 1, ..., divisor - 1].  When running multiple"},{"line_number":444,"context_line":"        expirer processes each have their own \"my_index\". The expirer whose"},{"line_number":445,"context_line":"        \"my_index\" is equal to the assigned index will reap object targeted by"},{"line_number":446,"context_line":"        the task. Because each expirer is configured to have a unique"},{"line_number":447,"context_line":"        \"my_index\", task objects are executed by only one expirer."},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"e45c238e_7420d8b2","line":445,"in_reply_to":"306d3b05_65f00d05","updated":"2024-07-19 13:48:31.000000000","message":"Done","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":true,"context_lines":[{"line_number":490,"context_line":"        else:"},{"line_number":491,"context_line":"            # each process will *list* all tasks in *all* task_containers"},{"line_number":492,"context_line":"            # (and \"handle\" only a subset)"},{"line_number":493,"context_line":"            return self.process, self.processes, container_list"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def get_delay_reaping(self, target_account, target_container):"},{"line_number":496,"context_line":"        return get_delay_reaping(self.delay_reaping_times, target_account,"}],"source_content_type":"text/x-python","patch_set":6,"id":"553518a7_7feb922e","line":493,"updated":"2024-07-19 12:07:24.000000000","message":"ok, this makes sense (i.e. returning index, divisor from this method rather than having the caller infer them directly) because the values are going to become less deterministic in future https://review.opendev.org/c/openstack/swift/+/918366/8/swift/obj/expirer.py","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f704feec851671bd3b28b095f4be347706535bfb","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        else:"},{"line_number":491,"context_line":"            # each process will *list* all tasks in *all* task_containers"},{"line_number":492,"context_line":"            # (and \"handle\" only a subset)"},{"line_number":493,"context_line":"            return self.process, self.processes, container_list"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def get_delay_reaping(self, target_account, target_container):"},{"line_number":496,"context_line":"        return get_delay_reaping(self.delay_reaping_times, target_account,"}],"source_content_type":"text/x-python","patch_set":6,"id":"d4c3322a_37d7a490","line":493,"in_reply_to":"553518a7_7feb922e","updated":"2024-10-24 21:10:51.000000000","message":"Acknowledged","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":true,"context_lines":[{"line_number":590,"context_line":"                \u0027Pass beginning for task account %(account)s; \u0027"},{"line_number":591,"context_line":"                \u0027%(container_count)s possible containers; \u0027"},{"line_number":592,"context_line":"                \u0027%(obj_count)s possible objects\u0027, {"},{"line_number":593,"context_line":"                    \u0027account\u0027: self.expirer_config.account_name,"},{"line_number":594,"context_line":"                    \u0027container_count\u0027: container_count,"},{"line_number":595,"context_line":"                    \u0027obj_count\u0027: obj_count})"},{"line_number":596,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"28538b9c_ecf7faa0","line":593,"range":{"start_line":593,"start_character":31,"end_line":593,"end_character":64},"updated":"2024-07-19 12:07:24.000000000","message":"ok, there is *only* one account name, just use it","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f704feec851671bd3b28b095f4be347706535bfb","unresolved":false,"context_lines":[{"line_number":590,"context_line":"                \u0027Pass beginning for task account %(account)s; \u0027"},{"line_number":591,"context_line":"                \u0027%(container_count)s possible containers; \u0027"},{"line_number":592,"context_line":"                \u0027%(obj_count)s possible objects\u0027, {"},{"line_number":593,"context_line":"                    \u0027account\u0027: self.expirer_config.account_name,"},{"line_number":594,"context_line":"                    \u0027container_count\u0027: container_count,"},{"line_number":595,"context_line":"                    \u0027obj_count\u0027: obj_count})"},{"line_number":596,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"eb4578aa_21d6e663","line":593,"range":{"start_line":593,"start_character":31,"end_line":593,"end_character":64},"in_reply_to":"28538b9c_ecf7faa0","updated":"2024-10-24 21:10:51.000000000","message":"Acknowledged","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":true,"context_lines":[{"line_number":594,"context_line":"                    \u0027container_count\u0027: container_count,"},{"line_number":595,"context_line":"                    \u0027obj_count\u0027: obj_count})"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"            my_index, divisor, my_containers \u003d \\"},{"line_number":598,"context_line":"                self.select_task_containers_to_expire("},{"line_number":599,"context_line":"                    self.expirer_config.account_name)"},{"line_number":600,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5e7cab79_1c10258c","line":597,"updated":"2024-07-19 12:07:24.000000000","message":"ok, so now we get my_index and divisor from this method rather than iter_task_accounts_to_expire, but w/e - for now they are pretty much fixed values anyway.\n\nApart from that, select_task_containers_to_expire is identical to the old get_task_containers_to_expire 👍","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f704feec851671bd3b28b095f4be347706535bfb","unresolved":false,"context_lines":[{"line_number":594,"context_line":"                    \u0027container_count\u0027: container_count,"},{"line_number":595,"context_line":"                    \u0027obj_count\u0027: obj_count})"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"            my_index, divisor, my_containers \u003d \\"},{"line_number":598,"context_line":"                self.select_task_containers_to_expire("},{"line_number":599,"context_line":"                    self.expirer_config.account_name)"},{"line_number":600,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"31927b8d_d21b3c5b","line":597,"in_reply_to":"5e7cab79_1c10258c","updated":"2024-10-24 21:10:51.000000000","message":"Acknowledged","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":true,"context_lines":[{"line_number":598,"context_line":"                self.select_task_containers_to_expire("},{"line_number":599,"context_line":"                    self.expirer_config.account_name)"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"            task_account_container_list \u003d ["},{"line_number":602,"context_line":"                (self.expirer_config.account_name, task_container)"},{"line_number":603,"context_line":"                for task_container in my_containers]"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"            # delete_task_iter is a generator to yield a dict of"},{"line_number":606,"context_line":"            # task_account, task_container, task_object, delete_timestamp,"}],"source_content_type":"text/x-python","patch_set":6,"id":"16850240_d63fa360","line":603,"range":{"start_line":601,"start_character":0,"end_line":603,"end_character":1},"updated":"2024-07-19 12:07:24.000000000","message":"ok, essentially unchanged","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f704feec851671bd3b28b095f4be347706535bfb","unresolved":false,"context_lines":[{"line_number":598,"context_line":"                self.select_task_containers_to_expire("},{"line_number":599,"context_line":"                    self.expirer_config.account_name)"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"            task_account_container_list \u003d ["},{"line_number":602,"context_line":"                (self.expirer_config.account_name, task_container)"},{"line_number":603,"context_line":"                for task_container in my_containers]"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"            # delete_task_iter is a generator to yield a dict of"},{"line_number":606,"context_line":"            # task_account, task_container, task_object, delete_timestamp,"}],"source_content_type":"text/x-python","patch_set":6,"id":"f559251a_4816e0b6","line":603,"range":{"start_line":601,"start_character":0,"end_line":603,"end_character":1},"in_reply_to":"16850240_d63fa360","updated":"2024-10-24 21:10:51.000000000","message":"Acknowledged","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":true,"context_lines":[{"line_number":602,"context_line":"                (self.expirer_config.account_name, task_container)"},{"line_number":603,"context_line":"                for task_container in my_containers]"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"            # delete_task_iter is a generator to yield a dict of"},{"line_number":606,"context_line":"            # task_account, task_container, task_object, delete_timestamp,"},{"line_number":607,"context_line":"            # target_path to handle delete actual object and pop the task"},{"line_number":608,"context_line":"            # from the queue."},{"line_number":609,"context_line":"            delete_task_iter \u003d \\"},{"line_number":610,"context_line":"                self.round_robin_order(self.iter_task_to_expire("},{"line_number":611,"context_line":"                    task_account_container_list, my_index, divisor))"},{"line_number":612,"context_line":"            rate_limited_iter \u003d RateLimitedIterator("},{"line_number":613,"context_line":"                delete_task_iter,"},{"line_number":614,"context_line":"                elements_per_second\u003dself.tasks_per_second)"},{"line_number":615,"context_line":"            for delete_task in rate_limited_iter:"},{"line_number":616,"context_line":"                pool.spawn_n(self.delete_object, **delete_task)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"            pool.waitall()"},{"line_number":619,"context_line":"            self.logger.debug(\u0027Run end\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"a4570eae_96bf09e3","line":616,"range":{"start_line":605,"start_character":1,"end_line":616,"end_character":3},"updated":"2024-07-19 12:07:24.000000000","message":"ok, this is all just de-dent because we lost the for loop","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f704feec851671bd3b28b095f4be347706535bfb","unresolved":false,"context_lines":[{"line_number":602,"context_line":"                (self.expirer_config.account_name, task_container)"},{"line_number":603,"context_line":"                for task_container in my_containers]"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"            # delete_task_iter is a generator to yield a dict of"},{"line_number":606,"context_line":"            # task_account, task_container, task_object, delete_timestamp,"},{"line_number":607,"context_line":"            # target_path to handle delete actual object and pop the task"},{"line_number":608,"context_line":"            # from the queue."},{"line_number":609,"context_line":"            delete_task_iter \u003d \\"},{"line_number":610,"context_line":"                self.round_robin_order(self.iter_task_to_expire("},{"line_number":611,"context_line":"                    task_account_container_list, my_index, divisor))"},{"line_number":612,"context_line":"            rate_limited_iter \u003d RateLimitedIterator("},{"line_number":613,"context_line":"                delete_task_iter,"},{"line_number":614,"context_line":"                elements_per_second\u003dself.tasks_per_second)"},{"line_number":615,"context_line":"            for delete_task in rate_limited_iter:"},{"line_number":616,"context_line":"                pool.spawn_n(self.delete_object, **delete_task)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"            pool.waitall()"},{"line_number":619,"context_line":"            self.logger.debug(\u0027Run end\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"8b69e549_7466ef77","line":616,"range":{"start_line":605,"start_character":1,"end_line":616,"end_character":3},"in_reply_to":"a4570eae_96bf09e3","updated":"2024-10-24 21:10:51.000000000","message":"Acknowledged","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"}],"test/unit/obj/test_expirer.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f7486f49c74cf535a1136ecbdf49fe456b07e748","unresolved":true,"context_lines":[{"line_number":917,"context_line":"            self.empty_time_container,"},{"line_number":918,"context_line":"            self.past_time_container,"},{"line_number":919,"context_line":"            self.just_past_time_container,"},{"line_number":920,"context_line":"        ], [str(c) for c in containers])"},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"    def test_run_once_nothing_to_do(self):"},{"line_number":923,"context_line":"        x \u003d expirer.ObjectExpirer(self.conf, logger\u003dself.logger,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab519b9_b5fd9b1a","line":920,"updated":"2024-05-15 02:57:04.000000000","message":"there could also be tests on this method with strategy \u003d \u0027randomized\u0027, but the idea would be the same.","commit_id":"bd4fdf2096b57a634b24b22820d4e97907fda90e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f704feec851671bd3b28b095f4be347706535bfb","unresolved":false,"context_lines":[{"line_number":917,"context_line":"            self.empty_time_container,"},{"line_number":918,"context_line":"            self.past_time_container,"},{"line_number":919,"context_line":"            self.just_past_time_container,"},{"line_number":920,"context_line":"        ], [str(c) for c in containers])"},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"    def test_run_once_nothing_to_do(self):"},{"line_number":923,"context_line":"        x \u003d expirer.ObjectExpirer(self.conf, logger\u003dself.logger,"}],"source_content_type":"text/x-python","patch_set":1,"id":"89d52080_ca21964c","line":920,"in_reply_to":"bab519b9_b5fd9b1a","updated":"2024-10-24 21:10:51.000000000","message":"Acknowledged","commit_id":"bd4fdf2096b57a634b24b22820d4e97907fda90e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":true,"context_lines":[{"line_number":1261,"context_line":"        index, divisor, containers \u003d x.select_task_containers_to_expire("},{"line_number":1262,"context_line":"            \u0027.expiring_objects\u0027)"},{"line_number":1263,"context_line":"        self.assertEqual(0, index)"},{"line_number":1264,"context_line":"        self.assertEqual(1, divisor)"},{"line_number":1265,"context_line":"        self.assertEqual(["},{"line_number":1266,"context_line":"            self.empty_time_container,"},{"line_number":1267,"context_line":"            self.past_time_container,"}],"source_content_type":"text/x-python","patch_set":6,"id":"f6670489_81deaf55","line":1264,"updated":"2024-07-19 12:07:24.000000000","message":"ok, by default processes \u003d\u003d process \u003d\u003d 0","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f704feec851671bd3b28b095f4be347706535bfb","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"        index, divisor, containers \u003d x.select_task_containers_to_expire("},{"line_number":1262,"context_line":"            \u0027.expiring_objects\u0027)"},{"line_number":1263,"context_line":"        self.assertEqual(0, index)"},{"line_number":1264,"context_line":"        self.assertEqual(1, divisor)"},{"line_number":1265,"context_line":"        self.assertEqual(["},{"line_number":1266,"context_line":"            self.empty_time_container,"},{"line_number":1267,"context_line":"            self.past_time_container,"}],"source_content_type":"text/x-python","patch_set":6,"id":"93c740e2_6c5f7a9b","line":1264,"in_reply_to":"f6670489_81deaf55","updated":"2024-10-24 21:10:51.000000000","message":"Acknowledged","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":true,"context_lines":[{"line_number":1332,"context_line":"            for target_path in self.expired_target_paths[self.just_past_time]"},{"line_number":1333,"context_line":"        ], 2)])"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"    def test_skip_task_account_without_task_container(self):"},{"line_number":1336,"context_line":"        fake_swift \u003d FakeInternalClient({"},{"line_number":1337,"context_line":"            # task account has no containers"},{"line_number":1338,"context_line":"            \u0027.expiring_objects\u0027: dict()"}],"source_content_type":"text/x-python","patch_set":6,"id":"0672ad93_094f3b71","line":1335,"updated":"2024-07-19 12:07:24.000000000","message":"I guess it no longer skips so we could rename the test","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d657ca437703489a849172926f2d7f99c49d961c","unresolved":false,"context_lines":[{"line_number":1332,"context_line":"            for target_path in self.expired_target_paths[self.just_past_time]"},{"line_number":1333,"context_line":"        ], 2)])"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"    def test_skip_task_account_without_task_container(self):"},{"line_number":1336,"context_line":"        fake_swift \u003d FakeInternalClient({"},{"line_number":1337,"context_line":"            # task account has no containers"},{"line_number":1338,"context_line":"            \u0027.expiring_objects\u0027: dict()"}],"source_content_type":"text/x-python","patch_set":6,"id":"b2fcb2fa_2cd9492c","line":1335,"in_reply_to":"0672ad93_094f3b71","updated":"2024-07-19 13:48:31.000000000","message":"Done","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"736851583c477727813aa39791137b9f8f2882c9","unresolved":true,"context_lines":[{"line_number":1347,"context_line":"                \u0027Pass completed in 0s; 0 objects expired\u0027,"},{"line_number":1348,"context_line":"            ])"},{"line_number":1349,"context_line":""},{"line_number":1350,"context_line":"    def test_get_task_containers_unexpected_container(self):"},{"line_number":1351,"context_line":"        expected \u003d self.get_expirer_container(time())"},{"line_number":1352,"context_line":"        unexpected \u003d str(int(expected) - 200)"},{"line_number":1353,"context_line":"        for name in (expected, unexpected):"}],"source_content_type":"text/x-python","patch_set":6,"id":"b0d10a0e_ef73cdbc","line":1350,"updated":"2024-07-19 12:07:24.000000000","message":"nit: these tests could also be renamed","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d657ca437703489a849172926f2d7f99c49d961c","unresolved":false,"context_lines":[{"line_number":1347,"context_line":"                \u0027Pass completed in 0s; 0 objects expired\u0027,"},{"line_number":1348,"context_line":"            ])"},{"line_number":1349,"context_line":""},{"line_number":1350,"context_line":"    def test_get_task_containers_unexpected_container(self):"},{"line_number":1351,"context_line":"        expected \u003d self.get_expirer_container(time())"},{"line_number":1352,"context_line":"        unexpected \u003d str(int(expected) - 200)"},{"line_number":1353,"context_line":"        for name in (expected, unexpected):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9b1ddb54_676251ae","line":1350,"in_reply_to":"b0d10a0e_ef73cdbc","updated":"2024-07-19 13:48:31.000000000","message":"Done","commit_id":"d53f564dd61e394f7d5cecedc894b6707d6ee8f6"}]}
