)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"507f4016a938a91b3e593697053ea8ccb4397a70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0b150cfa_463850bc","updated":"2023-02-27 06:10:09.000000000","message":"With the onset of a new x-header api namespace for account quotas, and the fact they\u0027re getting more complicated we really need to document it either in api docs or at least the middleware docstring (-1).\n\nAlso some question inline about how I user or even an op for expect this to all work.","commit_id":"af668b014f01403eeeabebbe9e968d9d5ab5b4b4"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"b83671c45641411be9ee25e71c753784a88dc741","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"6ea43707_70ee11f1","updated":"2023-03-09 06:38:02.000000000","message":"Hmm when testing this patch on my VSAIO, I have a global bytes set at 10 and a default policy set to 5, but the 413 is only raised when I get above the global.. allowing me to go above the policy level:\n\n  vagrant@saio1:~/swift$ curl -i -H \"X-Auth-Token: $OS_AUTH_TOKEN\" http://saio1:8080/v1/AUTH_test/\n  HTTP/1.1 200 OK\n  Content-Type: text/plain; charset\u003dutf-8\n  Content-Length: 5\n  X-Account-Container-Count: 2\n  X-Account-Object-Count: 3\n  X-Account-Bytes-Used: 7\n  X-Timestamp: 1678342676.65588\n  X-Account-Storage-Policy-Default-Container-Count: 1\n  X-Account-Storage-Policy-Default-Object-Count: 3\n  X-Account-Storage-Policy-Default-Bytes-Used: 7\n  X-Account-Storage-Policy-Ec-Container-Count: 1\n  X-Account-Storage-Policy-Ec-Object-Count: 0\n  X-Account-Storage-Policy-Ec-Bytes-Used: 0\n  X-Account-Meta-Quota-Bytes: 10\n  Accept-Ranges: bytes\n  X-Account-Quota-Bytes-Policy-Default: 5\n  Vary: Accept\n  X-Trans-Id: txd051f7bea49e4cc486933-0064097db0\n  X-Openstack-Request-Id: txd051f7bea49e4cc486933-0064097db0\n  Date: Thu, 09 Mar 2023 06:33:20 GMT\n\n  c\n  ec\n\n  vagrant@saio1:~/swift$ curl -i -H \"X-Auth-Token: $OS_AUTH_TOKEN\" http://saio1:8080/v1/AUTH_test/c/o4 -X PUT --data-binary \"4\"\n  HTTP/1.1 201 Created\n  Content-Type: text/html; charset\u003dUTF-8\n  Content-Length: 0\n  Etag: \"a87ff679a2f3e71d9181a67b7542122c\"\n  Last-Modified: Thu, 09 Mar 2023 06:33:36 GMT\n  X-Trans-Id: tx09dfd989c4b9488781747-0064097dbf\n  X-Openstack-Request-Id: tx09dfd989c4b9488781747-0064097dbf\n  Date: Thu, 09 Mar 2023 06:33:35 GMT\n\nThat last one shouldn\u0027t have let me do it, because it would bring my default-bytes-used up to 8 which is \u003e `X-Account-Quota-Bytes-Policy-Default: 5`  \n\nNeeed to head to dinner, could be a problem from my side.. I\u0027ll doubel check I\u0027m logged in as tester.","commit_id":"13556c359684a97648c9819fec4f090d1955c3b8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9896b2f02c20d9f58d6bbcc55e757eb59f3024fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"66b9bec3_4b48c3b1","updated":"2023-03-07 20:48:56.000000000","message":"If this lands, I should update https://review.opendev.org/c/openstack/python-swiftclient/+/848926 too","commit_id":"13556c359684a97648c9819fec4f090d1955c3b8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"525305505af2a9ba7820fa8aaccb1c81257ccb60","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"26d635d1_4b62417e","updated":"2023-03-09 06:41:24.000000000","message":"Yeah I am:\n\n  vagrant@saio1:~/swift$ env |grep ST\n  ST_KEY\u003dtesting\n  ST_USER\u003dtest:tester\n  OS_STORAGE_URL\u003dhttp://saio1:8080/v1/AUTH_test\n  ST_AUTH\u003dhttp://saio1:8080/auth/v1.0\n  vagrant@saio1:~/swift$ env |grep OS\n  NOSE_INCLUDE_EXE\u003dtrue\n  OS_AUTH_TOKEN\u003dAUTH_tkc750d17c44f542e99e272063cd632ed7\n  OS_STORAGE_URL\u003dhttp://saio1:8080/v1/AUTH_test\n  OS_AUTH_URL\u003dhttp://saio1:8080/auth/v1.0\n  LESSCLOSE\u003d/usr/bin/lesspipe %s %s\n  OS_USERNAME\u003dtest:tester\n  OS_PASSWORD\u003dtesting\n\nThen if I try and push it above 10 byte global:\n\n  vagrant@saio1:~/swift$ curl -i -H \"X-Auth-Token: $OS_AUTH_TOKEN\" http://saio1:8080/v1/AUTH_test/c/o5 -X \n  PUT --data-binary \"asdf\"\n  HTTP/1.1 413 Request Entity Too Large\n  Content-Type: text/html; charset\u003dUTF-8\n  Content-Length: 21\n  X-Trans-Id: tx13cb6a791dff4be391a7e-0064097f4a\n  X-Openstack-Request-Id: tx13cb6a791dff4be391a7e-0064097f4a\n  Date: Thu, 09 Mar 2023 06:40:10 GMT \n  \n  Upload exceeds quota.\n  \nNot what I expected. I\u0027ll debug it either tomorrow or after dinner. ","commit_id":"13556c359684a97648c9819fec4f090d1955c3b8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"6d5b519fa70259e7b95d53b5f60d8836e2b44762","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"faf378a9_f51be831","updated":"2023-03-09 08:38:37.000000000","message":"Yup, memcached account info. So 2 things testing at home, make sure you run container-updaters and clear memcache so the quota checking will work. Tested on my vsaio is works well and as expected. Global is the limit for the account in enforced even if all the policy limits aren\u0027t hit. Nice\n\nJust need to remeber it\u0027s a soft limit, as while the container-updaters haven\u0027t run and there are account-info in the cache, we\u0027ll keep letting things in until it all eventually syncs.","commit_id":"13556c359684a97648c9819fec4f090d1955c3b8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3e70f81a56cc7985607ead7b56913527560cce8b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d381e4bf_e2579755","updated":"2023-03-09 06:55:09.000000000","message":"lol, never mind, it was user error... seems cached container-info was the culprit","commit_id":"13556c359684a97648c9819fec4f090d1955c3b8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cac61e033467d1ab200db529b22b1d8ef1c0dfba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"66e446ec_02082bbc","updated":"2023-03-08 06:40:25.000000000","message":"recheck\n\nSome 500 calling `openstack server create --volume 5c5ce216-7d22-4967-8a7e-971ba931a35c --flavor m1.tiny --security-group cinder_grenade --key-name cinder_key --nic net-id\u003d7dec2f7c-4add-42c2-90ce-19a5d78dcff9 cinder_server1 --wait\n`? Logs say something about `Flavor m1.tiny could not be found.` ...??","commit_id":"13556c359684a97648c9819fec4f090d1955c3b8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bf57e46fb546232c31de7d3805cd306da342c255","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"87ff1185_efa3160d","updated":"2023-03-07 20:47:42.000000000","message":"recheck\n\nTimeout in grenade job","commit_id":"13556c359684a97648c9819fec4f090d1955c3b8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"7ce5de6ebf72738a42f1bb477dc9e3049b4ece81","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5bada09c_11d1c7e5","updated":"2023-03-08 06:07:39.000000000","message":"this is looking good, just want to have a bit of a play in my VSAIO.\n\nAlso have a follow up: https://review.opendev.org/c/openstack/swift/+/876821 which is still a WIP to move the global to the new metadta namespace.","commit_id":"13556c359684a97648c9819fec4f090d1955c3b8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"34aa1515fc2d09e258d9b335bc17575c705d4251","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"38a100fa_d095fb14","updated":"2023-03-21 20:20:30.000000000","message":"looks good to me too!","commit_id":"cbba65ac913cef3ef7daf711d8217a445c8662f4"}],"swift/common/middleware/account_quotas.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"507f4016a938a91b3e593697053ea8ccb4397a70","unresolved":true,"context_lines":[{"line_number":79,"context_line":"                new_quotas[None] \u003d 0  # X-Remove dominates if both are present"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"            for policy in POLICIES:"},{"line_number":82,"context_line":"                tail \u003d \u0027Account-Quota-Bytes-Policy-%s\u0027 % policy.name"},{"line_number":83,"context_line":"                if request.headers.get(\u0027X-Remove-\u0027 + tail):"},{"line_number":84,"context_line":"                    new_quotas[policy.idx] \u003d 0"},{"line_number":85,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"df38eaf9_0030662d","line":82,"range":{"start_line":82,"start_character":24,"end_line":82,"end_character":53},"updated":"2023-02-27 06:10:09.000000000","message":"So the new api is to use X-Account-Quota-Bytes-Policy-n and X-Remove-Account-Quota-Bytes-Policy-n. This really needs to be documented, at least in the doc string of the middleware or maybe in api docs?","commit_id":"af668b014f01403eeeabebbe9e968d9d5ab5b4b4"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"7ce5de6ebf72738a42f1bb477dc9e3049b4ece81","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                new_quotas[None] \u003d 0  # X-Remove dominates if both are present"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"            for policy in POLICIES:"},{"line_number":82,"context_line":"                tail \u003d \u0027Account-Quota-Bytes-Policy-%s\u0027 % policy.name"},{"line_number":83,"context_line":"                if request.headers.get(\u0027X-Remove-\u0027 + tail):"},{"line_number":84,"context_line":"                    new_quotas[policy.idx] \u003d 0"},{"line_number":85,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"857dd8ff_5eb0c76a","line":82,"range":{"start_line":82,"start_character":24,"end_line":82,"end_character":53},"in_reply_to":"df38eaf9_0030662d","updated":"2023-03-08 06:07:39.000000000","message":"Done","commit_id":"af668b014f01403eeeabebbe9e968d9d5ab5b4b4"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"507f4016a938a91b3e593697053ea8ccb4397a70","unresolved":true,"context_lines":[{"line_number":100,"context_line":"                return HTTPForbidden()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        resp \u003d request.get_response(self.app)"},{"line_number":103,"context_line":"        # Non-resellers can\u0027t update quotas, but they *can* see them"},{"line_number":104,"context_line":"        for policy in POLICIES:"},{"line_number":105,"context_line":"            infix \u003d \u0027Quota-Bytes-Policy\u0027"},{"line_number":106,"context_line":"            value \u003d resp.headers.get(\u0027X-Account-Sysmeta-%s-%d\u0027 % ("}],"source_content_type":"text/x-python","patch_set":4,"id":"2745d31b_4bedac7f","line":103,"updated":"2023-02-27 06:10:09.000000000","message":"So I think the point of putting into account-meta but not being able to edit it unless your a reseller was for this same reason. So now we\u0027re bascially defining our own account-quota header namespace that is backed by sysmeta?\nI guess that makes sensee, that is the better way to do it, maybe account quotas pre-date sysmeta?","commit_id":"af668b014f01403eeeabebbe9e968d9d5ab5b4b4"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"01743cfd4fe0da8ec40823a78e8ef366d603d011","unresolved":true,"context_lines":[{"line_number":100,"context_line":"                return HTTPForbidden()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        resp \u003d request.get_response(self.app)"},{"line_number":103,"context_line":"        # Non-resellers can\u0027t update quotas, but they *can* see them"},{"line_number":104,"context_line":"        for policy in POLICIES:"},{"line_number":105,"context_line":"            infix \u003d \u0027Quota-Bytes-Policy\u0027"},{"line_number":106,"context_line":"            value \u003d resp.headers.get(\u0027X-Account-Sysmeta-%s-%d\u0027 % ("}],"source_content_type":"text/x-python","patch_set":4,"id":"9169c19c_6bdd3d23","line":103,"in_reply_to":"02f0d988_fb0db6e4","updated":"2023-02-27 23:45:32.000000000","message":"yeah.. upgrade does seem interesting. Maybe we need check both locations, and for a while x-account-meta-quota-bytes can be redirected to sysmeta. Then keep checking both locations and eventually remove the x-aacount-mate-account-bytes check (or maybe never do) :shrug:\n\nBut in any case, yeah.. not in this patch 😊","commit_id":"af668b014f01403eeeabebbe9e968d9d5ab5b4b4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d0f86f9d76630f10a9b9fcd167e896033667007a","unresolved":true,"context_lines":[{"line_number":100,"context_line":"                return HTTPForbidden()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        resp \u003d request.get_response(self.app)"},{"line_number":103,"context_line":"        # Non-resellers can\u0027t update quotas, but they *can* see them"},{"line_number":104,"context_line":"        for policy in POLICIES:"},{"line_number":105,"context_line":"            infix \u003d \u0027Quota-Bytes-Policy\u0027"},{"line_number":106,"context_line":"            value \u003d resp.headers.get(\u0027X-Account-Sysmeta-%s-%d\u0027 % ("}],"source_content_type":"text/x-python","patch_set":4,"id":"02f0d988_fb0db6e4","line":103,"in_reply_to":"2745d31b_4bedac7f","updated":"2023-02-27 17:45:32.000000000","message":"Yup:\n\n- account quotas added in 1.8.0: https://github.com/openstack/swift/commit/28c75db0\n- sysmeta added in 1.12.0: https://github.com/openstack/swift/commit/6164fa24\n\nWhat we definitely *don\u0027t* want is for users to run around trying to set user-meta on clusters that haven\u0027t upgraded yet in an effort to confuse/impede ops from setting appropriate quotas once the cluster *has* upgraded.\n\nWe should maybe think about transitioning the existing quota to sysmeta -- ought to be a separate patch, though, and the upgrade path seems a little daunting.","commit_id":"af668b014f01403eeeabebbe9e968d9d5ab5b4b4"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"507f4016a938a91b3e593697053ea8ccb4397a70","unresolved":true,"context_lines":[{"line_number":184,"context_line":"                        return resp"},{"line_number":185,"context_line":"                    request.environ[\u0027swift.authorize\u0027] \u003d reject_authorize"},{"line_number":186,"context_line":"                else:"},{"line_number":187,"context_line":"                    return resp"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        return self.app"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"e911e4e9_98e0f6bc","line":187,"updated":"2023-02-27 06:10:09.000000000","message":"So x-account-meta-quota-bytes take priority, then looks into per-policy. How\u0027d we explain that? The first is a global quota and the rest is a per-policy? or we now have legecy account quotas (because of a different x-header namespace (x-account-meta-)) and a new one?\n\nIf the former, cool, it\u0027s a little confusing, if the latter then do we need some global policy, or even a default policy quota?\n\nI guess what would a user expect:\n\n1. A global quota, with per policy quotas that when summed could be bigger then global, but the global will enforce so one wouldn\u0027t be able to fill all the per-policy quotas. \n2. A default quota, that all per policy quotas inherit by default, and specifically adding a per-policy over writes for that policy. default * num_undefined_policies + any(overriden per-policy quota)\n3. global policy effects everything, except adding a policy quota adds a particular quota for that.. ie quotas are additive? Global + all(defined per-policy quota)","commit_id":"af668b014f01403eeeabebbe9e968d9d5ab5b4b4"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"01743cfd4fe0da8ec40823a78e8ef366d603d011","unresolved":true,"context_lines":[{"line_number":184,"context_line":"                        return resp"},{"line_number":185,"context_line":"                    request.environ[\u0027swift.authorize\u0027] \u003d reject_authorize"},{"line_number":186,"context_line":"                else:"},{"line_number":187,"context_line":"                    return resp"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        return self.app"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"afa68ee9_f025e967","line":187,"in_reply_to":"823c73ca_4d55a5ad","updated":"2023-02-27 23:45:32.000000000","message":"yeah cool, just wanted to be on the same page in implementation up front. And so we can document it. I agree which is why I put 1 first. but just thought we\u0027d cover other options for the sake of discussion and understanding :)","commit_id":"af668b014f01403eeeabebbe9e968d9d5ab5b4b4"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"7ce5de6ebf72738a42f1bb477dc9e3049b4ece81","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                        return resp"},{"line_number":185,"context_line":"                    request.environ[\u0027swift.authorize\u0027] \u003d reject_authorize"},{"line_number":186,"context_line":"                else:"},{"line_number":187,"context_line":"                    return resp"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        return self.app"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"64d1d937_1ec58cc0","line":187,"in_reply_to":"afa68ee9_f025e967","updated":"2023-03-08 06:07:39.000000000","message":"Ack","commit_id":"af668b014f01403eeeabebbe9e968d9d5ab5b4b4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d0f86f9d76630f10a9b9fcd167e896033667007a","unresolved":true,"context_lines":[{"line_number":184,"context_line":"                        return resp"},{"line_number":185,"context_line":"                    request.environ[\u0027swift.authorize\u0027] \u003d reject_authorize"},{"line_number":186,"context_line":"                else:"},{"line_number":187,"context_line":"                    return resp"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        return self.app"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"823c73ca_4d55a5ad","line":187,"in_reply_to":"e911e4e9_98e0f6bc","updated":"2023-02-27 17:45:32.000000000","message":"#1 was my thought -- allows for the introduction of new policies while still keeping accounts constrained overall.\n\n#2 would be a tough transition -- ops that had a reasonable multi-policy quota set would suddenly find themselves needing to define per-policy quotas as part of the upgrade or risk letting users fill up the cluster. Also, it seems like most of the point of per-policy quotas is that different policies will have different requirements... I\u0027m not sure that a single quota getting applied to multiple policies makes much sense...\n\n#3 is maybe not-terrible -- ops would probably want to make sure that when they\u0027re setting a new per-policy quota, they\u0027d also decrease the \"global\" (general? implicit?) quota. Could fairly easily see them getting into a situation where that decrement puts the other policies over-quota, though -- I feel like it\u0027s better to have a true *global* quota, then let users be in charge of shuffling the bytes around to use new policies as they become available.","commit_id":"af668b014f01403eeeabebbe9e968d9d5ab5b4b4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"34aa1515fc2d09e258d9b335bc17575c705d4251","unresolved":true,"context_lines":[{"line_number":114,"context_line":"        for policy in POLICIES:"},{"line_number":115,"context_line":"            infix \u003d \u0027Quota-Bytes-Policy\u0027"},{"line_number":116,"context_line":"            value \u003d resp.headers.get(\u0027X-Account-Sysmeta-%s-%d\u0027 % ("},{"line_number":117,"context_line":"                infix, policy.idx))"},{"line_number":118,"context_line":"            if value:"},{"line_number":119,"context_line":"                resp.headers[\u0027X-Account-%s-%s\u0027 % (infix, policy.name)] \u003d value"},{"line_number":120,"context_line":"        return resp"}],"source_content_type":"text/x-python","patch_set":6,"id":"10533598_f74fe1e9","line":117,"updated":"2023-03-21 20:20:30.000000000","message":"i can see we\u0027re setting quotas using sysmeta w/ policy.idx - very nice","commit_id":"cbba65ac913cef3ef7daf711d8217a445c8662f4"}],"test/unit/common/middleware/test_account_quotas.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"34aa1515fc2d09e258d9b335bc17575c705d4251","unresolved":true,"context_lines":[{"line_number":411,"context_line":"        req \u003d Request.blank(\u0027/v1/a\u0027, environ\u003d{"},{"line_number":412,"context_line":"            \u0027REQUEST_METHOD\u0027: \u0027POST\u0027,"},{"line_number":413,"context_line":"            \u0027swift.cache\u0027: cache,"},{"line_number":414,"context_line":"            \u0027HTTP_X_ACCOUNT_QUOTA_BYTES_POLICY_POLICY_0\u0027: \u0027100\u0027})"},{"line_number":415,"context_line":"        res \u003d req.get_response(app)"},{"line_number":416,"context_line":"        self.assertEqual(res.status_int, 403)"},{"line_number":417,"context_line":"        self.assertEqual(self.app.calls, [])"}],"source_content_type":"text/x-python","patch_set":6,"id":"ac9c6375_5eb828e3","line":414,"updated":"2023-03-21 20:20:30.000000000","message":"what\u0027s with POLICY_POLICY ???\n\noh, i guess it\u0027s x-account-quota-bytes-policy-\u003cpolicy_name\u003e","commit_id":"cbba65ac913cef3ef7daf711d8217a445c8662f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"34aa1515fc2d09e258d9b335bc17575c705d4251","unresolved":true,"context_lines":[{"line_number":443,"context_line":"        self.assertEqual(self.app.calls_with_headers, ["},{"line_number":444,"context_line":"            (\u0027POST\u0027, \u0027/v1/a\u0027, {"},{"line_number":445,"context_line":"                \u0027Host\u0027: \u0027localhost:80\u0027,"},{"line_number":446,"context_line":"                \u0027X-Account-Sysmeta-Quota-Bytes-Policy-0\u0027: \u0027100\u0027})])"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def test_delete_quotas(self):"},{"line_number":449,"context_line":"        app \u003d account_quotas.AccountQuotaMiddleware(self.app)"}],"source_content_type":"text/x-python","patch_set":6,"id":"aa959c85_7fb03948","line":446,"updated":"2023-03-21 20:20:30.000000000","message":"and the name of the 0 index policy in tests is \u0027Policy-0\u0027","commit_id":"cbba65ac913cef3ef7daf711d8217a445c8662f4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7f8a4f35054949d29ce5ccd1f7cb81cd6af45817","unresolved":true,"context_lines":[{"line_number":443,"context_line":"        self.assertEqual(self.app.calls_with_headers, ["},{"line_number":444,"context_line":"            (\u0027POST\u0027, \u0027/v1/a\u0027, {"},{"line_number":445,"context_line":"                \u0027Host\u0027: \u0027localhost:80\u0027,"},{"line_number":446,"context_line":"                \u0027X-Account-Sysmeta-Quota-Bytes-Policy-0\u0027: \u0027100\u0027})])"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def test_delete_quotas(self):"},{"line_number":449,"context_line":"        app \u003d account_quotas.AccountQuotaMiddleware(self.app)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da916b64_3e3d425f","line":446,"in_reply_to":"aa959c85_7fb03948","updated":"2023-04-03 17:07:04.000000000","message":"Oof -- this should\u0027ve been a red flag. See https://review.opendev.org/c/openstack/swift/+/879366","commit_id":"cbba65ac913cef3ef7daf711d8217a445c8662f4"}]}
