)]}'
{"swift/obj/diskfile.py":[{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ff7394e6572b3a37fb0db611ca5d6792332561bd","unresolved":false,"context_lines":[{"line_number":1876,"context_line":"        Remove a data file matching the specified timestamp and fragment index"},{"line_number":1877,"context_line":"        from the object directory, and if it is the only data file in the"},{"line_number":1878,"context_line":"        directory then remove the .durable file too. Does not create a"},{"line_number":1879,"context_line":"        tombstone file."},{"line_number":1880,"context_line":""},{"line_number":1881,"context_line":"        Also cleans up any obsolete files."},{"line_number":1882,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da9b358b_3ca255af","line":1879,"updated":"2015-03-31 01:12:20.000000000","message":"this is such an \u0027odd\u0027 case since its so because of multi-FI stuff might be good to explain why EC reverting needs this capability","commit_id":"0cd58d315c471c184f7e09406b0d887d5c6baab6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fb10511d612ee207fbd02511ca3ec1c514252970","unresolved":false,"context_lines":[{"line_number":1876,"context_line":"        Remove a data file matching the specified timestamp and fragment index"},{"line_number":1877,"context_line":"        from the object directory, and if it is the only data file in the"},{"line_number":1878,"context_line":"        directory then remove the .durable file too. Does not create a"},{"line_number":1879,"context_line":"        tombstone file."},{"line_number":1880,"context_line":""},{"line_number":1881,"context_line":"        Also cleans up any obsolete files."},{"line_number":1882,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da9b358b_4c4e7a97","line":1879,"in_reply_to":"da9b358b_3ca255af","updated":"2015-03-31 10:03:34.000000000","message":"Done","commit_id":"0cd58d315c471c184f7e09406b0d887d5c6baab6"}],"swift/obj/ssync_sender.py":[{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"ff7394e6572b3a37fb0db611ca5d6792332561bd","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                    df.open()"},{"line_number":351,"context_line":"                    df.purge(Timestamp(timestamp), self.node[\u0027index\u0027])"},{"line_number":352,"context_line":"                except exceptions.DiskFileError:"},{"line_number":353,"context_line":"                    # TODO: if we did a send_delete, when does any tombstone"},{"line_number":354,"context_line":"                    # get cleaned up if this object should not be on this node?"},{"line_number":355,"context_line":"                    continue"},{"line_number":356,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da9b358b_5c72b94a","line":353,"updated":"2015-03-31 01:12:20.000000000","message":"hmmmm....","commit_id":"0cd58d315c471c184f7e09406b0d887d5c6baab6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fb10511d612ee207fbd02511ca3ec1c514252970","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                    df.open()"},{"line_number":351,"context_line":"                    df.purge(Timestamp(timestamp), self.node[\u0027index\u0027])"},{"line_number":352,"context_line":"                except exceptions.DiskFileError:"},{"line_number":353,"context_line":"                    # TODO: if we did a send_delete, when does any tombstone"},{"line_number":354,"context_line":"                    # get cleaned up if this object should not be on this node?"},{"line_number":355,"context_line":"                    continue"},{"line_number":356,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da9b358b_6c325e12","line":353,"in_reply_to":"da9b358b_5c72b94a","updated":"2015-03-31 10:03:34.000000000","message":"Opened a trello card to discuss this https://trello.com/c/dfHiqRTZ/160-cleaning-up-tombstones-from-handoff-nodes-after-a-sync-revert","commit_id":"0cd58d315c471c184f7e09406b0d887d5c6baab6"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"2de6e6193e3f00830052bea5d1e8763cc6a6dee6","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                if self.job[\u0027policy\u0027].policy_type \u003d\u003d EC_POLICY:"},{"line_number":280,"context_line":"                    if self.job[\u0027sync_type\u0027] \u003d\u003d \u0027sync_revert\u0027:"},{"line_number":281,"context_line":"                        # for a revert job, send the diskfile as is"},{"line_number":282,"context_line":"                        # TODO: not sure it is necessary to add this header"},{"line_number":283,"context_line":"                        extra_headers[\u0027X-Object-Sysmeta-Ec-Archive-Index\u0027] \u003d \\"},{"line_number":284,"context_line":"                            self.job[\u0027frag_index\u0027]"},{"line_number":285,"context_line":"                    elif self.job[\u0027sync_type\u0027] \u003d\u003d \u0027sync_only\u0027:"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa041b7_0f5f7c73","line":282,"updated":"2015-04-02 03:00:43.000000000","message":"so it used to be but a quick probe test w/o it still works but I will circle back after review because I think clay removed some of the backend frag header stuff to get around an issue with GET picking the right FI among many - could be related","commit_id":"845b46a0f5d0f9ca7c50422ae69bfed0b5f056ef"}],"test/unit/obj/test_ssync_sender.py":[{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"2de6e6193e3f00830052bea5d1e8763cc6a6dee6","unresolved":false,"context_lines":[{"line_number":1351,"context_line":"        rx_metadata \u003d dict(rx_df.get_metadata())"},{"line_number":1352,"context_line":"        for k, v in tx_df.get_metadata().iteritems():"},{"line_number":1353,"context_line":"            self.assertEqual(v, rx_metadata.pop(k))"},{"line_number":1354,"context_line":"        # ugh, ssync duplicates ETag with Etag so have to clear it out here"},{"line_number":1355,"context_line":"        rx_metadata.pop(\u0027Etag\u0027)"},{"line_number":1356,"context_line":"        self.assertFalse(rx_metadata)"},{"line_number":1357,"context_line":"        if frag_index:"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa041b7_cf22b4b9","line":1354,"updated":"2015-04-02 03:00:43.000000000","message":"really?  in send_put() when headers or built from meta??","commit_id":"845b46a0f5d0f9ca7c50422ae69bfed0b5f056ef"}]}
