)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"99bf6de26a74877f621644fa7c2702a9f245c32e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix test_delete_propagate probe test"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fixes the failure from TestReconstructorRevert.test_delete_propagate"},{"line_number":10,"context_line":"patch 425441 stopped reverting fragments to handoffs."},{"line_number":11,"context_line":"The test started breaking after"},{"line_number":12,"context_line":"fc09dda Merge \"Better optimistic lock in get_hashes\""},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa31d9ce_2199726f","line":10,"updated":"2017-02-10 07:15:24.000000000","message":"honestly, I will still look at why this test didn\u0027t begin to fail just after that patch.","commit_id":"9c80a1e31380eabafb6ec0396a555a1417f6789f"}],"test/probe/test_reconstructor_revert.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9ff8b7082e7d133141d60bfc8f3d3add45f70353","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        except direct_client.DirectClientException as err:"},{"line_number":210,"context_line":"            self.assertEqual(err.http_status, 404)"},{"line_number":211,"context_line":"            self.assertEqual(err.http_headers[\u0027X-Backend-Timestamp\u0027],"},{"line_number":212,"context_line":"                             delete_timestamp)"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            self.fail(\u0027Found obj data on %r\u0027 % hnodes[1])"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_2cf889e5","line":212,"updated":"2017-02-10 07:56:21.000000000","message":"do we have some guarantee that this handoff is holding the frag_index for the repaired primary and not the one that\u0027s still down?\n\nOh... this is trying to sync to *all* primaries because it\u0027s a tombstone only suffix :\\\n\nWell then the assertion is correct - it should still be there.","commit_id":"9c80a1e31380eabafb6ec0396a555a1417f6789f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9ff8b7082e7d133141d60bfc8f3d3add45f70353","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            self.assertEqual(err.http_headers[\u0027X-Backend-Timestamp\u0027],"},{"line_number":222,"context_line":"                             delete_timestamp)"},{"line_number":223,"context_line":"        else:"},{"line_number":224,"context_line":"            self.fail(\u0027Found obj data on %r\u0027 % failed_nodes[0])"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        # repair the second primary"},{"line_number":227,"context_line":"        self.revive_drive(self.device_dir(\u0027object\u0027, failed_nodes[1]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_8c0335b8","line":224,"updated":"2017-02-10 07:56:21.000000000","message":"That makes sense still - if the primary is up it should receive the tombstone sync - the assumption is that suffix is one of those hardcore-homeless-tombstone-only suffixes [1]\n\n1. https://github.com/openstack/swift/blob/6249945a4f3b634b1e298b5a730853d1c1ee8dea/swift/obj/reconstructor.py#L774","commit_id":"9c80a1e31380eabafb6ec0396a555a1417f6789f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9ff8b7082e7d133141d60bfc8f3d3add45f70353","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            self.assertEqual(err.http_status, 404)"},{"line_number":237,"context_line":"            self.assertNotIn(\u0027X-Backend-Timestamp\u0027, err.http_headers)"},{"line_number":238,"context_line":"        else:"},{"line_number":239,"context_line":"            self.fail(\u0027Found obj data on %r\u0027 % hnodes[0])"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        # ... and now it\u0027s on the second failed primary too!"},{"line_number":242,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_2c2b2932","line":239,"updated":"2017-02-10 07:56:21.000000000","message":"sure, all the primaries are repaired now - it better not still be on a handoff","commit_id":"9c80a1e31380eabafb6ec0396a555a1417f6789f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9ff8b7082e7d133141d60bfc8f3d3add45f70353","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            self.assertEqual(err.http_headers[\u0027X-Backend-Timestamp\u0027],"},{"line_number":247,"context_line":"                             delete_timestamp)"},{"line_number":248,"context_line":"        else:"},{"line_number":249,"context_line":"            self.fail(\u0027Found obj data on %r\u0027 % failed_nodes[1])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        # run the reconstructor on the *second* handoff node"},{"line_number":252,"context_line":"        self.reconstructor.once(number\u003dself.config_number(hnodes[1]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_0c82e500","line":249,"updated":"2017-02-10 07:56:21.000000000","message":"yeah, that\u0027s just the opposite of the above - it\u0027s repaired - and the reason we can assert on any primary after running just one handoff is because these are super tombstone jobs that sync to all primaries","commit_id":"9c80a1e31380eabafb6ec0396a555a1417f6789f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9ff8b7082e7d133141d60bfc8f3d3add45f70353","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            self.fail(\u0027Found obj data on %r\u0027 % failed_nodes[1])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        # run the reconstructor on the *second* handoff node"},{"line_number":252,"context_line":"        self.reconstructor.once(number\u003dself.config_number(hnodes[1]))"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        # make sure it\u0027s tombstone was pushed out"},{"line_number":255,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_cc8e0d27","line":252,"updated":"2017-02-10 07:56:21.000000000","message":"again?","commit_id":"9c80a1e31380eabafb6ec0396a555a1417f6789f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9ff8b7082e7d133141d60bfc8f3d3add45f70353","unresolved":false,"context_lines":[{"line_number":258,"context_line":"            self.assertEqual(err.http_status, 404)"},{"line_number":259,"context_line":"            self.assertNotIn(\u0027X-Backend-Timestamp\u0027, err.http_headers)"},{"line_number":260,"context_line":"        else:"},{"line_number":261,"context_line":"            self.fail(\u0027Found obj data on %r\u0027 % hnodes[1])"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        # sanity make sure proxy get can\u0027t find it"},{"line_number":264,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_acaab96e","line":261,"updated":"2017-02-10 07:56:21.000000000","message":"oic, ok... i\u0027m not sure this is the best way to phrase this whole sequence...","commit_id":"9c80a1e31380eabafb6ec0396a555a1417f6789f"}]}
