)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5dcd51a6172b5f79a5fd4bd1c937d0c93ea43331","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e9d6562d_11cd73dd","updated":"2026-08-20 18:53:09.000000000","message":"I think \"--policy is required for audit\" would be more defensible and obvious\n\nI\u0027m not finding the default as written here particuarlly obvious outside of the specific context of \"we happen to want to audit policy 1 on two of our clusters\"","commit_id":"0080342facf3f6193556ec1e23287596b5a23ad4"},{"author":{"_account_id":38767,"name":"Wael Halbawi","display_name":"Wael Halbawi","email":"whalbawi@nvidia.com","username":"whalbawi"},"change_message_id":"54eada75b38e5ddbadfc76c1f857fd6f80e16ada","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"146073e4_f2d475d2","in_reply_to":"e9d6562d_11cd73dd","updated":"2026-08-20 22:49:04.000000000","message":"I like this proposal.","commit_id":"0080342facf3f6193556ec1e23287596b5a23ad4"},{"author":{"_account_id":38767,"name":"Wael Halbawi","display_name":"Wael Halbawi","email":"whalbawi@nvidia.com","username":"whalbawi"},"change_message_id":"54eada75b38e5ddbadfc76c1f857fd6f80e16ada","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7920e7fc_7e16b696","updated":"2026-08-20 22:49:04.000000000","message":"Thanks for the review @clay.gerrard@gmail.com. I think requiring the `--policy` flag is much better change for the purpose of this patch. Thanks for the suggestion!","commit_id":"788605eb9fc9f01d7e91ce8a051b5200a042a2bc"}],"doc/source/ring_partpower.rst":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5dcd51a6172b5f79a5fd4bd1c937d0c93ea43331","unresolved":true,"context_lines":[{"line_number":169,"context_line":"    Because an uncleaned hash directory for an EC storage policy usually"},{"line_number":170,"context_line":"    results in reconstructor errors, running ``swift-object-relinker audit``"},{"line_number":171,"context_line":"    *without* specifying a policy defaults to processing policy 1, if it is"},{"line_number":172,"context_line":"    of the type EC."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"The audit is only available when no partition power increase is in progress;"},{"line_number":175,"context_line":"in other words, the ring\u0027s ``next_part_power`` must be ``None``. It scans the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"cd956c0c_0e0a730f","line":172,"updated":"2026-08-20 18:53:09.000000000","message":"i\u0027m not sure I buy it - maybe the default should be `[p for p in POLICIES if p.type \u003d\u003d EC]`","commit_id":"0080342facf3f6193556ec1e23287596b5a23ad4"},{"author":{"_account_id":38767,"name":"Wael Halbawi","display_name":"Wael Halbawi","email":"whalbawi@nvidia.com","username":"whalbawi"},"change_message_id":"54eada75b38e5ddbadfc76c1f857fd6f80e16ada","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    Because an uncleaned hash directory for an EC storage policy usually"},{"line_number":170,"context_line":"    results in reconstructor errors, running ``swift-object-relinker audit``"},{"line_number":171,"context_line":"    *without* specifying a policy defaults to processing policy 1, if it is"},{"line_number":172,"context_line":"    of the type EC."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"The audit is only available when no partition power increase is in progress;"},{"line_number":175,"context_line":"in other words, the ring\u0027s ``next_part_power`` must be ``None``. It scans the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1c87c2fc_1695a391","line":172,"in_reply_to":"cd956c0c_0e0a730f","updated":"2026-08-20 22:49:04.000000000","message":"Acknowledged","commit_id":"0080342facf3f6193556ec1e23287596b5a23ad4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5dcd51a6172b5f79a5fd4bd1c937d0c93ea43331","unresolved":true,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    Keep ``object-replicator`` stopped when auditing a replicated policy."},{"line_number":187,"context_line":"    Otherwise, a stale hash directory may be processed as a handoff for"},{"line_number":188,"context_line":"    the wrong partition before the audit can quarantine it."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"The relinker persists progress for each device and policy data directory in"},{"line_number":191,"context_line":"``\u003cdevices\u003e/\u003cdevice\u003e/relink.\u003cdata-dir\u003e.json``. For example, with the default"}],"source_content_type":"text/x-rst","patch_set":2,"id":"0c52600d_eeebb123","line":188,"updated":"2026-08-20 18:53:09.000000000","message":"not that it\u0027s called out explicitly, but I think maybe this is the best reason NOT to audit replicated policies by default.  You sort of *need* to audit replicated policies kind of more \"on purpose\"","commit_id":"0080342facf3f6193556ec1e23287596b5a23ad4"},{"author":{"_account_id":38767,"name":"Wael Halbawi","display_name":"Wael Halbawi","email":"whalbawi@nvidia.com","username":"whalbawi"},"change_message_id":"54eada75b38e5ddbadfc76c1f857fd6f80e16ada","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    Keep ``object-replicator`` stopped when auditing a replicated policy."},{"line_number":187,"context_line":"    Otherwise, a stale hash directory may be processed as a handoff for"},{"line_number":188,"context_line":"    the wrong partition before the audit can quarantine it."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"The relinker persists progress for each device and policy data directory in"},{"line_number":191,"context_line":"``\u003cdevices\u003e/\u003cdevice\u003e/relink.\u003cdata-dir\u003e.json``. For example, with the default"}],"source_content_type":"text/x-rst","patch_set":2,"id":"d76732e9_d6b27642","line":188,"in_reply_to":"0c52600d_eeebb123","updated":"2026-08-20 22:49:04.000000000","message":"Acknowledged","commit_id":"0080342facf3f6193556ec1e23287596b5a23ad4"}],"swift/cli/relinker.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5dcd51a6172b5f79a5fd4bd1c937d0c93ea43331","unresolved":true,"context_lines":[{"line_number":1088,"context_line":"            format\u003d\u0027%(message)s\u0027,"},{"line_number":1089,"context_line":"            level\u003dgetattr(logging, level),"},{"line_number":1090,"context_line":"            filename\u003dargs.logfile)"},{"line_number":1091,"context_line":"        logger \u003d SwiftLogAdapter(logging.getLogger(), server\u003d\u0027relinker\u0027)"},{"line_number":1092,"context_line":""},{"line_number":1093,"context_line":"    conf.update({"},{"line_number":1094,"context_line":"        \u0027swift_dir\u0027: args.swift_dir or conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"e9fcb218_a5bf13ee","line":1091,"updated":"2026-08-20 18:53:09.000000000","message":"maybe better as:\n\n```\npolicies \u003d set(args.policies)\nif not policies:\n    if args.action \u003d\u003d AUDIT:\n        parser.error(\u0027y u no --policy\u0027)\n    else:\n        # ring metadata will sort them out\n        policies \u003d POLICIES\n```","commit_id":"0080342facf3f6193556ec1e23287596b5a23ad4"},{"author":{"_account_id":38767,"name":"Wael Halbawi","display_name":"Wael Halbawi","email":"whalbawi@nvidia.com","username":"whalbawi"},"change_message_id":"54eada75b38e5ddbadfc76c1f857fd6f80e16ada","unresolved":false,"context_lines":[{"line_number":1088,"context_line":"            format\u003d\u0027%(message)s\u0027,"},{"line_number":1089,"context_line":"            level\u003dgetattr(logging, level),"},{"line_number":1090,"context_line":"            filename\u003dargs.logfile)"},{"line_number":1091,"context_line":"        logger \u003d SwiftLogAdapter(logging.getLogger(), server\u003d\u0027relinker\u0027)"},{"line_number":1092,"context_line":""},{"line_number":1093,"context_line":"    conf.update({"},{"line_number":1094,"context_line":"        \u0027swift_dir\u0027: args.swift_dir or conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"7b6a2fed_532a1354","line":1091,"in_reply_to":"e9fcb218_a5bf13ee","updated":"2026-08-20 22:49:04.000000000","message":"Acknowledged","commit_id":"0080342facf3f6193556ec1e23287596b5a23ad4"}]}
