)]}'
{"swift/obj/diskfile.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"99440fdb5edfa3a4db182ec31b8269bda83df13e","unresolved":false,"context_lines":[{"line_number":1084,"context_line":"                try:"},{"line_number":1085,"context_line":"                    os.rmdir(hsh_path)"},{"line_number":1086,"context_line":"                except OSError:"},{"line_number":1087,"context_line":"                    pass"},{"line_number":1088,"context_line":"                continue"},{"line_number":1089,"context_line":""},{"line_number":1090,"context_line":"            # ondisk_info has info dicts containing timestamps for those"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_4a84ffd3","side":"PARENT","line":1087,"updated":"2018-06-14 22:01:56.000000000","message":"Why not?\n\nI suppose, because we do it in cleanup_ondisk_files now...","commit_id":"331339246228167dfab61690327fc0c3f2fab8af"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"99440fdb5edfa3a4db182ec31b8269bda83df13e","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"            try:"},{"line_number":1062,"context_line":"                os.rmdir(hsh_path)"},{"line_number":1063,"context_line":"            except OSError:"},{"line_number":1064,"context_line":"                pass"},{"line_number":1065,"context_line":"        return results"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"    def _update_suffix_hashes(self, hashes, ondisk_info):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_8a7a17ee","line":1064,"updated":"2018-06-14 22:01:56.000000000","message":"Should this use _unlink_if_present instead? I\u0027m not sure whether we should go ahead and swallow EPERM and the like, or raise so someone eventually actually *notices* the permissions problem...\n\nMaybe we could *at least* do something like\n\n except OSError as e:\n     if err.errno !\u003d errno.ENOENT:\n         logger.debug(\u0027Error cleaning up empty hash directory %s: %s\u0027, hsh_path, e)","commit_id":"a19548b3e692182b3b228f932e821861eb2c8699"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"99440fdb5edfa3a4db182ec31b8269bda83df13e","unresolved":false,"context_lines":[{"line_number":1508,"context_line":""},{"line_number":1509,"context_line":"        partition_path \u003d get_part_path(dev_path, policy, partition)"},{"line_number":1510,"context_line":"        if suffixes is None:"},{"line_number":1511,"context_line":"            suffixes \u003d self.yield_suffixes(device, partition, policy)"},{"line_number":1512,"context_line":"            considering_all_suffixes \u003d True"},{"line_number":1513,"context_line":"        else:"},{"line_number":1514,"context_line":"            suffixes \u003d ("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_4ad2bfd3","line":1511,"updated":"2018-06-14 22:01:56.000000000","message":"I feel like yield_suffixes should just take partition_path now...","commit_id":"a19548b3e692182b3b228f932e821861eb2c8699"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"99440fdb5edfa3a4db182ec31b8269bda83df13e","unresolved":false,"context_lines":[{"line_number":1565,"context_line":"                    # but if it fails, so will we. An empty directory"},{"line_number":1566,"context_line":"                    # structure won\u0027t cause errors (just slowdown), so we"},{"line_number":1567,"context_line":"                    # ignore the exception."},{"line_number":1568,"context_line":"                    pass"},{"line_number":1569,"context_line":"        if considering_all_suffixes and not have_nonempty_suffix:"},{"line_number":1570,"context_line":"            # There\u0027s nothing of interest in the partition, so delete it"},{"line_number":1571,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_8a645723","line":1568,"updated":"2018-06-14 22:01:56.000000000","message":"Similar comment as in cleanup_ondisk_files...","commit_id":"a19548b3e692182b3b228f932e821861eb2c8699"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"99440fdb5edfa3a4db182ec31b8269bda83df13e","unresolved":false,"context_lines":[{"line_number":1573,"context_line":"                # remove hashes.invalid but leave hashes.pkl, that makes it"},{"line_number":1574,"context_line":"                # look as though the invalidations in hashes.invalid never"},{"line_number":1575,"context_line":"                # occurred."},{"line_number":1576,"context_line":"                _unlink_if_present(os.path.join(partition_path, HASH_FILE))"},{"line_number":1577,"context_line":"                _unlink_if_present(os.path.join(partition_path,"},{"line_number":1578,"context_line":"                                                HASH_INVALIDATIONS_FILE))"},{"line_number":1579,"context_line":"                # This lock is only held by people dealing with the hashes"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_de15343f","line":1576,"updated":"2018-06-14 22:01:56.000000000","message":"So this part was the crux of the bug, yeah? I can\u0027t help but wonder if we should *also* be calling invalidate_hash more, so hashes.pkl and the filesystem kind of stay in sync...","commit_id":"a19548b3e692182b3b228f932e821861eb2c8699"}],"test/unit/obj/test_reconstructor.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"99440fdb5edfa3a4db182ec31b8269bda83df13e","unresolved":false,"context_lines":[{"line_number":1189,"context_line":"        # reconstruct won\u0027t generate any replicate or ssync_calls"},{"line_number":1190,"context_line":"        self.assertFalse(request_log.requests)"},{"line_number":1191,"context_line":"        self.assertFalse(ssync_calls)"},{"line_number":1192,"context_line":"        # and the partition will get removed!"},{"line_number":1193,"context_line":"        self.assertFalse(os.access(part_path, os.F_OK))"},{"line_number":1194,"context_line":""},{"line_number":1195,"context_line":"    def test_process_job_all_success(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_ca79efc5","side":"PARENT","line":1192,"updated":"2018-06-14 22:01:56.000000000","message":"Oh, interesting... so where\u0027s the code that was doing this before?","commit_id":"331339246228167dfab61690327fc0c3f2fab8af"}]}
