)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7dc8a8bb30bee0a819ce82f04fbf3dc69fe520b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e2fe0e41_6212f89c","updated":"2025-09-16 14:32:39.000000000","message":"I\u0027d like to put this in the chain an alternative solution to 961322: test: do not create timestamp collision unnecessarily | https://review.opendev.org/c/openstack/swift/+/961322 leading up to 961323: raise 500 on ec timestamp collision | https://review.opendev.org/c/openstack/swift/+/961323\n\ncan you clarify the WIP or can I rebase on it as is and simply reword the commit message?","commit_id":"c26c7b8edd464d1fcf1d219f7c3fb040914d9da3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a97809092ccec8662a8928e478105c729f5bd533","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"adb4f9e7_13c2147b","updated":"2025-09-16 14:52:09.000000000","message":"it\u0027s no wip?  i must have had too many tabs open.","commit_id":"c26c7b8edd464d1fcf1d219f7c3fb040914d9da3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"57a6d5e35abe749ba2b9afb786415cd418c5fe45","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"916dacaa_768a6a47","updated":"2025-09-16 14:29:46.000000000","message":"spffft - why is this WIP - it\u0027s great!","commit_id":"c26c7b8edd464d1fcf1d219f7c3fb040914d9da3"}],"test/unit/obj/test_reconstructor.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6cc95131a12a5d674a22b5569f45ba4cff146073","unresolved":true,"context_lines":[{"line_number":195,"context_line":"        self.policy \u003d POLICIES[1]"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # just in case someone messes with patched policies..."},{"line_number":198,"context_line":"        for policy in [p for p in POLICIES if p.policy_type \u003d\u003d EC_POLICY]:"},{"line_number":199,"context_line":"            self.ec_policy \u003d policy"},{"line_number":200,"context_line":"            self.ec_obj_ring \u003d self.reconstructor.load_object_ring("},{"line_number":201,"context_line":"                self.ec_policy)"}],"source_content_type":"text/x-python","patch_set":1,"id":"18cba034_41e410a9","line":198,"updated":"2025-09-16 13:57:47.000000000","message":"I\u0027m keeping with the spirit of what was there before, but this does all seem quite unnecessary - it\u0027s POLICIES[1] !!!","commit_id":"c26c7b8edd464d1fcf1d219f7c3fb040914d9da3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7dc8a8bb30bee0a819ce82f04fbf3dc69fe520b7","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        self.policy \u003d POLICIES[1]"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # just in case someone messes with patched policies..."},{"line_number":198,"context_line":"        for policy in [p for p in POLICIES if p.policy_type \u003d\u003d EC_POLICY]:"},{"line_number":199,"context_line":"            self.ec_policy \u003d policy"},{"line_number":200,"context_line":"            self.ec_obj_ring \u003d self.reconstructor.load_object_ring("},{"line_number":201,"context_line":"                self.ec_policy)"}],"source_content_type":"text/x-python","patch_set":1,"id":"00d35ac0_710a5390","line":198,"in_reply_to":"18cba034_41e410a9","updated":"2025-09-16 14:32:39.000000000","message":"Acknowledged","commit_id":"c26c7b8edd464d1fcf1d219f7c3fb040914d9da3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6cc95131a12a5d674a22b5569f45ba4cff146073","unresolved":true,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        data_dir \u003d diskfile.get_data_dir(self.ec_policy)"},{"line_number":208,"context_line":"        ips \u003d utils.whataremyips(self.reconstructor.ring_ip)"},{"line_number":209,"context_line":"        for local_dev in [dev for dev in self.ec_obj_ring.devs"},{"line_number":210,"context_line":"                          if dev and dev[\u0027replication_ip\u0027] in ips and"},{"line_number":211,"context_line":"                          dev[\u0027replication_port\u0027] \u003d\u003d"},{"line_number":212,"context_line":"                          self.reconstructor.port]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"44ad07f3_17d63c1f","line":209,"updated":"2025-09-16 13:57:47.000000000","message":"ditto - convoluted way of concluding it is sda1","commit_id":"c26c7b8edd464d1fcf1d219f7c3fb040914d9da3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7dc8a8bb30bee0a819ce82f04fbf3dc69fe520b7","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        data_dir \u003d diskfile.get_data_dir(self.ec_policy)"},{"line_number":208,"context_line":"        ips \u003d utils.whataremyips(self.reconstructor.ring_ip)"},{"line_number":209,"context_line":"        for local_dev in [dev for dev in self.ec_obj_ring.devs"},{"line_number":210,"context_line":"                          if dev and dev[\u0027replication_ip\u0027] in ips and"},{"line_number":211,"context_line":"                          dev[\u0027replication_port\u0027] \u003d\u003d"},{"line_number":212,"context_line":"                          self.reconstructor.port]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"8fa3bf18_11809525","line":209,"in_reply_to":"44ad07f3_17d63c1f","updated":"2025-09-16 14:32:39.000000000","message":"Acknowledged","commit_id":"c26c7b8edd464d1fcf1d219f7c3fb040914d9da3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6cc95131a12a5d674a22b5569f45ba4cff146073","unresolved":true,"context_lines":[{"line_number":224,"context_line":"        # most of the reconstructor test methods require that there be real"},{"line_number":225,"context_line":"        # object fragments in place, not just part dirs, so we\u0027ll create them"},{"line_number":226,"context_line":"        # all here...."},{"line_number":227,"context_line":"        t \u003d 1421181937.70054  # time.time()"},{"line_number":228,"context_line":"        ts \u003d utils.Timestamp(t)"},{"line_number":229,"context_line":"        with mock.patch(\u0027swift.obj.diskfile.time\u0027) as mock_time:"},{"line_number":230,"context_line":"            # since (a) we are using a fixed time here to create"}],"source_content_type":"text/x-python","patch_set":1,"id":"a998e41a_f767a426","line":227,"range":{"start_line":227,"start_character":30,"end_line":227,"end_character":43},"updated":"2025-09-16 13:57:47.000000000","message":"did someone just comment out time.time() and forget to restore it? why is ``t`` pinned??","commit_id":"c26c7b8edd464d1fcf1d219f7c3fb040914d9da3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7dc8a8bb30bee0a819ce82f04fbf3dc69fe520b7","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        # most of the reconstructor test methods require that there be real"},{"line_number":225,"context_line":"        # object fragments in place, not just part dirs, so we\u0027ll create them"},{"line_number":226,"context_line":"        # all here...."},{"line_number":227,"context_line":"        t \u003d 1421181937.70054  # time.time()"},{"line_number":228,"context_line":"        ts \u003d utils.Timestamp(t)"},{"line_number":229,"context_line":"        with mock.patch(\u0027swift.obj.diskfile.time\u0027) as mock_time:"},{"line_number":230,"context_line":"            # since (a) we are using a fixed time here to create"}],"source_content_type":"text/x-python","patch_set":1,"id":"b7ab5fce_23de5d19","line":227,"range":{"start_line":227,"start_character":30,"end_line":227,"end_character":43},"in_reply_to":"a998e41a_f767a426","updated":"2025-09-16 14:32:39.000000000","message":"\u003e corresponds to all the hardcoded hashes\n\n^ these are not my favorite tests","commit_id":"c26c7b8edd464d1fcf1d219f7c3fb040914d9da3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6cc95131a12a5d674a22b5569f45ba4cff146073","unresolved":true,"context_lines":[{"line_number":235,"context_line":"            mock_time.time.return_value \u003d 0.0"},{"line_number":236,"context_line":"            # part 0:"},{"line_number":237,"context_line":"            # sda1 is assigned frag index 1 for objs in part 0..."},{"line_number":238,"context_line":"            self.assertEqual("},{"line_number":239,"context_line":"                [\u0027sda0\u0027, \u0027sda1\u0027, \u0027sda2\u0027, \u0027sda3\u0027, \u0027sda4\u0027],"},{"line_number":240,"context_line":"                [n[\u0027device\u0027] for n in self.ec_obj_ring.get_part_nodes(0)])"},{"line_number":241,"context_line":"            #   3c1/hash/xxx#1#d.data  \u003c-- job: sync_only - partners (FI 1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ae095fd1_5117d256","line":238,"updated":"2025-09-16 13:57:47.000000000","message":"just a sanity check really","commit_id":"c26c7b8edd464d1fcf1d219f7c3fb040914d9da3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7dc8a8bb30bee0a819ce82f04fbf3dc69fe520b7","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            mock_time.time.return_value \u003d 0.0"},{"line_number":236,"context_line":"            # part 0:"},{"line_number":237,"context_line":"            # sda1 is assigned frag index 1 for objs in part 0..."},{"line_number":238,"context_line":"            self.assertEqual("},{"line_number":239,"context_line":"                [\u0027sda0\u0027, \u0027sda1\u0027, \u0027sda2\u0027, \u0027sda3\u0027, \u0027sda4\u0027],"},{"line_number":240,"context_line":"                [n[\u0027device\u0027] for n in self.ec_obj_ring.get_part_nodes(0)])"},{"line_number":241,"context_line":"            #   3c1/hash/xxx#1#d.data  \u003c-- job: sync_only - partners (FI 1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a60bf2d_993bf450","line":238,"in_reply_to":"ae095fd1_5117d256","updated":"2025-09-16 14:32:39.000000000","message":"Acknowledged","commit_id":"c26c7b8edd464d1fcf1d219f7c3fb040914d9da3"}]}
