)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d367f5352f30159bfc70fd7a5b0c5afa4a35a5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"bd8bf5c1_8df11051","updated":"2023-09-26 19:54:52.000000000","message":"```\nvagrant@vagrant:~/swift$ git log --oneline -n 1\nef698d227 (HEAD -\u003e p-s3-segments-policy) wip: s3 mixed policy multipart uploads\n\nvagrant@vagrant:~/swift$ swift-init restart proxy\nSignal proxy-server  pid: 21319  signal: Signals.SIGTERM\nSignal proxy-server  pid: 21320  signal: Signals.SIGTERM\nproxy-server (21319) appears to have stopped\nproxy-server (21320) appears to have stopped\nWARNING: Unable to modify max process limit.  Running as non-root?\nStarting proxy-server...(/etc/swift/proxy-server/proxy-noauth.conf.d)\nStarting proxy-server...(/etc/swift/proxy-server/proxy-server.conf.d)\n\nvagrant@vagrant:~/swift$ aws s3api create-bucket --bucket test\n{\n    \"Location\": \"/test\"\n}\n\nvagrant@vagrant:~/swift$ swift post test -H \u0027x-container-meta-s3-segments-policy: 1\u0027\n\nvagrant@vagrant:~/swift$ aws s3api create-multipart-upload --bucket test --key junk\n{\n    \"Bucket\": \"test\",\n    \"Key\": \"junk\",\n    \"UploadId\": \"ZWIyNzU5OTEtZWI3Ni00NTYyLTkxZmYtOWU3NGRlMTY3MjQ2\"\n}\n\nvagrant@vagrant:~/swift$ swift list\ntest\ntest+segments\ntest+segments1\n\nvagrant@vagrant:~/swift$ swift stat test|grep Storage-Policy\n       X-Storage-Policy: default\nvagrant@vagrant:~/swift$ swift stat test+segments|grep Storage-Policy\n      X-Storage-Policy: default\nvagrant@vagrant:~/swift$ swift stat test+segments1|grep Storage-Policy\n      X-Storage-Policy: ec\n\nvagrant@vagrant:~/swift$ aws s3api upload-part --bucket test  --key junk --part-number 1 --upload-id \"ZWIyNzU5OTEtZWI3Ni00NTYyLTkxZmYtOWU3NGRlMTY3MjQ2\" --body AUTHORS\n{\n    \"ETag\": \"\\\"2e8b33b02f7628f06aa5c06bced5a5ff\\\"\"\n}\n\nvagrant@vagrant:~/swift$ aws s3api upload-part --bucket test  --key junk --part-number 2 --upload-id \"ZWIyNzU5OTEtZWI3Ni00NTYyLTkxZmYtOWU3NGRlMTY3MjQ2\" --body LICENSE\n{\n    \"ETag\": \"\\\"3b83ef96387f14655fc854ddc3c6bd57\\\"\"\n}\n\nvagrant@vagrant:~/swift$ aws s3api complete-multipart-upload --bucket test --key junk --upload-id \"ZWIyNzU5OTEtZWI3Ni00NTYyLTkxZmYtOWU3NGRlMTY3MjQ2\" --multipart-upload \u0027{\"Parts\":[ {\"ETag\": \"2e8b33b02f7628f06aa5c06bced5a5ff\", \"PartNumber\": 1}, {\"ETag\": \"3b83ef96387f14655fc854ddc3c6bd57\", \"PartNumber\":2}]}\u0027\n{\n    \"Location\": \"http://saio3:8080/test/junk\",\n    \"Bucket\": \"test\",\n    \"Key\": \"junk\",\n    \"ETag\": \"\\\"fc4bd004ac39e5f3edffdc217eff1a2a-2\\\"\"\n}\n\nvagrant@vagrant:~/swift$ swift list test\njunk\n\nvagrant@vagrant:~/swift$ swift list test+segments\njunk/ZWIyNzU5OTEtZWI3Ni00NTYyLTkxZmYtOWU3NGRlMTY3MjQ2\n\nvagrant@vagrant:~/swift$ swift list test+segments1\njunk/ZWIyNzU5OTEtZWI3Ni00NTYyLTkxZmYtOWU3NGRlMTY3MjQ2/1\njunk/ZWIyNzU5OTEtZWI3Ni00NTYyLTkxZmYtOWU3NGRlMTY3MjQ2/2\n\nvagrant@vagrant:~/swift$ swift download test junk -o -|grep -e \"Apache\" -e \"coles\"\nAlistair Coles (alistairncoles@gmail.com)\n                                 Apache License\n   APPENDIX: How to apply the Apache License to your work.\n      To apply the Apache License to your work, attach the following\n   Licensed under the Apache License, Version 2.0 (the \"License\");```","commit_id":"a676db8d03f5ab642280343bc3a3e38fb27a3292"}],"swift/common/middleware/s3api/controllers/multi_upload.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d367f5352f30159bfc70fd7a5b0c5afa4a35a5e","unresolved":true,"context_lines":[{"line_number":162,"context_line":"    # TODO: fix default to be marker container policy"},{"line_number":163,"context_line":"    # TODO: normalize s3 vs swift meta keys"},{"line_number":164,"context_line":"    seg_policy_index \u003d int("},{"line_number":165,"context_line":"        marker_resp.headers.get(\u0027x-amz-meta-s3-segments-policy\u0027, 0))"},{"line_number":166,"context_line":"    if seg_policy_index:"},{"line_number":167,"context_line":"        return req.container_name + MULTIUPLOAD_SUFFIX + str(seg_policy_index)"},{"line_number":168,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"72a8fda2_fbf14394","line":165,"updated":"2023-09-26 19:54:52.000000000","message":"user meta for dev convenience, but sysmeta would be better.\n\nTBD how this is set.","commit_id":"a676db8d03f5ab642280343bc3a3e38fb27a3292"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d367f5352f30159bfc70fd7a5b0c5afa4a35a5e","unresolved":true,"context_lines":[{"line_number":1371,"context_line":"        # because it\u0027ll contaminate sub-requests"},{"line_number":1372,"context_line":"        spi_header \u003d \u0027X-Backend-Storage-Policy-Index\u0027"},{"line_number":1373,"context_line":"        if spi_header in sw_req.headers:"},{"line_number":1374,"context_line":"            resp.headers[spi_header] \u003d sw_req.headers[spi_header]"},{"line_number":1375,"context_line":"        status \u003d resp.status_int  # pylint: disable-msg\u003dE1101"},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"        if not self.user_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"f8d55c01_67e8ce60","line":1374,"updated":"2023-09-26 19:54:52.000000000","message":"ripped off from https://review.opendev.org/c/openstack/swift/+/866509","commit_id":"a676db8d03f5ab642280343bc3a3e38fb27a3292"}]}
