)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b1bfa0e40fb241f7256ed2a4d5a157e8128a61d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"039faa19_243659e1","updated":"2022-09-27 16:04:07.000000000","message":"looks neat!  might be just the sort of thing that we need.","commit_id":"1fcabb76d68aca775043b18b2c4292e6f98a4a95"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4529cfd6927eff1190be361c0f6f66847162f97f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4fd72cfa_5685f5ce","updated":"2022-11-14 15:57:17.000000000","message":"Does this change require or relate to the last-primaries table in ringv2?","commit_id":"88eab597cd5670088dd906d1e14ee29b83cae7eb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"124caf86eb55950a7401dba9d308496bb48a0408","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0ddc37fe_e3c625b6","in_reply_to":"4fd72cfa_5685f5ce","updated":"2022-11-14 17:47:03.000000000","message":"It\u0027s a pre-req for the next change -- I\u0027m rewriting most all of the replicator\u0027s update() method to try my damnedest to avoid unnecessary I/O, whether that\u0027s rsyncs among primaries while there\u0027s a last-primary waiting in the wings, or extra suffix hashing spurred by new primaries invalidating a bunch of suffixes on the established primaries because they only had a partial picture.\n\nThis could be broken out separately (if it\u0027d be useful for the overseer, for example) and merged ahead of everything else -- but this is the point in this chain at which it becomes necessary.","commit_id":"88eab597cd5670088dd906d1e14ee29b83cae7eb"}],"swift/obj/server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b1bfa0e40fb241f7256ed2a4d5a157e8128a61d0","unresolved":true,"context_lines":[{"line_number":1296,"context_line":"        - ``REPLICATE /\u003cdev\u003e/\u003cpart\u003e/\u003csuffix\u003e[-\u003csuffix\u003e][...]`` invalidates the"},{"line_number":1297,"context_line":"          provided suffixes. No hashes are read or returned."},{"line_number":1298,"context_line":"        - ``REPLICATE /\u003cdev\u003e/\u003cpart\u003e/hashes`` consolidates hashes and returns"},{"line_number":1299,"context_line":"          the result *without* rehashing."},{"line_number":1300,"context_line":""},{"line_number":1301,"context_line":"        Note that the name REPLICATE is preserved for historical reasons as"},{"line_number":1302,"context_line":"        this verb really just returns the hashes information for the specified"}],"source_content_type":"text/x-python","patch_set":1,"id":"c26ffdae_2cb28888","line":1299,"updated":"2022-09-27 16:04:07.000000000","message":"hey at least there\u0027s some docs about this api now!","commit_id":"1fcabb76d68aca775043b18b2c4292e6f98a4a95"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b1bfa0e40fb241f7256ed2a4d5a157e8128a61d0","unresolved":true,"context_lines":[{"line_number":1308,"context_line":"        if suffix_parts \u003d\u003d \u0027hashes\u0027:"},{"line_number":1309,"context_line":"            dev_path \u003d mgr.get_dev_path(device)"},{"line_number":1310,"context_line":"            if not dev_path:"},{"line_number":1311,"context_line":"                resp \u003d HTTPInsufficientStorage(drive\u003ddevice, request\u003drequest)"},{"line_number":1312,"context_line":"            else:"},{"line_number":1313,"context_line":"                partition_path \u003d get_part_path(dev_path, policy, partition)"},{"line_number":1314,"context_line":"                hashes \u003d mgr.consolidate_hashes(partition_path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7cc5cd98_d5511466","line":1311,"updated":"2022-09-27 16:04:07.000000000","message":"this is sort of an akward check - it looks like the manager does something similar at the top of get_hashes","commit_id":"1fcabb76d68aca775043b18b2c4292e6f98a4a95"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b1bfa0e40fb241f7256ed2a4d5a157e8128a61d0","unresolved":true,"context_lines":[{"line_number":1311,"context_line":"                resp \u003d HTTPInsufficientStorage(drive\u003ddevice, request\u003drequest)"},{"line_number":1312,"context_line":"            else:"},{"line_number":1313,"context_line":"                partition_path \u003d get_part_path(dev_path, policy, partition)"},{"line_number":1314,"context_line":"                hashes \u003d mgr.consolidate_hashes(partition_path)"},{"line_number":1315,"context_line":"                resp \u003d Response(body\u003dpickle.dumps(hashes, protocol\u003d2))"},{"line_number":1316,"context_line":"        else:"},{"line_number":1317,"context_line":"            suffixes \u003d suffix_parts.split(\u0027-\u0027) if suffix_parts else []"}],"source_content_type":"text/x-python","patch_set":1,"id":"6b41c474_010bb3be","line":1314,"updated":"2022-09-27 16:04:07.000000000","message":"and it seems this api has always existed on the manager (weird staticmethod thing) and we\u0027ve just never exposed it to remote nodes before...","commit_id":"1fcabb76d68aca775043b18b2c4292e6f98a4a95"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b1bfa0e40fb241f7256ed2a4d5a157e8128a61d0","unresolved":true,"context_lines":[{"line_number":1318,"context_line":"            try:"},{"line_number":1319,"context_line":"                hashes \u003d mgr.get_hashes("},{"line_number":1320,"context_line":"                    device, partition, suffixes, policy,"},{"line_number":1321,"context_line":"                    skip_rehash\u003dbool(suffixes))"},{"line_number":1322,"context_line":"            except DiskFileDeviceUnavailable:"},{"line_number":1323,"context_line":"                resp \u003d HTTPInsufficientStorage(drive\u003ddevice, request\u003drequest)"},{"line_number":1324,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"616bb489_ba79096e","line":1321,"updated":"2022-09-27 16:04:07.000000000","message":"so we *always* skip_rehash when there\u0027s suffixes... I don\u0027t think I knew that, did it always work this way?\n\noh, cool https://review.opendev.org/c/openstack/swift/+/758636","commit_id":"1fcabb76d68aca775043b18b2c4292e6f98a4a95"}]}
