)]}'
{"swift/obj/reconstructor.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"0162f80060905d9450b5c3a8e066fc48faa4ab2f","unresolved":false,"context_lines":[{"line_number":719,"context_line":"                                         job[\u0027frag_index\u0027],"},{"line_number":720,"context_line":"                                         remote_suffixes,"},{"line_number":721,"context_line":"                                         job[\u0027policy\u0027].get_backend_index("},{"line_number":722,"context_line":"                                             node[\u0027index\u0027]))"},{"line_number":723,"context_line":"        # now recalculate local hashes for suffixes that don\u0027t"},{"line_number":724,"context_line":"        # match so we\u0027re comparing the latest"},{"line_number":725,"context_line":"        local_suff \u003d self._get_hashes(job[\u0027local_dev\u0027][\u0027device\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfdaf3ff_08e25430","line":722,"updated":"2019-01-15 10:59:03.000000000","message":"I see. get_suffix_delta takes remote \"frag_index\" then, probably setting node[\u0027index\u0027] will cause to return None value because the remote suffixes will not include the node index in the response.\n\nThat makes me sense, always duplicate region requires to reconstruct the fragment.\n\nhttps://github.com/openstack/swift/blob/master/swift/obj/reconstructor.py#L642\n\nhttps://github.com/openstack/swift/blob/master/swift/obj/reconstructor.py#L650-L651","commit_id":"1d9204ac4362af75d0a6ac221cf4cc44cd003ec6"}],"test/unit/obj/test_reconstructor.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"0162f80060905d9450b5c3a8e066fc48faa4ab2f","unresolved":false,"context_lines":[{"line_number":3455,"context_line":"            \u0027abc\u0027: {job[\u0027frag_index\u0027]: \u0027hash\u0027, None: \u0027hash\u0027},"},{"line_number":3456,"context_line":"        }"},{"line_number":3457,"context_line":"        remote_index \u003d ("},{"line_number":3458,"context_line":"            job[\u0027frag_index\u0027] - 1) % self.policy.ec_n_unique_fragments"},{"line_number":3459,"context_line":"        remote_hashes \u003d {"},{"line_number":3460,"context_line":"            \u0027123\u0027: {remote_index: \u0027hash\u0027, None: \u0027hash\u0027},"},{"line_number":3461,"context_line":"            \u0027abc\u0027: {remote_index: \u0027hash\u0027, None: \u0027hash\u0027},"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfdaf3ff_c5651547","line":3458,"updated":"2019-01-15 10:59:03.000000000","message":"nits)\n remote_index \u003d self.policy.get_backend_index(node[\u0027index\u0027])\n\nseems intuitive.","commit_id":"1d9204ac4362af75d0a6ac221cf4cc44cd003ec6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4f48fa2cfb3a9a3f2e22853e69c72e7a2e2926d5","unresolved":false,"context_lines":[{"line_number":3455,"context_line":"            \u0027abc\u0027: {job[\u0027frag_index\u0027]: \u0027hash\u0027, None: \u0027hash\u0027},"},{"line_number":3456,"context_line":"        }"},{"line_number":3457,"context_line":"        remote_index \u003d ("},{"line_number":3458,"context_line":"            job[\u0027frag_index\u0027] - 1) % self.policy.ec_n_unique_fragments"},{"line_number":3459,"context_line":"        remote_hashes \u003d {"},{"line_number":3460,"context_line":"            \u0027123\u0027: {remote_index: \u0027hash\u0027, None: \u0027hash\u0027},"},{"line_number":3461,"context_line":"            \u0027abc\u0027: {remote_index: \u0027hash\u0027, None: \u0027hash\u0027},"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfdaf3ff_04047149","line":3458,"in_reply_to":"bfdaf3ff_c5651547","updated":"2019-01-15 21:35:11.000000000","message":"+1 -- now I\u0027m worried about job[\u0027frag_index\u0027] being zero (which apparently it *is*), and what that means for the test :-/\n\nI guess it\u0027s OK (py2 and py3 seem to agree that (-1) % 7 \u003d\u003d 6) but I don\u0027t really want that cognitive overhead while I\u0027m reading tests, particularly when other languages (such as JavaScript or C) would say -1 instead of 6...","commit_id":"1d9204ac4362af75d0a6ac221cf4cc44cd003ec6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4f48fa2cfb3a9a3f2e22853e69c72e7a2e2926d5","unresolved":false,"context_lines":[{"line_number":3467,"context_line":"            suffixes \u003d self.reconstructor._get_suffixes_to_sync(job, node)"},{"line_number":3468,"context_line":"        self.assertEqual([node[\u0027replication_ip\u0027]],"},{"line_number":3469,"context_line":"                         [r[\u0027ip\u0027] for r in request_log.requests])"},{"line_number":3470,"context_line":"        self.assertEqual(suffixes, [])"},{"line_number":3471,"context_line":""},{"line_number":3472,"context_line":"    def test_get_suffix_delta(self):"},{"line_number":3473,"context_line":"        # different"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfdaf3ff_047791d6","line":3470,"updated":"2019-01-15 21:35:11.000000000","message":"Backing out the changes in swift/, this pops real pretty:\n\nFAIL: test_get_suffixes_in_sync (test.unit.obj.test_reconstructor.TestObjectReconstructorECDuplicationFactor)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n  File \"/vagrant/swift/test/unit/obj/test_reconstructor.py\", line 3470, in test_get_suffixes_in_sync\n    self.assertEqual(suffixes, [])\nAssertionError: Lists differ: [\u0027123\u0027, \u0027abc\u0027] !\u003d []\n \nFirst list contains 2 additional elements.\nFirst extra element 0:\n\u0027123\u0027\n \n- [\u0027123\u0027, \u0027abc\u0027]\n+ []","commit_id":"1d9204ac4362af75d0a6ac221cf4cc44cd003ec6"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"0162f80060905d9450b5c3a8e066fc48faa4ab2f","unresolved":false,"context_lines":[{"line_number":3507,"context_line":"        self.assertEqual(suffs, [\u0027123\u0027])"},{"line_number":3508,"context_line":""},{"line_number":3509,"context_line":"    def test_process_job_primary_in_sync(self):"},{"line_number":3510,"context_line":"        partition \u003d 0"},{"line_number":3511,"context_line":"        part_nodes \u003d self.policy.object_ring.get_part_nodes(partition)"},{"line_number":3512,"context_line":"        local_dev \u003d random.choice(part_nodes)"},{"line_number":3513,"context_line":"        frag_index \u003d self.policy.get_backend_index(local_dev[\u0027index\u0027])"},{"line_number":3514,"context_line":"        sync_to \u003d object_reconstructor._get_partners("},{"line_number":3515,"context_line":"            local_dev[\u0027index\u0027], part_nodes)"},{"line_number":3516,"context_line":"        # setup left and right hashes"},{"line_number":3517,"context_line":"        stub_hashes \u003d {"},{"line_number":3518,"context_line":"            \u0027123\u0027: {frag_index: \u0027hash\u0027, None: \u0027hash\u0027},"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfdaf3ff_08181473","line":3515,"range":{"start_line":3510,"start_character":0,"end_line":3515,"end_character":43},"updated":"2019-01-15 10:59:03.000000000","message":"I prefer this style to old one. It looks good changes.","commit_id":"1d9204ac4362af75d0a6ac221cf4cc44cd003ec6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4f48fa2cfb3a9a3f2e22853e69c72e7a2e2926d5","unresolved":false,"context_lines":[{"line_number":3518,"context_line":"            \u0027123\u0027: {frag_index: \u0027hash\u0027, None: \u0027hash\u0027},"},{"line_number":3519,"context_line":"            \u0027abc\u0027: {frag_index: \u0027hash\u0027, None: \u0027hash\u0027},"},{"line_number":3520,"context_line":"        }"},{"line_number":3521,"context_line":"        left_index \u003d self.policy.get_backend_index(sync_to[0][\u0027index\u0027])"},{"line_number":3522,"context_line":"        left_hashes \u003d {"},{"line_number":3523,"context_line":"            \u0027123\u0027: {left_index: \u0027hash\u0027, None: \u0027hash\u0027},"},{"line_number":3524,"context_line":"            \u0027abc\u0027: {left_index: \u0027hash\u0027, None: \u0027hash\u0027},"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfdaf3ff_c492e9f6","line":3521,"range":{"start_line":3521,"start_character":8,"end_line":3521,"end_character":18},"updated":"2019-01-15 21:35:11.000000000","message":"Off-topic: I feel like these should get named left_frag_index/right_frag_index now...","commit_id":"1d9204ac4362af75d0a6ac221cf4cc44cd003ec6"}]}
