)]}'
{"swift/cli/relinker.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"71837472566c626eadc87a5abcc2f331aa3bac64","unresolved":true,"context_lines":[{"line_number":369,"context_line":"            # most up to date set of files. The new location may have newer"},{"line_number":370,"context_line":"            # files if it has been updated since relinked."},{"line_number":371,"context_line":"            new_hash_path \u003d replace_partition_in_path("},{"line_number":372,"context_line":"                hash_path + \u0027/dummy\u0027, part_power)[:-6]"},{"line_number":373,"context_line":"            # Get on disk data for new and old locations, cleaning up any"},{"line_number":374,"context_line":"            # reclaimable or obsolete files in each. The new location is"},{"line_number":375,"context_line":"            # cleaned up *before* the old location to prevent false negatives"}],"source_content_type":"text/x-python","patch_set":1,"id":"f9e4ccec_4c7cc523","side":"PARENT","line":372,"updated":"2021-03-11 16:01:52.000000000","message":"give the interface this didn\u0027t seem that annoying to me","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"aa5fe375c4d9ba03490ca00b292c99277dd7ebbc","unresolved":true,"context_lines":[{"line_number":369,"context_line":"            # most up to date set of files. The new location may have newer"},{"line_number":370,"context_line":"            # files if it has been updated since relinked."},{"line_number":371,"context_line":"            new_hash_path \u003d replace_partition_in_path("},{"line_number":372,"context_line":"                hash_path + \u0027/dummy\u0027, part_power)[:-6]"},{"line_number":373,"context_line":"            # Get on disk data for new and old locations, cleaning up any"},{"line_number":374,"context_line":"            # reclaimable or obsolete files in each. The new location is"},{"line_number":375,"context_line":"            # cleaned up *before* the old location to prevent false negatives"}],"source_content_type":"text/x-python","patch_set":1,"id":"6b6a6e34_daae081c","side":"PARENT","line":372,"in_reply_to":"f9e4ccec_4c7cc523","updated":"2021-03-11 21:06:09.000000000","message":"It\u0027s the [:-6] that really bugged me -- why the magic number?","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"71837472566c626eadc87a5abcc2f331aa3bac64","unresolved":true,"context_lines":[{"line_number":409,"context_line":"            try:"},{"line_number":410,"context_line":"                df \u003d diskfile_mgr.get_diskfile_from_audit_location(loc)"},{"line_number":411,"context_line":"                with df.open():"},{"line_number":412,"context_line":"                    pass"},{"line_number":413,"context_line":"            except DiskFileQuarantined as exc:"},{"line_number":414,"context_line":"                logger.warning(\u0027ERROR Object %(obj)s failed audit and was\u0027"},{"line_number":415,"context_line":"                               \u0027 quarantined: %(err)r\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"0a29619f_b5228f73","side":"PARENT","line":412,"updated":"2021-03-11 16:01:52.000000000","message":"we don\u0027t need to open it *at all* ?!","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"aa5fe375c4d9ba03490ca00b292c99277dd7ebbc","unresolved":true,"context_lines":[{"line_number":409,"context_line":"            try:"},{"line_number":410,"context_line":"                df \u003d diskfile_mgr.get_diskfile_from_audit_location(loc)"},{"line_number":411,"context_line":"                with df.open():"},{"line_number":412,"context_line":"                    pass"},{"line_number":413,"context_line":"            except DiskFileQuarantined as exc:"},{"line_number":414,"context_line":"                logger.warning(\u0027ERROR Object %(obj)s failed audit and was\u0027"},{"line_number":415,"context_line":"                               \u0027 quarantined: %(err)r\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"08a4694b_87c99237","side":"PARENT","line":412,"in_reply_to":"0a29619f_b5228f73","updated":"2021-03-11 21:06:09.000000000","message":"Not if we\u0027re down checking inodes already.","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"}],"swift/common/utils.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"71837472566c626eadc87a5abcc2f331aa3bac64","unresolved":true,"context_lines":[{"line_number":3275,"context_line":"        \u0027partitions\u0027: partitions_filter,"},{"line_number":3276,"context_line":"        \u0027suffixes\u0027: suffixes_filter,"},{"line_number":3277,"context_line":"        \u0027hashes\u0027: hashes_filter,"},{"line_number":3278,"context_line":"    }"},{"line_number":3279,"context_line":""},{"line_number":3280,"context_line":"    def run_hook(name, path):"},{"line_number":3281,"context_line":"        if hooks[name]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"d86af251_43df1902","line":3278,"updated":"2021-03-11 16:01:52.000000000","message":"something about this made me think class inheritence might be the way to go","commit_id":"93b6acd34bb3398cff3937b01857ace97153c570"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8bd71b233d69f67aba35a566ec98cabf23d47178","unresolved":true,"context_lines":[{"line_number":3279,"context_line":""},{"line_number":3280,"context_line":"    def run_hook(name, path):"},{"line_number":3281,"context_line":"        if hooks[name]:"},{"line_number":3282,"context_line":"            hooks[name](path)"},{"line_number":3283,"context_line":""},{"line_number":3284,"context_line":"    def do_filter(name, parent_dir, items):"},{"line_number":3285,"context_line":"        if filters[name]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3366a04b_4a3f8391","line":3282,"updated":"2021-03-11 21:20:37.000000000","message":"I *like* making the code cleaner, but I didn\u0027t roll these changes into the relinker cleanup patch because (a) it seemed orthogonal to an already substantial patch and (b) I wondered if we couldn\u0027t just have\n\n  def run_hook(hook, path):\n      if hook:\n          hook(path)\n\nand not need the dict lookup","commit_id":"93b6acd34bb3398cff3937b01857ace97153c570"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"71837472566c626eadc87a5abcc2f331aa3bac64","unresolved":true,"context_lines":[{"line_number":3323,"context_line":"                continue"},{"line_number":3324,"context_line":"            for asuffix in do_filter(\u0027suffixes\u0027, part_path, suffixes):"},{"line_number":3325,"context_line":"                suff_path \u003d os.path.join(part_path, asuffix)"},{"line_number":3326,"context_line":"                run_hook(\u0027pre_suffix\u0027, suff_path)"},{"line_number":3327,"context_line":"                try:"},{"line_number":3328,"context_line":"                    hashes \u003d listdir(suff_path)"},{"line_number":3329,"context_line":"                except OSError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"15070ce6_6ab2a375","line":3326,"updated":"2021-03-11 16:01:52.000000000","message":"this is a little cleaner","commit_id":"93b6acd34bb3398cff3937b01857ace97153c570"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"aa5fe375c4d9ba03490ca00b292c99277dd7ebbc","unresolved":true,"context_lines":[{"line_number":3323,"context_line":"                continue"},{"line_number":3324,"context_line":"            for asuffix in do_filter(\u0027suffixes\u0027, part_path, suffixes):"},{"line_number":3325,"context_line":"                suff_path \u003d os.path.join(part_path, asuffix)"},{"line_number":3326,"context_line":"                run_hook(\u0027pre_suffix\u0027, suff_path)"},{"line_number":3327,"context_line":"                try:"},{"line_number":3328,"context_line":"                    hashes \u003d listdir(suff_path)"},{"line_number":3329,"context_line":"                except OSError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"2f15de6a_8ff9da59","line":3326,"in_reply_to":"15070ce6_6ab2a375","updated":"2021-03-11 21:06:09.000000000","message":"I was mostly trying to get rid of the raggedness of those\n\n if self.x:\n     self.x(...)\n\ncalls, especially down at the end of the loop. w/e","commit_id":"93b6acd34bb3398cff3937b01857ace97153c570"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"71837472566c626eadc87a5abcc2f331aa3bac64","unresolved":true,"context_lines":[{"line_number":5809,"context_line":"    \"\"\""},{"line_number":5810,"context_line":""},{"line_number":5811,"context_line":"    path_components \u003d path.split(os.sep)"},{"line_number":5812,"context_line":"    digest \u003d binascii.unhexlify(path_components[-1 if is_hash_dir else -2])"},{"line_number":5813,"context_line":""},{"line_number":5814,"context_line":"    part_shift \u003d 32 - int(part_power)"},{"line_number":5815,"context_line":"    part \u003d struct.unpack_from(\u0027\u003eI\u0027, digest)[0] \u003e\u003e part_shift"}],"source_content_type":"text/x-python","patch_set":1,"id":"c0dcc7c7_a6368161","line":5812,"updated":"2021-03-11 16:01:52.000000000","message":"i wonder if this would read better if we just passed in the configured \"devices\" (i.e. /srv/node) and worked up from there instead of the optional negative index shift","commit_id":"93b6acd34bb3398cff3937b01857ace97153c570"}]}
