)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"346eb472e777566856bc17120a0fb4eb799527d1","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"fix x-open-expired 404 on HEAD?part-number reqs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fixes a bug with the x-open-expired feature where the headers"},{"line_number":10,"context_line":"do not get copied when refetching zero-byte manifests that causes"},{"line_number":11,"context_line":"404 on HEAD requests that use the part-number parameter."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"01f1bf8d_a8f0e4f8","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":11},"updated":"2024-09-11 03:48:09.000000000","message":"Does it really? It seems its a function test and a probetest. Both great and think we should get them in. But the commit message seems wrong.\nAND mentions nothing of what the patch is about.","commit_id":"97ce746aeb12fe9b5a15d631f4ff9387d03532d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ea6db4d1dbba6389020059d90d4783ec65710c3c","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"fix x-open-expired 404 on HEAD?part-number reqs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fixes a bug with the x-open-expired feature where the headers"},{"line_number":10,"context_line":"do not get copied when refetching zero-byte manifests that causes"},{"line_number":11,"context_line":"404 on HEAD requests that use the part-number parameter."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"c441b33c_28748dff","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":11},"in_reply_to":"01f1bf8d_a8f0e4f8","updated":"2024-09-11 04:02:08.000000000","message":"Well, it *used to* -- I think too much got backed out from patchset 36.","commit_id":"97ce746aeb12fe9b5a15d631f4ff9387d03532d2"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e74dedadd43cbd560e774802a67646cd74f312ad","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"fix x-open-expired 404 on HEAD?part-number reqs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fixes a bug with the x-open-expired feature where the headers"},{"line_number":10,"context_line":"do not get copied when refetching zero-byte manifests that causes"},{"line_number":11,"context_line":"404 on HEAD requests that use the part-number parameter."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"1018df2f_0da24bf1","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":11},"in_reply_to":"c441b33c_28748dff","updated":"2024-09-19 04:23:00.000000000","message":"Done","commit_id":"97ce746aeb12fe9b5a15d631f4ff9387d03532d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a1b6a83bc40873619292c03d0a6607b237e772d","unresolved":true,"context_lines":[{"line_number":7,"context_line":"fix x-open-expired 404 on HEAD?part-number reqs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fixes a bug with the x-open-expired feature where the headers"},{"line_number":10,"context_line":"do not get copied when refetching zero-byte manifests that causes"},{"line_number":11,"context_line":"404 on HEAD requests that use the part-number parameter and segment"},{"line_number":12,"context_line":"GET requests if the segments have expired."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":50,"id":"68f0dc89_769020b2","line":10,"range":{"start_line":10,"start_character":34,"end_line":10,"end_character":53},"updated":"2024-10-17 21:30:18.000000000","message":"This sounds like it should only impact manifests with zero segments, but I think it actually covers *all* manifests -- HEAD with a `?part-number\u003dN` will necessarily have the object-server send an empty response body (since it was a HEAD) so the proxy needs to refetch. If we don\u0027t copy the `x-open-expired`, that 404s on an expired manifest.\n\nI\u0027m glad we finally identified the reasons for each fix, though!","commit_id":"1c4638d4a85d515548df98ec96fd9e322cd89fff"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"95d4581153ec675f5e7e079f4b3a91f377b8a3d9","unresolved":true,"context_lines":[{"line_number":7,"context_line":"fix x-open-expired 404 on HEAD?part-number reqs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fixes a bug with the x-open-expired feature where the headers"},{"line_number":10,"context_line":"do not get copied when refetching zero-byte manifests that causes"},{"line_number":11,"context_line":"404 on HEAD requests that use the part-number parameter and segment"},{"line_number":12,"context_line":"GET requests if the segments have expired."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":50,"id":"9244d3ab_a8804257","line":10,"range":{"start_line":10,"start_character":34,"end_line":10,"end_character":53},"in_reply_to":"68f0dc89_769020b2","updated":"2024-10-17 21:39:51.000000000","message":"Reworded commit msg again","commit_id":"1c4638d4a85d515548df98ec96fd9e322cd89fff"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0432a95a994caa17e6826cc2dcd08de149d03ac4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"dd65277e_f585d2fc","updated":"2024-04-22 17:54:30.000000000","message":"I\u0027m not 100% sold on the NEED for the new helper; the whole patch needs tests (mainly for the 404 on HEAD behavior but also targeted tests for the new helper if you decide you want to add it)\n\nI think FakeSwift currently has no idea about x-delete-at expiration - so you might have to consider adding that before it\u0027s easy to test this in a unittest\n\nif you want to side-step that I think you can update some existing tests to assert the x-open-expired header comes through to fake-swift, and then add a functional (probe?) test to demonstrate an expired SLO can still have it\u0027s segments requested just like an expired SLO (when the cluster has allow_open_expired turned on)\n\nOn the meta point of middleware/slo having to learn about x-open-expired... I don\u0027t love it!  I\u0027d be willing to consider if we could just add HTTP_X_OPEN_EXPIRED into common.wsgi.make_env whitelist - but we can debate the cleanest way to address the issue after we have some tests.  Having something that works with tests should be the priority.","commit_id":"3cee3016db7f083635f3a800711db7a6d8a5d7d2"},{"author":{"_account_id":36763,"name":"Anish Kachinthaya","display_name":"Anish","email":"akachinthaya@nvidia.com","username":"akachinthaya"},"change_message_id":"448d4d604a028ab51fdad63206acdaf17969f79f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"8a6b92b8_37663630","updated":"2024-04-25 16:40:06.000000000","message":"Removed helper, made things inline","commit_id":"3cee3016db7f083635f3a800711db7a6d8a5d7d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ff18b25da08029c014bf58ee77ddebc1cc3b9e90","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3e9dfa83_cfe691bf","updated":"2024-04-25 21:32:28.000000000","message":"Huh -- weird that we haven\u0027t seen any Zuul results yet... but I\u0027m pretty sure a recheck would fail ATM.","commit_id":"8e5c741dcb05acb1244ceb122202f2cc1907758b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"b17f01f3459e5f19752532a8d852195eba34db97","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9900459a_7dd448e2","updated":"2024-05-02 22:46:08.000000000","message":"Tests are currently unfinished","commit_id":"ea445192a6a7e8d8d689a62ea2277f48ae387aa9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b2cdceb419c961da01a1713fa505dfc4509b3d8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"2b43568a_5c1d5485","updated":"2024-05-06 18:02:31.000000000","message":"this needs more work\n\n```\n  File \"/home/zuul/src/opendev.org/openstack/swift/swift/common/middleware/slo.py\", line 987, in \u003cdictcomp\u003e\n    for k in headers_subset if k in req.h},\nAttributeError: \u0027Request\u0027 object has no attribute \u0027h\u0027\n```","commit_id":"ea445192a6a7e8d8d689a62ea2277f48ae387aa9"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"0c155ef910e3bee14ad900a4def4dfa41aa19c7d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9fcba341_f5f558ac","updated":"2024-05-15 21:37:41.000000000","message":"recheck","commit_id":"afbb2486dd727e5a052b333aadf10638fccd4135"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"287ff9af399d1d40d91b253049b3cdc5c3c94b45","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"552a3f9b_7e0c1711","updated":"2024-05-16 21:30:57.000000000","message":"Maybe we ought to add `allow_open_expired` to one of the in-process func test configs around https://github.com/openstack/swift/blob/master/test/functional/__init__.py#L511-L514 like we do for `staticweb` and `s3api`... or slip it into `_load_encryption` so we get some jobs with it on and some jobs with it off...","commit_id":"09b4b971d402dcbcd1d9bb5b14b50bc2985630ae"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4d4a51436e0deaadf7c5d09057ce55bbda9cb662","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"c15e6b0c_32e284c2","updated":"2024-05-20 21:30:10.000000000","message":"This patch still requires a functional test since we only have a probe test for coverage as of now.","commit_id":"09b4b971d402dcbcd1d9bb5b14b50bc2985630ae"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4d4a51436e0deaadf7c5d09057ce55bbda9cb662","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"cd0e85cf_888003f4","in_reply_to":"552a3f9b_7e0c1711","updated":"2024-05-20 21:30:10.000000000","message":"This is important for me to add functional tests, so i\u0027d like to keep it unresolved. Thanks for the suggestion @Tim Burke","commit_id":"09b4b971d402dcbcd1d9bb5b14b50bc2985630ae"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"3ad2a71069a120ad2fd30cf78d5c755039e6fcca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"5b7c9672_591184b1","in_reply_to":"c15e6b0c_32e284c2","updated":"2024-05-23 01:19:03.000000000","message":"Done","commit_id":"09b4b971d402dcbcd1d9bb5b14b50bc2985630ae"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1aebcdc694394c4f24efbfb5a6a93a2da2f1b70e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"4927187f_8686db01","updated":"2024-06-03 16:57:34.000000000","message":"Yeah, that flakey func test failure isn\u0027t great. Hopefully it won\u0027t be to hard to shore up.","commit_id":"e4eac2c42a16d3b9555ab129f516ec0f72e3fdc1"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"45a7c142505e9c8b5521e0a7ed93c768662892c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"aa8080bc_166585f9","updated":"2024-06-25 06:06:33.000000000","message":"Is the function test trying to create an SLO or DLO? I\u0027m not sure I understand what your trying to test there.","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7fbe433b0d7163d7908a93b9b7a81c82a202e0ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"2c567d0e_a28d8fe3","updated":"2024-06-25 16:46:41.000000000","message":"these tests aren\u0027t very convincing that the code is correct; but I haven\u0027t studied the code closely - let\u0027s clean up the tests some.","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e771b92f5a9d5539f7897a76c1b5af65ffe0a161","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"1d22f2c7_ff72fcd8","updated":"2024-08-13 21:13:38.000000000","message":"I didn\u0027t look to closely at this yet; I was able to duplicate the functional test failure on my machine:\n\n```\npytest swift/test/functional/test_object.py::TestObject::test_x_delete_at_with_part_number_and_open_expired\n```","commit_id":"ac3b89e11d63c865234aa81f6f4e0fd056d5c824"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"ae7939de01c970626e0d9c84f76c88e87b91238f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"39ed712e_f228283c","updated":"2024-08-24 12:50:34.000000000","message":"The functional test in the patch needs more improvements","commit_id":"138fca6dcce9e0995914541dd76911dddd878857"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"b4168f0e9d7b929cfedd2fc1839da8be84200b70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"78fc520a_3a0bdf67","updated":"2024-08-27 19:07:33.000000000","message":"I have addressed only the Zuul errors but the functional test still needs work","commit_id":"55a88b178d55a98e45ced697e4b4222eb2d661f3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"13a097587081668f626e2f96b1dfad1ea8167d85","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"af7623da_5c3ea6c7","updated":"2024-09-04 20:38:41.000000000","message":"Only the probe test blows up when I back out the changes under `swift/` -- especially since this depends on cluster configuration, I think we ought to have some unit tests that cover desired behavior.","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a4b6ecee9dcf14aad4476b46de790a82e938ea3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":37,"id":"de8bae8c_57106ce4","updated":"2024-09-09 15:09:39.000000000","message":"The unit tests are still a work-in-progress, @tburke@nvidia.com, although i would like to know if i am heading the correct direction wrt the tests ?","commit_id":"64a2299783128a1d71503878a72c26b23839f937"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"d422d142dfe798841f310fe9630bc6d8ad8ab26b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"1533dc17_88c65365","updated":"2024-09-17 19:56:28.000000000","message":"probe test and unit tests still need work","commit_id":"97ce746aeb12fe9b5a15d631f4ff9387d03532d2"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"5c393d1661e6c4e321dd809ff038f4e43891eb38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"911ad08c_17e7aa87","updated":"2024-09-19 12:03:27.000000000","message":"recheck","commit_id":"e085fb0225d600d73ca033b4bfdf578585e8bb28"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e74dedadd43cbd560e774802a67646cd74f312ad","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":41,"id":"845a9209_44361788","updated":"2024-09-19 04:23:00.000000000","message":"unit tests still need work","commit_id":"e085fb0225d600d73ca033b4bfdf578585e8bb28"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"f82a9d101515c896e0dc271f58e6f0beffd2ba18","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":41,"id":"db6213c8_91b6291f","in_reply_to":"845a9209_44361788","updated":"2024-09-24 15:23:47.000000000","message":"The tests pass even when i back out my changes which is a concern for me","commit_id":"e085fb0225d600d73ca033b4bfdf578585e8bb28"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"eddef711bbf65d90a513a71a26dfb5d109c0c897","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"cb0200d0_275d60e3","in_reply_to":"db6213c8_91b6291f","updated":"2024-10-16 16:09:29.000000000","message":"Done","commit_id":"e085fb0225d600d73ca033b4bfdf578585e8bb28"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"f5f6e527d8c8c70be5c0c158824143bfd8ef258b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"a6def9ec_182cf04e","updated":"2024-09-24 15:22:02.000000000","message":"recheck","commit_id":"d23b5401e3231d4ef4ef6860caf064e6ff75ace4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d7c25e54ccbfaac44d0831abab51f949ccbbb20b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"020a0420_7ef9d843","updated":"2024-10-03 22:00:36.000000000","message":"- Func test still passes without the fix.\n- Unit test shouldn\u0027t need to sleep.\n- Unit test ought to look at the headers that make their way to the proxy app.","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"1e3301512c0a823c82ba7046c7456a8d7c21d0ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"085c0e31_a482bcd6","updated":"2024-10-03 21:04:08.000000000","message":"recheck","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7308e2f2ba6b7e6dfc34142b5cb7b414fbe51e29","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":48,"id":"e2ebe407_13e554e4","updated":"2024-10-17 18:43:53.000000000","message":"I think you always get a 409 if the download can\u0027t fetch a segment - even if you just try to download the whole object w/o part-number\n\nI don\u0027t think we NEED to support passing x-open-expired to the segment fetch since no one sets expiration on segemnts w/ MPU (just set expiration on manifest and some patch we carry does the cleanup)... but if someone is using x-delete-at with swift SLO they might be setting delete-at on segment too and it might make sense to plumb that through in slo mw if possible.","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"ad918ecbbe817172f03322d12aa27561b066089d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":53,"id":"27340aa1_80b6ef07","updated":"2024-10-17 21:47:24.000000000","message":"Zuul should be happy now, my editor never works for me (sigh)","commit_id":"38e813e731a03917545bd39d9a2a6bfdbc115975"}],"swift/common/middleware/slo.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0432a95a994caa17e6826cc2dcd08de149d03ac4","unresolved":true,"context_lines":[{"line_number":984,"context_line":"            req.environ, method\u003d\u0027GET\u0027,"},{"line_number":985,"context_line":"            headers\u003dselect_header_subset(req, ["},{"line_number":986,"context_line":"                \u0027x-auth-token\u0027, \u0027x-open-expired\u0027,"},{"line_number":987,"context_line":"            ]),"},{"line_number":988,"context_line":"            agent\u003d\u0027%(orig)s SLO MultipartGET\u0027, swift_source\u003d\u0027SLO\u0027)"},{"line_number":989,"context_line":"        resp_iter \u003d self._app_call(get_req.environ)"},{"line_number":990,"context_line":"        new_resp_attrs \u003d RespAttrs.from_headers(self._response_headers)"}],"source_content_type":"text/x-python","patch_set":1,"id":"d327d48b_5b71500d","line":987,"updated":"2024-04-22 17:54:30.000000000","message":"so previously for un-auth\u0027d requests this dict could be:\n\n    {\u0027x-auth-token\u0027: None}\n    \n... now it\u0027s just empty dict - that might be fine.","commit_id":"3cee3016db7f083635f3a800711db7a6d8a5d7d2"},{"author":{"_account_id":36763,"name":"Anish Kachinthaya","display_name":"Anish","email":"akachinthaya@nvidia.com","username":"akachinthaya"},"change_message_id":"448d4d604a028ab51fdad63206acdaf17969f79f","unresolved":false,"context_lines":[{"line_number":984,"context_line":"            req.environ, method\u003d\u0027GET\u0027,"},{"line_number":985,"context_line":"            headers\u003dselect_header_subset(req, ["},{"line_number":986,"context_line":"                \u0027x-auth-token\u0027, \u0027x-open-expired\u0027,"},{"line_number":987,"context_line":"            ]),"},{"line_number":988,"context_line":"            agent\u003d\u0027%(orig)s SLO MultipartGET\u0027, swift_source\u003d\u0027SLO\u0027)"},{"line_number":989,"context_line":"        resp_iter \u003d self._app_call(get_req.environ)"},{"line_number":990,"context_line":"        new_resp_attrs \u003d RespAttrs.from_headers(self._response_headers)"}],"source_content_type":"text/x-python","patch_set":1,"id":"d5a60084_c647b220","line":987,"in_reply_to":"d327d48b_5b71500d","updated":"2024-04-25 16:40:06.000000000","message":"Acknowledged","commit_id":"3cee3016db7f083635f3a800711db7a6d8a5d7d2"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0432a95a994caa17e6826cc2dcd08de149d03ac4","unresolved":true,"context_lines":[{"line_number":985,"context_line":"            headers\u003dselect_header_subset(req, ["},{"line_number":986,"context_line":"                \u0027x-auth-token\u0027, \u0027x-open-expired\u0027,"},{"line_number":987,"context_line":"            ]),"},{"line_number":988,"context_line":"            agent\u003d\u0027%(orig)s SLO MultipartGET\u0027, swift_source\u003d\u0027SLO\u0027)"},{"line_number":989,"context_line":"        resp_iter \u003d self._app_call(get_req.environ)"},{"line_number":990,"context_line":"        new_resp_attrs \u003d RespAttrs.from_headers(self._response_headers)"},{"line_number":991,"context_line":"        if new_resp_attrs.timestamp \u003c orig_resp_attrs.timestamp and \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"60c6b761_ec692804","line":988,"updated":"2024-04-22 17:54:30.000000000","message":"I think you could use the existing helper here:\n\n    copy_header_subset(req, get_req, lambda k: k in (\u0027x-auth-token\u0027, \u0027x-open-expired\u0027))","commit_id":"3cee3016db7f083635f3a800711db7a6d8a5d7d2"},{"author":{"_account_id":36763,"name":"Anish Kachinthaya","display_name":"Anish","email":"akachinthaya@nvidia.com","username":"akachinthaya"},"change_message_id":"448d4d604a028ab51fdad63206acdaf17969f79f","unresolved":false,"context_lines":[{"line_number":985,"context_line":"            headers\u003dselect_header_subset(req, ["},{"line_number":986,"context_line":"                \u0027x-auth-token\u0027, \u0027x-open-expired\u0027,"},{"line_number":987,"context_line":"            ]),"},{"line_number":988,"context_line":"            agent\u003d\u0027%(orig)s SLO MultipartGET\u0027, swift_source\u003d\u0027SLO\u0027)"},{"line_number":989,"context_line":"        resp_iter \u003d self._app_call(get_req.environ)"},{"line_number":990,"context_line":"        new_resp_attrs \u003d RespAttrs.from_headers(self._response_headers)"},{"line_number":991,"context_line":"        if new_resp_attrs.timestamp \u003c orig_resp_attrs.timestamp and \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"85952891_ceb998d4","line":988,"in_reply_to":"60c6b761_ec692804","updated":"2024-04-25 16:40:06.000000000","message":"Acknowledged","commit_id":"3cee3016db7f083635f3a800711db7a6d8a5d7d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ff18b25da08029c014bf58ee77ddebc1cc3b9e90","unresolved":true,"context_lines":[{"line_number":983,"context_line":"        headers_subset \u003d [\u0027x-auth-token\u0027, \u0027x-open-expired\u0027]"},{"line_number":984,"context_line":"        get_req \u003d make_subrequest("},{"line_number":985,"context_line":"            req.environ, method\u003d\u0027GET\u0027,"},{"line_number":986,"context_line":"            headers\u003d{k: req.h.get(k) "},{"line_number":987,"context_line":"                     for k in headers_subset if k in req.h},"},{"line_number":988,"context_line":"            agent\u003d\u0027%(orig)s SLO MultipartGET\u0027, swift_source\u003d\u0027SLO\u0027)"},{"line_number":989,"context_line":"        resp_iter \u003d self._app_call(get_req.environ)"}],"source_content_type":"text/x-python","patch_set":2,"id":"632a1d79_336c32e0","line":986,"range":{"start_line":986,"start_character":28,"end_line":986,"end_character":29},"updated":"2024-04-25 21:32:28.000000000","message":"Pretty sure it\u0027ll need to be the full `req.headers`","commit_id":"8e5c741dcb05acb1244ceb122202f2cc1907758b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"2fb0938bb9003f1fe713ae231c1c39244f624bde","unresolved":false,"context_lines":[{"line_number":983,"context_line":"        headers_subset \u003d [\u0027x-auth-token\u0027, \u0027x-open-expired\u0027]"},{"line_number":984,"context_line":"        get_req \u003d make_subrequest("},{"line_number":985,"context_line":"            req.environ, method\u003d\u0027GET\u0027,"},{"line_number":986,"context_line":"            headers\u003d{k: req.h.get(k) "},{"line_number":987,"context_line":"                     for k in headers_subset if k in req.h},"},{"line_number":988,"context_line":"            agent\u003d\u0027%(orig)s SLO MultipartGET\u0027, swift_source\u003d\u0027SLO\u0027)"},{"line_number":989,"context_line":"        resp_iter \u003d self._app_call(get_req.environ)"}],"source_content_type":"text/x-python","patch_set":2,"id":"2133b8c2_03a1c5cc","line":986,"range":{"start_line":986,"start_character":28,"end_line":986,"end_character":29},"in_reply_to":"632a1d79_336c32e0","updated":"2024-05-02 22:46:22.000000000","message":"Done","commit_id":"8e5c741dcb05acb1244ceb122202f2cc1907758b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"13a097587081668f626e2f96b1dfad1ea8167d85","unresolved":true,"context_lines":[{"line_number":980,"context_line":"        friendly_close(resp_iter)"},{"line_number":981,"context_line":"        del req.environ[\u0027swift.non_client_disconnect\u0027]"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        headers_subset \u003d [\u0027x-auth-token\u0027, \u0027x-open-expired\u0027]"},{"line_number":984,"context_line":"        get_req \u003d make_subrequest("},{"line_number":985,"context_line":"            req.environ, method\u003d\u0027GET\u0027,"},{"line_number":986,"context_line":"            headers\u003d{k: req.headers.get(k)"}],"source_content_type":"text/x-python","patch_set":36,"id":"773c9708_f60f762a","line":983,"updated":"2024-09-04 20:38:41.000000000","message":"Out of scope, but I wonder if we should include `X-Storage-Token` and/or `X-Service-Token` here, too...","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a4b6ecee9dcf14aad4476b46de790a82e938ea3a","unresolved":true,"context_lines":[{"line_number":980,"context_line":"        friendly_close(resp_iter)"},{"line_number":981,"context_line":"        del req.environ[\u0027swift.non_client_disconnect\u0027]"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        headers_subset \u003d [\u0027x-auth-token\u0027, \u0027x-open-expired\u0027]"},{"line_number":984,"context_line":"        get_req \u003d make_subrequest("},{"line_number":985,"context_line":"            req.environ, method\u003d\u0027GET\u0027,"},{"line_number":986,"context_line":"            headers\u003d{k: req.headers.get(k)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9552168b_f1d949d2","line":983,"in_reply_to":"773c9708_f60f762a","updated":"2024-09-09 15:09:39.000000000","message":"Maybe i include that change as a follow-on since this patch has been lying around for a while?","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"d422d142dfe798841f310fe9630bc6d8ad8ab26b","unresolved":false,"context_lines":[{"line_number":980,"context_line":"        friendly_close(resp_iter)"},{"line_number":981,"context_line":"        del req.environ[\u0027swift.non_client_disconnect\u0027]"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        headers_subset \u003d [\u0027x-auth-token\u0027, \u0027x-open-expired\u0027]"},{"line_number":984,"context_line":"        get_req \u003d make_subrequest("},{"line_number":985,"context_line":"            req.environ, method\u003d\u0027GET\u0027,"},{"line_number":986,"context_line":"            headers\u003d{k: req.headers.get(k)"}],"source_content_type":"text/x-python","patch_set":36,"id":"d2b32791_480fb7bd","line":983,"in_reply_to":"9552168b_f1d949d2","updated":"2024-09-17 19:56:28.000000000","message":"Acknowledged","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"}],"swift/common/request_helpers.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0432a95a994caa17e6826cc2dcd08de149d03ac4","unresolved":true,"context_lines":[{"line_number":564,"context_line":"                seg_req \u003d make_subrequest("},{"line_number":565,"context_line":"                    self.req.environ, path\u003dpath, method\u003d\u0027GET\u0027,"},{"line_number":566,"context_line":"                    headers\u003d{\u0027x-auth-token\u0027: self.req.headers.get("},{"line_number":567,"context_line":"                        \u0027x-auth-token\u0027)},"},{"line_number":568,"context_line":"                    agent\u003d(\u0027%(orig)s \u0027 + self.ua_suffix),"},{"line_number":569,"context_line":"                    swift_source\u003dself.swift_source)"},{"line_number":570,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"4d9c45c6_454fbcbf","side":"PARENT","line":567,"updated":"2024-04-22 17:54:30.000000000","message":"I\u0027m not 100% sure why SegmentedIterable is in common.request_helpers, but I assume it\u0027s used by maybe more than *just* SLO.  Presumably if the SLO was uploaded with x-delete-at the segments themselves might also be expired so this could be both necessary and sufficient.\n\nBut I\u0027m not sure how we observed GET?part-number w/ x-open-expired working if this is needed.","commit_id":"9c44f5b5da11e97e4996b6f34e23ba3d1f60990e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ff18b25da08029c014bf58ee77ddebc1cc3b9e90","unresolved":true,"context_lines":[{"line_number":564,"context_line":"                seg_req \u003d make_subrequest("},{"line_number":565,"context_line":"                    self.req.environ, path\u003dpath, method\u003d\u0027GET\u0027,"},{"line_number":566,"context_line":"                    headers\u003d{\u0027x-auth-token\u0027: self.req.headers.get("},{"line_number":567,"context_line":"                        \u0027x-auth-token\u0027)},"},{"line_number":568,"context_line":"                    agent\u003d(\u0027%(orig)s \u0027 + self.ua_suffix),"},{"line_number":569,"context_line":"                    swift_source\u003dself.swift_source)"},{"line_number":570,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"afa44acd_e25c7e3c","side":"PARENT","line":567,"in_reply_to":"4d9c45c6_454fbcbf","updated":"2024-04-25 21:32:28.000000000","message":"\u003e I\u0027m not 100% sure why SegmentedIterable is in common.request_helpers\n\nCircular import issues trying to put it in common.utils, IIRC.\n\n\u003e I assume it\u0027s used by maybe more than just SLO\n\nSLO and DLO (and pfs_middleware, for an out-of-tree user).","commit_id":"9c44f5b5da11e97e4996b6f34e23ba3d1f60990e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0432a95a994caa17e6826cc2dcd08de149d03ac4","unresolved":true,"context_lines":[{"line_number":469,"context_line":"    :param subset: a list of header names to select from the"},{"line_number":470,"context_line":"                   given request."},{"line_number":471,"context_line":"    :returns: a dict of headers"},{"line_number":472,"context_line":"    \"\"\""},{"line_number":473,"context_line":"    selected_headers \u003d {}"},{"line_number":474,"context_line":"    for k, v in req.headers.items():"},{"line_number":475,"context_line":"        if k in subset:"}],"source_content_type":"text/x-python","patch_set":1,"id":"4fa3de9e_5bb8afa3","line":472,"updated":"2024-04-22 17:54:30.000000000","message":"this seems pretty similar in spirit to \"copy_header_subset\" or \"remove_items\" but lacks the \"condition\" pattern\n\nAlso could be trivialized inline at the caller:\n\n    headers\u003d{k: req.h.get(k) for k in subset if k in req.h}\n    \n^ I\u0027m not sure that\u0027s worse to read than:\n\n    headers\u003dselect_header_subset(req.h, lambda k: k in subset)","commit_id":"3cee3016db7f083635f3a800711db7a6d8a5d7d2"},{"author":{"_account_id":36763,"name":"Anish Kachinthaya","display_name":"Anish","email":"akachinthaya@nvidia.com","username":"akachinthaya"},"change_message_id":"448d4d604a028ab51fdad63206acdaf17969f79f","unresolved":false,"context_lines":[{"line_number":469,"context_line":"    :param subset: a list of header names to select from the"},{"line_number":470,"context_line":"                   given request."},{"line_number":471,"context_line":"    :returns: a dict of headers"},{"line_number":472,"context_line":"    \"\"\""},{"line_number":473,"context_line":"    selected_headers \u003d {}"},{"line_number":474,"context_line":"    for k, v in req.headers.items():"},{"line_number":475,"context_line":"        if k in subset:"}],"source_content_type":"text/x-python","patch_set":1,"id":"d79f004b_11e0954d","line":472,"in_reply_to":"4fa3de9e_5bb8afa3","updated":"2024-04-25 16:40:06.000000000","message":"Acknowledged","commit_id":"3cee3016db7f083635f3a800711db7a6d8a5d7d2"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0432a95a994caa17e6826cc2dcd08de149d03ac4","unresolved":true,"context_lines":[{"line_number":474,"context_line":"    for k, v in req.headers.items():"},{"line_number":475,"context_line":"        if k in subset:"},{"line_number":476,"context_line":"            selected_headers[k] \u003d v"},{"line_number":477,"context_line":"    return selected_headers"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"def check_path_header(req, name, length, error_msg):"}],"source_content_type":"text/x-python","patch_set":1,"id":"70c557f5_c2f84234","line":477,"updated":"2024-04-22 17:54:30.000000000","message":"FWIW although this is only currently used with `make_subrequest` I\u0027m not sure it makes any more sense in common.wsgi than it does here.\n\nBut if we ever *wanted* it in common.wsgi I think we\u0027d have to move it since this imports that but not the other way around.","commit_id":"3cee3016db7f083635f3a800711db7a6d8a5d7d2"},{"author":{"_account_id":36763,"name":"Anish Kachinthaya","display_name":"Anish","email":"akachinthaya@nvidia.com","username":"akachinthaya"},"change_message_id":"448d4d604a028ab51fdad63206acdaf17969f79f","unresolved":false,"context_lines":[{"line_number":474,"context_line":"    for k, v in req.headers.items():"},{"line_number":475,"context_line":"        if k in subset:"},{"line_number":476,"context_line":"            selected_headers[k] \u003d v"},{"line_number":477,"context_line":"    return selected_headers"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"def check_path_header(req, name, length, error_msg):"}],"source_content_type":"text/x-python","patch_set":1,"id":"51a2150b_ba4b7abb","line":477,"in_reply_to":"70c557f5_c2f84234","updated":"2024-04-25 16:40:06.000000000","message":"Yup, if there isn\u0027t much use for it other than this I\u0027m open to making it inline instead.","commit_id":"3cee3016db7f083635f3a800711db7a6d8a5d7d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ff18b25da08029c014bf58ee77ddebc1cc3b9e90","unresolved":true,"context_lines":[{"line_number":564,"context_line":"                headers_subset \u003d [\u0027x-auth-token\u0027, \u0027x-open-expired\u0027]"},{"line_number":565,"context_line":"                seg_req \u003d make_subrequest("},{"line_number":566,"context_line":"                    self.req.environ, path\u003dpath, method\u003d\u0027GET\u0027,"},{"line_number":567,"context_line":"                    headers\u003d{k: self.req.h.get(k) "},{"line_number":568,"context_line":"                             for k in headers_subset if k in self.req.h},"},{"line_number":569,"context_line":"                    agent\u003d(\u0027%(orig)s \u0027 + self.ua_suffix),"},{"line_number":570,"context_line":"                    swift_source\u003dself.swift_source)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c1ef29d2_0ec7e0df","line":567,"range":{"start_line":567,"start_character":41,"end_line":567,"end_character":42},"updated":"2024-04-25 21:32:28.000000000","message":"Again, `headers`","commit_id":"8e5c741dcb05acb1244ceb122202f2cc1907758b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"2fb0938bb9003f1fe713ae231c1c39244f624bde","unresolved":false,"context_lines":[{"line_number":564,"context_line":"                headers_subset \u003d [\u0027x-auth-token\u0027, \u0027x-open-expired\u0027]"},{"line_number":565,"context_line":"                seg_req \u003d make_subrequest("},{"line_number":566,"context_line":"                    self.req.environ, path\u003dpath, method\u003d\u0027GET\u0027,"},{"line_number":567,"context_line":"                    headers\u003d{k: self.req.h.get(k) "},{"line_number":568,"context_line":"                             for k in headers_subset if k in self.req.h},"},{"line_number":569,"context_line":"                    agent\u003d(\u0027%(orig)s \u0027 + self.ua_suffix),"},{"line_number":570,"context_line":"                    swift_source\u003dself.swift_source)"}],"source_content_type":"text/x-python","patch_set":2,"id":"f48c9dcd_50af86c3","line":567,"range":{"start_line":567,"start_character":41,"end_line":567,"end_character":42},"in_reply_to":"c1ef29d2_0ec7e0df","updated":"2024-05-02 22:46:22.000000000","message":"Done","commit_id":"8e5c741dcb05acb1244ceb122202f2cc1907758b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"287ff9af399d1d40d91b253049b3cdc5c3c94b45","unresolved":true,"context_lines":[{"line_number":565,"context_line":"                seg_req \u003d make_subrequest("},{"line_number":566,"context_line":"                    self.req.environ, path\u003dpath, method\u003d\u0027GET\u0027,"},{"line_number":567,"context_line":"                    headers\u003d{k: self.req.headers.get(k)"},{"line_number":568,"context_line":"                             for k in headers_subset if k in self.req.headers},"},{"line_number":569,"context_line":"                    agent\u003d(\u0027%(orig)s \u0027 + self.ua_suffix),"},{"line_number":570,"context_line":"                    swift_source\u003dself.swift_source)"},{"line_number":571,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"53a3912d_dfdf2c81","line":568,"updated":"2024-05-16 21:30:57.000000000","message":"This fix isn\u0027t covered by tests. Pretty sure I like it, though!","commit_id":"594e4a9d9241063b8eb22463ee4834984df97605"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4d4a51436e0deaadf7c5d09057ce55bbda9cb662","unresolved":false,"context_lines":[{"line_number":565,"context_line":"                seg_req \u003d make_subrequest("},{"line_number":566,"context_line":"                    self.req.environ, path\u003dpath, method\u003d\u0027GET\u0027,"},{"line_number":567,"context_line":"                    headers\u003d{k: self.req.headers.get(k)"},{"line_number":568,"context_line":"                             for k in headers_subset if k in self.req.headers},"},{"line_number":569,"context_line":"                    agent\u003d(\u0027%(orig)s \u0027 + self.ua_suffix),"},{"line_number":570,"context_line":"                    swift_source\u003dself.swift_source)"},{"line_number":571,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"0ff1f7ae_b65490c1","line":568,"in_reply_to":"53a3912d_dfdf2c81","updated":"2024-05-20 21:30:10.000000000","message":"Acknowledged","commit_id":"594e4a9d9241063b8eb22463ee4834984df97605"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"13a097587081668f626e2f96b1dfad1ea8167d85","unresolved":true,"context_lines":[{"line_number":565,"context_line":"                seg_req \u003d make_subrequest("},{"line_number":566,"context_line":"                    self.req.environ, path\u003dpath, method\u003d\u0027GET\u0027,"},{"line_number":567,"context_line":"                    headers\u003d{k: self.req.headers.get(k)"},{"line_number":568,"context_line":"                             for k in headers_subset if k in self.req.headers},"},{"line_number":569,"context_line":"                    agent\u003d(\u0027%(orig)s \u0027 + self.ua_suffix),"},{"line_number":570,"context_line":"                    swift_source\u003dself.swift_source)"},{"line_number":571,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"f32b1644_e9b03b22","line":568,"updated":"2024-09-04 20:38:41.000000000","message":"If I back out the changes in this file, no tests pop (not even the probe test) -- do we actually need/want this change? Why?","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a4b6ecee9dcf14aad4476b46de790a82e938ea3a","unresolved":false,"context_lines":[{"line_number":565,"context_line":"                seg_req \u003d make_subrequest("},{"line_number":566,"context_line":"                    self.req.environ, path\u003dpath, method\u003d\u0027GET\u0027,"},{"line_number":567,"context_line":"                    headers\u003d{k: self.req.headers.get(k)"},{"line_number":568,"context_line":"                             for k in headers_subset if k in self.req.headers},"},{"line_number":569,"context_line":"                    agent\u003d(\u0027%(orig)s \u0027 + self.ua_suffix),"},{"line_number":570,"context_line":"                    swift_source\u003dself.swift_source)"},{"line_number":571,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"4cb67ca9_70360ea0","line":568,"in_reply_to":"f32b1644_e9b03b22","updated":"2024-09-09 15:09:39.000000000","message":"We do not need it. Maybe its from the original patchset Anish wrote, i will back it out rn since the dependent tests still pass and i confirmed it with my testing too.","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"}],"test/functional/__init__.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d7c25e54ccbfaac44d0831abab51f949ccbbb20b","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        \u0027container_update_timeout\u0027: \u00273\u0027,"},{"line_number":580,"context_line":"        \u0027allow_account_management\u0027: \u0027true\u0027,"},{"line_number":581,"context_line":"        \u0027account_autocreate\u0027: \u0027true\u0027,"},{"line_number":582,"context_line":"        \u0027allow_open_expired\u0027: \u0027true\u0027,"},{"line_number":583,"context_line":"        \u0027allow_versions\u0027: \u0027True\u0027,"},{"line_number":584,"context_line":"        \u0027allow_versioned_writes\u0027: \u0027True\u0027,"},{"line_number":585,"context_line":"        # Below are values used by the functional test framework, as well as"}],"source_content_type":"text/x-python","patch_set":44,"id":"21bce74e_e2cb8e12","line":582,"updated":"2024-10-03 22:00:36.000000000","message":"OK, so this will affect all in-process func tests (in the gate and for devs) -- but we\u0027ve got plenty of other func tests in the gate that will still have it off. 👍","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"}],"test/functional/test_object.py":[{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a9182815efb02c02108637059f5f1af5d96f8d43","unresolved":true,"context_lines":[{"line_number":773,"context_line":"        self.assertEqual(resp.status, 400)"},{"line_number":774,"context_line":"        self.assertEqual(body, b\u0027X-Delete-At in past\u0027)"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def test_x_delete_at_with_part_number_and_open_expired(self):"},{"line_number":777,"context_line":"        allow_open_expired \u003d config_true_value(tf.cluster_info[\u0027swift\u0027].get("},{"line_number":778,"context_line":"            \u0027allow_open_expired\u0027, \u0027false\u0027))"},{"line_number":779,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"ea87e51a_6eb7de0f","line":776,"updated":"2024-05-23 19:23:19.000000000","message":"I have my doubts at to whether this functional test fully covers the bug fix, could use more suggestions on where else i could put tests in ?","commit_id":"e4eac2c42a16d3b9555ab129f516ec0f72e3fdc1"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"9bb10b59a836b2abd382cfea53a2cf8f712cd7c9","unresolved":false,"context_lines":[{"line_number":773,"context_line":"        self.assertEqual(resp.status, 400)"},{"line_number":774,"context_line":"        self.assertEqual(body, b\u0027X-Delete-At in past\u0027)"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def test_x_delete_at_with_part_number_and_open_expired(self):"},{"line_number":777,"context_line":"        allow_open_expired \u003d config_true_value(tf.cluster_info[\u0027swift\u0027].get("},{"line_number":778,"context_line":"            \u0027allow_open_expired\u0027, \u0027false\u0027))"},{"line_number":779,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"6d311985_ee9815e8","line":776,"in_reply_to":"ea87e51a_6eb7de0f","updated":"2024-06-04 22:29:20.000000000","message":"Done","commit_id":"e4eac2c42a16d3b9555ab129f516ec0f72e3fdc1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1aebcdc694394c4f24efbfb5a6a93a2da2f1b70e","unresolved":true,"context_lines":[{"line_number":787,"context_line":"        def put(url, token, parsed, conn, objnum):"},{"line_number":788,"context_line":"            dt \u003d datetime.datetime.now()"},{"line_number":789,"context_line":"            epoch \u003d time.mktime(dt.timetuple())"},{"line_number":790,"context_line":"            delete_time \u003d str(int(epoch) + 2)"},{"line_number":791,"context_line":"            conn.request("},{"line_number":792,"context_line":"                \u0027PUT\u0027,"},{"line_number":793,"context_line":"                \u0027%s/%s/segments/%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":19,"id":"e5159727_f38418f1","line":790,"updated":"2024-06-03 16:57:34.000000000","message":"I think you want to pull this up and out, have it along side the `segments` declaration, and use it consistently across both segments and manifest.","commit_id":"e4eac2c42a16d3b9555ab129f516ec0f72e3fdc1"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"9bb10b59a836b2abd382cfea53a2cf8f712cd7c9","unresolved":false,"context_lines":[{"line_number":787,"context_line":"        def put(url, token, parsed, conn, objnum):"},{"line_number":788,"context_line":"            dt \u003d datetime.datetime.now()"},{"line_number":789,"context_line":"            epoch \u003d time.mktime(dt.timetuple())"},{"line_number":790,"context_line":"            delete_time \u003d str(int(epoch) + 2)"},{"line_number":791,"context_line":"            conn.request("},{"line_number":792,"context_line":"                \u0027PUT\u0027,"},{"line_number":793,"context_line":"                \u0027%s/%s/segments/%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":19,"id":"b03fc740_327eebd6","line":790,"in_reply_to":"e5159727_f38418f1","updated":"2024-06-04 22:29:20.000000000","message":"Done","commit_id":"e4eac2c42a16d3b9555ab129f516ec0f72e3fdc1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1aebcdc694394c4f24efbfb5a6a93a2da2f1b70e","unresolved":true,"context_lines":[{"line_number":845,"context_line":""},{"line_number":846,"context_line":"        # wait for the manifest to expire"},{"line_number":847,"context_line":"        # the objects will also have expired at the same time"},{"line_number":848,"context_line":"        # since their x-delete-at times are the same"},{"line_number":849,"context_line":"        resp \u003d retry(get_manifest)"},{"line_number":850,"context_line":"        resp.read()"},{"line_number":851,"context_line":"        count \u003d 0"}],"source_content_type":"text/x-python","patch_set":19,"id":"872ab2b9_e2ef8ae4","line":848,"range":{"start_line":848,"start_character":16,"end_line":848,"end_character":52},"updated":"2024-06-03 16:57:34.000000000","message":"Are they, though? `X-Delete-After` is pretty handy, but *terrible* for trying to enforce uniform expiration times.","commit_id":"e4eac2c42a16d3b9555ab129f516ec0f72e3fdc1"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"9bb10b59a836b2abd382cfea53a2cf8f712cd7c9","unresolved":false,"context_lines":[{"line_number":845,"context_line":""},{"line_number":846,"context_line":"        # wait for the manifest to expire"},{"line_number":847,"context_line":"        # the objects will also have expired at the same time"},{"line_number":848,"context_line":"        # since their x-delete-at times are the same"},{"line_number":849,"context_line":"        resp \u003d retry(get_manifest)"},{"line_number":850,"context_line":"        resp.read()"},{"line_number":851,"context_line":"        count \u003d 0"}],"source_content_type":"text/x-python","patch_set":19,"id":"342e8a8d_c45c69ad","line":848,"range":{"start_line":848,"start_character":16,"end_line":848,"end_character":52},"in_reply_to":"872ab2b9_e2ef8ae4","updated":"2024-06-04 22:29:20.000000000","message":"Acknowledged","commit_id":"e4eac2c42a16d3b9555ab129f516ec0f72e3fdc1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1aebcdc694394c4f24efbfb5a6a93a2da2f1b70e","unresolved":true,"context_lines":[{"line_number":856,"context_line":"            time.sleep(1)"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        # check to see manifest has expired"},{"line_number":859,"context_line":"        self.assertEqual(resp.status, 404)"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        def get_parts(url, token, parsed, conn, objnum, extra_headers\u003dNone):"},{"line_number":862,"context_line":"            headers \u003d {\u0027X-Auth-Token\u0027: token}"}],"source_content_type":"text/x-python","patch_set":19,"id":"647edcf9_2b952d4e","line":859,"updated":"2024-06-03 16:57:34.000000000","message":"Yeah, 409 can make sense here if the manifest has not yet expired but the first segment has.","commit_id":"e4eac2c42a16d3b9555ab129f516ec0f72e3fdc1"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"9bb10b59a836b2abd382cfea53a2cf8f712cd7c9","unresolved":false,"context_lines":[{"line_number":856,"context_line":"            time.sleep(1)"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        # check to see manifest has expired"},{"line_number":859,"context_line":"        self.assertEqual(resp.status, 404)"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        def get_parts(url, token, parsed, conn, objnum, extra_headers\u003dNone):"},{"line_number":862,"context_line":"            headers \u003d {\u0027X-Auth-Token\u0027: token}"}],"source_content_type":"text/x-python","patch_set":19,"id":"f05a2998_0f0105f3","line":859,"in_reply_to":"647edcf9_2b952d4e","updated":"2024-06-04 22:29:20.000000000","message":"Acknowledged","commit_id":"e4eac2c42a16d3b9555ab129f516ec0f72e3fdc1"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"45a7c142505e9c8b5521e0a7ed93c768662892c5","unresolved":true,"context_lines":[{"line_number":783,"context_line":"        # data for segments"},{"line_number":784,"context_line":"        segments \u003d [b\u0027one\u0027, b\u0027two\u0027, b\u0027three\u0027, b\u0027four\u0027]"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        def put_data(url, token, parsed, conn, segments, manifest\u003dFalse):"},{"line_number":787,"context_line":"            for objnum in range(len(segments)):"},{"line_number":788,"context_line":"                dt \u003d datetime.datetime.now()"},{"line_number":789,"context_line":"                epoch \u003d time.mktime(dt.timetuple())"}],"source_content_type":"text/x-python","patch_set":25,"id":"6883b23c_61cdf8f9","line":786,"updated":"2024-06-25 06:06:33.000000000","message":"So whats the point with the manifest here? it seems to write 4 manifests on the same name. Or do we just want 1?","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4c9de853873eff15329303eef5dd735dd25bda4b","unresolved":false,"context_lines":[{"line_number":783,"context_line":"        # data for segments"},{"line_number":784,"context_line":"        segments \u003d [b\u0027one\u0027, b\u0027two\u0027, b\u0027three\u0027, b\u0027four\u0027]"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        def put_data(url, token, parsed, conn, segments, manifest\u003dFalse):"},{"line_number":787,"context_line":"            for objnum in range(len(segments)):"},{"line_number":788,"context_line":"                dt \u003d datetime.datetime.now()"},{"line_number":789,"context_line":"                epoch \u003d time.mktime(dt.timetuple())"}],"source_content_type":"text/x-python","patch_set":25,"id":"c24622ff_302b782c","line":786,"in_reply_to":"6883b23c_61cdf8f9","updated":"2024-07-31 16:46:00.000000000","message":"ya we want just 1, fixed the function.","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"45a7c142505e9c8b5521e0a7ed93c768662892c5","unresolved":true,"context_lines":[{"line_number":793,"context_line":"                                      parsed.path, self.container,"},{"line_number":794,"context_line":"                                      str(objnum)),"},{"line_number":795,"context_line":"                                      \u0027size_bytes\u0027: len(segments[objnum])} for"},{"line_number":796,"context_line":"                                     objnum in range(len(segments))]"},{"line_number":797,"context_line":"                    conn.request(\u0027PUT\u0027, \u0027%s/%s/manifest\u0027 % ("},{"line_number":798,"context_line":"                                 parsed.path, self.container),"},{"line_number":799,"context_line":"                                 json.dumps(manifest_data),"}],"source_content_type":"text/x-python","patch_set":25,"id":"6540d9a0_d8e6932e","line":796,"range":{"start_line":796,"start_character":37,"end_line":796,"end_character":43},"updated":"2024-06-25 06:06:33.000000000","message":"Although it\u0027s ok to have the same name it is a little confusing using the same name \"objnum\" here and in the for loop on line 787. Probably better and more readible if you used different names?\n\nAlso this looks like an SLO manifest. But below you seem to be creating a DLO manifest object.","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"aa659bd4f99813bf56759c160c56b1e97f57bf85","unresolved":false,"context_lines":[{"line_number":793,"context_line":"                                      parsed.path, self.container,"},{"line_number":794,"context_line":"                                      str(objnum)),"},{"line_number":795,"context_line":"                                      \u0027size_bytes\u0027: len(segments[objnum])} for"},{"line_number":796,"context_line":"                                     objnum in range(len(segments))]"},{"line_number":797,"context_line":"                    conn.request(\u0027PUT\u0027, \u0027%s/%s/manifest\u0027 % ("},{"line_number":798,"context_line":"                                 parsed.path, self.container),"},{"line_number":799,"context_line":"                                 json.dumps(manifest_data),"}],"source_content_type":"text/x-python","patch_set":25,"id":"b261195e_c1cf7cde","line":796,"range":{"start_line":796,"start_character":37,"end_line":796,"end_character":43},"in_reply_to":"6540d9a0_d8e6932e","updated":"2024-08-01 19:58:18.000000000","message":"Done","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"45a7c142505e9c8b5521e0a7ed93c768662892c5","unresolved":true,"context_lines":[{"line_number":813,"context_line":"                assert resp.status \u003d\u003d 201, \"Response status is not 201\""},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"        retry(put_data, segments, manifest\u003dTrue)"},{"line_number":816,"context_line":"        retry(put_data, segments)"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"        # get the manifest"},{"line_number":819,"context_line":"        def get_manifest(url, token, parsed, conn, extra_headers\u003dNone):"}],"source_content_type":"text/x-python","patch_set":25,"id":"272ddcb4_47659fdb","line":816,"updated":"2024-06-25 06:06:33.000000000","message":"And if we are to put an SLO doesn\u0027t the segments need to be put first?","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4c9de853873eff15329303eef5dd735dd25bda4b","unresolved":false,"context_lines":[{"line_number":813,"context_line":"                assert resp.status \u003d\u003d 201, \"Response status is not 201\""},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"        retry(put_data, segments, manifest\u003dTrue)"},{"line_number":816,"context_line":"        retry(put_data, segments)"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"        # get the manifest"},{"line_number":819,"context_line":"        def get_manifest(url, token, parsed, conn, extra_headers\u003dNone):"}],"source_content_type":"text/x-python","patch_set":25,"id":"b28eda50_7fc23f05","line":816,"in_reply_to":"272ddcb4_47659fdb","updated":"2024-07-31 16:46:00.000000000","message":"Done","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e771b92f5a9d5539f7897a76c1b5af65ffe0a161","unresolved":true,"context_lines":[{"line_number":792,"context_line":"        def put_data(url, token, parsed, conn, segments, manifest\u003dFalse):"},{"line_number":793,"context_line":"            dt \u003d datetime.datetime.now()"},{"line_number":794,"context_line":"            epoch \u003d time.mktime(dt.timetuple())"},{"line_number":795,"context_line":"            delete_time \u003d str(int(epoch) + 2)"},{"line_number":796,"context_line":"            if manifest:"},{"line_number":797,"context_line":"                manifest_data \u003d [{\u0027path\u0027: \u0027%s/%s/segments/%s\u0027 % ("},{"line_number":798,"context_line":"                    parsed.path, self.container, str(objnum)), \u0027range\u0027: \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"2766b8ac_868f3af9","line":795,"updated":"2024-08-13 21:13:38.000000000","message":"I think you can simplify this spelling of \"get a delete_time 2s in the future\"\n\n```\n\u003e\u003e\u003e import time, datetime\n\u003e\u003e\u003e time.mktime(datetime.datetime.now().timetuple())\n1723575857.0\n\u003e\u003e\u003e time.time()\n1723575861.009912\n```","commit_id":"ac3b89e11d63c865234aa81f6f4e0fd056d5c824"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"ae7939de01c970626e0d9c84f76c88e87b91238f","unresolved":false,"context_lines":[{"line_number":792,"context_line":"        def put_data(url, token, parsed, conn, segments, manifest\u003dFalse):"},{"line_number":793,"context_line":"            dt \u003d datetime.datetime.now()"},{"line_number":794,"context_line":"            epoch \u003d time.mktime(dt.timetuple())"},{"line_number":795,"context_line":"            delete_time \u003d str(int(epoch) + 2)"},{"line_number":796,"context_line":"            if manifest:"},{"line_number":797,"context_line":"                manifest_data \u003d [{\u0027path\u0027: \u0027%s/%s/segments/%s\u0027 % ("},{"line_number":798,"context_line":"                    parsed.path, self.container, str(objnum)), \u0027range\u0027: \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"4de36b8f_aa4ac640","line":795,"in_reply_to":"2766b8ac_868f3af9","updated":"2024-08-24 12:50:34.000000000","message":"Acknowledged","commit_id":"ac3b89e11d63c865234aa81f6f4e0fd056d5c824"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e771b92f5a9d5539f7897a76c1b5af65ffe0a161","unresolved":true,"context_lines":[{"line_number":795,"context_line":"            delete_time \u003d str(int(epoch) + 2)"},{"line_number":796,"context_line":"            if manifest:"},{"line_number":797,"context_line":"                manifest_data \u003d [{\u0027path\u0027: \u0027%s/%s/segments/%s\u0027 % ("},{"line_number":798,"context_line":"                    parsed.path, self.container, str(objnum)), \u0027range\u0027: \u0027\u0027,"},{"line_number":799,"context_line":"                    \u0027size_bytes\u0027: len(segments[objnum])}"},{"line_number":800,"context_line":"                    for objnum in range(len(segments))]"},{"line_number":801,"context_line":"                manifest_json \u003d json.dumps(manifest_data)"}],"source_content_type":"text/x-python","patch_set":30,"id":"2cf323ac_771aee96","line":798,"updated":"2024-08-13 21:13:38.000000000","message":"I don\u0027t think it\u0027s ok to include the storage-namespace in the path of the manifest\n\nhttps://docs.openstack.org/swift/latest/overview_large_objects.html#uploading-the-manifest","commit_id":"ac3b89e11d63c865234aa81f6f4e0fd056d5c824"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"ae7939de01c970626e0d9c84f76c88e87b91238f","unresolved":false,"context_lines":[{"line_number":795,"context_line":"            delete_time \u003d str(int(epoch) + 2)"},{"line_number":796,"context_line":"            if manifest:"},{"line_number":797,"context_line":"                manifest_data \u003d [{\u0027path\u0027: \u0027%s/%s/segments/%s\u0027 % ("},{"line_number":798,"context_line":"                    parsed.path, self.container, str(objnum)), \u0027range\u0027: \u0027\u0027,"},{"line_number":799,"context_line":"                    \u0027size_bytes\u0027: len(segments[objnum])}"},{"line_number":800,"context_line":"                    for objnum in range(len(segments))]"},{"line_number":801,"context_line":"                manifest_json \u003d json.dumps(manifest_data)"}],"source_content_type":"text/x-python","patch_set":30,"id":"9bef9397_bc1bf242","line":798,"in_reply_to":"2cf323ac_771aee96","updated":"2024-08-24 12:50:34.000000000","message":"Acknowledged","commit_id":"ac3b89e11d63c865234aa81f6f4e0fd056d5c824"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e771b92f5a9d5539f7897a76c1b5af65ffe0a161","unresolved":true,"context_lines":[{"line_number":810,"context_line":"                                 \u0027Etag\u0027: json_md5,"},{"line_number":811,"context_line":"                                 \u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":812,"context_line":"                                 \u0027Content-Length\u0027: str(len(manifest_json))})"},{"line_number":813,"context_line":"                resp \u003d check_response(conn)"},{"line_number":814,"context_line":"                resp.read()"},{"line_number":815,"context_line":"            else:"},{"line_number":816,"context_line":"                for objnum in range(len(segments)):"}],"source_content_type":"text/x-python","patch_set":30,"id":"13e9b84d_6d8b5db2","line":813,"updated":"2024-08-13 21:13:38.000000000","message":"it doesn\u0027t seem like this method is checking the response.status \u003d\u003d 201\n\nhttps://github.com/NVIDIA/swift/blob/master/test/functional/__init__.py#L1200\n\nProbably a good idea to get an error here if the PUT returns 400\n\n```\n(Pdb) resp.url\n\u0027http://saio:8080/v1/AUTH_test/a7695c0615884d489a58ef06b221c2e5/manifest?multipart-manifest\u003dput\u0027\n(Pdb) resp.status\n400\n(Pdb) resp.text\n\u0027Errors:\\n/v1/AUTH_test/a7695c0615884d489a58ef06b221c2e5/segments/0, 404 Not Found\\n/v1/AUTH_test/a7695c0615884d489a58ef06b221c2e5/segments/1, 404 Not Found\\n/v1/AUTH_test/a7695c0615884d489a58ef06b221c2e5/segments/3, 404 Not Found\\n/v1/AUTH_test/a7695c0615884d489a58ef06b221c2e5/segments/2, 404 Not Found\\n\u0027\n```","commit_id":"ac3b89e11d63c865234aa81f6f4e0fd056d5c824"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"ae7939de01c970626e0d9c84f76c88e87b91238f","unresolved":false,"context_lines":[{"line_number":810,"context_line":"                                 \u0027Etag\u0027: json_md5,"},{"line_number":811,"context_line":"                                 \u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":812,"context_line":"                                 \u0027Content-Length\u0027: str(len(manifest_json))})"},{"line_number":813,"context_line":"                resp \u003d check_response(conn)"},{"line_number":814,"context_line":"                resp.read()"},{"line_number":815,"context_line":"            else:"},{"line_number":816,"context_line":"                for objnum in range(len(segments)):"}],"source_content_type":"text/x-python","patch_set":30,"id":"97efd792_dffbc546","line":813,"in_reply_to":"13e9b84d_6d8b5db2","updated":"2024-08-24 12:50:34.000000000","message":"Acknowledged","commit_id":"ac3b89e11d63c865234aa81f6f4e0fd056d5c824"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e771b92f5a9d5539f7897a76c1b5af65ffe0a161","unresolved":true,"context_lines":[{"line_number":825,"context_line":"                assert resp.status \u003d\u003d 201, \"Response status is not 201\""},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"        retry(put_data, segments)"},{"line_number":828,"context_line":"        retry(put_data, segments, manifest\u003dTrue)"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"        # get the manifest"},{"line_number":831,"context_line":"        def get_manifest(url, token, parsed, conn, extra_headers\u003dNone):"}],"source_content_type":"text/x-python","patch_set":30,"id":"9fd6b1a2_e6506025","line":828,"updated":"2024-08-13 21:13:38.000000000","message":"this reads like the segments and manifest will have different x-delete-at times","commit_id":"ac3b89e11d63c865234aa81f6f4e0fd056d5c824"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"3ebabf5f4f4c2af6de51228fba6ac44a52a9f100","unresolved":false,"context_lines":[{"line_number":825,"context_line":"                assert resp.status \u003d\u003d 201, \"Response status is not 201\""},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"        retry(put_data, segments)"},{"line_number":828,"context_line":"        retry(put_data, segments, manifest\u003dTrue)"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"        # get the manifest"},{"line_number":831,"context_line":"        def get_manifest(url, token, parsed, conn, extra_headers\u003dNone):"}],"source_content_type":"text/x-python","patch_set":30,"id":"5c42ccac_3d2acb68","line":828,"in_reply_to":"9fd6b1a2_e6506025","updated":"2024-10-17 20:46:33.000000000","message":"Not any more since it has been fleshed out to two separate functions","commit_id":"ac3b89e11d63c865234aa81f6f4e0fd056d5c824"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"92b894d2e49408a6ea967cd11bf672f94ad84bd1","unresolved":true,"context_lines":[{"line_number":808,"context_line":"                                            str(segment_object)),"},{"line_number":809,"context_line":"                        \u0027etag\u0027: etags[segment_object],"},{"line_number":810,"context_line":"                        \u0027size_bytes\u0027: size,"},{"line_number":811,"context_line":"                        \u0027range\u0027: f\u0027bytes\u003d{start}-{end}\u0027"},{"line_number":812,"context_line":"                    })"},{"line_number":813,"context_line":"                    start \u003d end + 1"},{"line_number":814,"context_line":"                manifest_json \u003d json.dumps(manifest_data)"}],"source_content_type":"text/x-python","patch_set":33,"id":"cdc92cfe_2e115c61","line":811,"updated":"2024-08-29 17:13:14.000000000","message":"Do we actually need (or even want) to take ranges from the segments in the SLO? If we do, this syntax isn\u0027t right for it: https://github.com/openstack/swift/blob/2.33.0/swift/common/middleware/slo.py#L68","commit_id":"cc3333b8d3e5d9d93fe38132c30fe47c5147f4e0"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a86060fd890875969ff4535a792df910a653f804","unresolved":false,"context_lines":[{"line_number":808,"context_line":"                                            str(segment_object)),"},{"line_number":809,"context_line":"                        \u0027etag\u0027: etags[segment_object],"},{"line_number":810,"context_line":"                        \u0027size_bytes\u0027: size,"},{"line_number":811,"context_line":"                        \u0027range\u0027: f\u0027bytes\u003d{start}-{end}\u0027"},{"line_number":812,"context_line":"                    })"},{"line_number":813,"context_line":"                    start \u003d end + 1"},{"line_number":814,"context_line":"                manifest_json \u003d json.dumps(manifest_data)"}],"source_content_type":"text/x-python","patch_set":33,"id":"cff23d6f_45dbecd5","line":811,"in_reply_to":"cdc92cfe_2e115c61","updated":"2024-09-03 15:14:08.000000000","message":"I see. For now i have removed it since it\u0027s an optional arg for the manifest anyways","commit_id":"cc3333b8d3e5d9d93fe38132c30fe47c5147f4e0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"92b894d2e49408a6ea967cd11bf672f94ad84bd1","unresolved":true,"context_lines":[{"line_number":813,"context_line":"                    start \u003d end + 1"},{"line_number":814,"context_line":"                manifest_json \u003d json.dumps(manifest_data)"},{"line_number":815,"context_line":"                json_md5 \u003d md5hex(manifest_json)"},{"line_number":816,"context_line":"                conn.request(\u0027PUT\u0027, \u0027%s/manifest%s\u0027 % ("},{"line_number":817,"context_line":"                             parsed.path, \u0027?multipart-manifest\u003dput\u0027),"},{"line_number":818,"context_line":"                             body\u003djson.dumps(manifest_data),"},{"line_number":819,"context_line":"                             headers\u003d{"},{"line_number":820,"context_line":"                                 \u0027X-Auth-Token\u0027: token,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ad36f45f_98da3214","line":817,"range":{"start_line":816,"start_character":36,"end_line":817,"end_character":67},"updated":"2024-08-29 17:13:14.000000000","message":"This is a container path like `/v1/AUTH_test/manifest`","commit_id":"cc3333b8d3e5d9d93fe38132c30fe47c5147f4e0"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"603076c466b41483b57bf5af939457a06c29d3c1","unresolved":false,"context_lines":[{"line_number":813,"context_line":"                    start \u003d end + 1"},{"line_number":814,"context_line":"                manifest_json \u003d json.dumps(manifest_data)"},{"line_number":815,"context_line":"                json_md5 \u003d md5hex(manifest_json)"},{"line_number":816,"context_line":"                conn.request(\u0027PUT\u0027, \u0027%s/manifest%s\u0027 % ("},{"line_number":817,"context_line":"                             parsed.path, \u0027?multipart-manifest\u003dput\u0027),"},{"line_number":818,"context_line":"                             body\u003djson.dumps(manifest_data),"},{"line_number":819,"context_line":"                             headers\u003d{"},{"line_number":820,"context_line":"                                 \u0027X-Auth-Token\u0027: token,"}],"source_content_type":"text/x-python","patch_set":33,"id":"87bb6e76_64e33cab","line":817,"range":{"start_line":816,"start_character":36,"end_line":817,"end_character":67},"in_reply_to":"ad36f45f_98da3214","updated":"2024-08-30 16:13:10.000000000","message":"Yes!","commit_id":"cc3333b8d3e5d9d93fe38132c30fe47c5147f4e0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"92b894d2e49408a6ea967cd11bf672f94ad84bd1","unresolved":true,"context_lines":[{"line_number":828,"context_line":"                assert resp.status \u003d\u003d 201, \"Response status is not 201\""},{"line_number":829,"context_line":"            else:"},{"line_number":830,"context_line":"                for objnum in range(len(segments)):"},{"line_number":831,"context_line":"                    conn.request(\u0027PUT\u0027, \u0027%s/%s/segments/%s\u0027 % ("},{"line_number":832,"context_line":"                        parsed.path, self.container,"},{"line_number":833,"context_line":"                        str(objnum)),"},{"line_number":834,"context_line":"                        body\u003dsegments[objnum],"}],"source_content_type":"text/x-python","patch_set":33,"id":"b2770484_ff601b48","line":831,"range":{"start_line":831,"start_character":47,"end_line":831,"end_character":55},"updated":"2024-08-29 17:13:14.000000000","message":"There\u0027s no `segments` in the manifest though...","commit_id":"cc3333b8d3e5d9d93fe38132c30fe47c5147f4e0"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"0f914c6917f60c1d31fc0552ab9e3457e48d685e","unresolved":false,"context_lines":[{"line_number":828,"context_line":"                assert resp.status \u003d\u003d 201, \"Response status is not 201\""},{"line_number":829,"context_line":"            else:"},{"line_number":830,"context_line":"                for objnum in range(len(segments)):"},{"line_number":831,"context_line":"                    conn.request(\u0027PUT\u0027, \u0027%s/%s/segments/%s\u0027 % ("},{"line_number":832,"context_line":"                        parsed.path, self.container,"},{"line_number":833,"context_line":"                        str(objnum)),"},{"line_number":834,"context_line":"                        body\u003dsegments[objnum],"}],"source_content_type":"text/x-python","patch_set":33,"id":"43ba835c_9e23983c","line":831,"range":{"start_line":831,"start_character":47,"end_line":831,"end_character":55},"in_reply_to":"b2770484_ff601b48","updated":"2024-08-30 16:12:19.000000000","message":"That\u0027s funny it was such a small fix, i guess i was a bit exhausted in the end there.","commit_id":"cc3333b8d3e5d9d93fe38132c30fe47c5147f4e0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"13a097587081668f626e2f96b1dfad1ea8167d85","unresolved":true,"context_lines":[{"line_number":814,"context_line":"                json_md5 \u003d md5hex(manifest_json)"},{"line_number":815,"context_line":"                conn.request("},{"line_number":816,"context_line":"                    \u0027PUT\u0027,"},{"line_number":817,"context_line":"                    \u0027%s/%s/manifest?multipart-manifest\u003dput\u0027 % ("},{"line_number":818,"context_line":"                        parsed.path, self.container),"},{"line_number":819,"context_line":"                    body\u003djson.dumps(manifest_data),"},{"line_number":820,"context_line":"                    headers\u003d{"}],"source_content_type":"text/x-python","patch_set":36,"id":"1e6b5664_0cac10c3","line":817,"range":{"start_line":817,"start_character":36,"end_line":817,"end_character":58},"updated":"2024-09-04 20:38:41.000000000","message":"I was rather expecting this test to be in `test/functional/test_slo.py`...","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a4b6ecee9dcf14aad4476b46de790a82e938ea3a","unresolved":false,"context_lines":[{"line_number":814,"context_line":"                json_md5 \u003d md5hex(manifest_json)"},{"line_number":815,"context_line":"                conn.request("},{"line_number":816,"context_line":"                    \u0027PUT\u0027,"},{"line_number":817,"context_line":"                    \u0027%s/%s/manifest?multipart-manifest\u003dput\u0027 % ("},{"line_number":818,"context_line":"                        parsed.path, self.container),"},{"line_number":819,"context_line":"                    body\u003djson.dumps(manifest_data),"},{"line_number":820,"context_line":"                    headers\u003d{"}],"source_content_type":"text/x-python","patch_set":36,"id":"47bb79d3_de132707","line":817,"range":{"start_line":817,"start_character":36,"end_line":817,"end_character":58},"in_reply_to":"1e6b5664_0cac10c3","updated":"2024-09-09 15:09:39.000000000","message":"ya that was what i was debating as well, when i was thinking of placing this test, i will move it to the recommended file","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"13a097587081668f626e2f96b1dfad1ea8167d85","unresolved":true,"context_lines":[{"line_number":821,"context_line":"                        \u0027X-Auth-Token\u0027: token,"},{"line_number":822,"context_line":"                        \u0027X-Delete-At\u0027: delete_time,"},{"line_number":823,"context_line":"                        \u0027X-Static-Large-Object\u0027: \u0027true\u0027,"},{"line_number":824,"context_line":"                        \u0027X-Object-Sysmeta-Slo-Etag\u0027: json_md5,"},{"line_number":825,"context_line":"                        \u0027Content-Type\u0027: \u0027application/json\u0027})"},{"line_number":826,"context_line":"                index +\u003d 1"},{"line_number":827,"context_line":"                resp \u003d check_response(conn)"}],"source_content_type":"text/x-python","patch_set":36,"id":"b506252d_753ca185","line":824,"range":{"start_line":824,"start_character":25,"end_line":824,"end_character":50},"updated":"2024-09-04 20:38:41.000000000","message":"This will get stripped out by the gatekeeper -- slo is responsible for setting it, not the client.","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a4b6ecee9dcf14aad4476b46de790a82e938ea3a","unresolved":false,"context_lines":[{"line_number":821,"context_line":"                        \u0027X-Auth-Token\u0027: token,"},{"line_number":822,"context_line":"                        \u0027X-Delete-At\u0027: delete_time,"},{"line_number":823,"context_line":"                        \u0027X-Static-Large-Object\u0027: \u0027true\u0027,"},{"line_number":824,"context_line":"                        \u0027X-Object-Sysmeta-Slo-Etag\u0027: json_md5,"},{"line_number":825,"context_line":"                        \u0027Content-Type\u0027: \u0027application/json\u0027})"},{"line_number":826,"context_line":"                index +\u003d 1"},{"line_number":827,"context_line":"                resp \u003d check_response(conn)"}],"source_content_type":"text/x-python","patch_set":36,"id":"6dd8285a_a04b57ce","line":824,"range":{"start_line":824,"start_character":25,"end_line":824,"end_character":50},"in_reply_to":"b506252d_753ca185","updated":"2024-09-09 15:09:39.000000000","message":"Acknowledged","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"13a097587081668f626e2f96b1dfad1ea8167d85","unresolved":true,"context_lines":[{"line_number":869,"context_line":"        # check to see manifest has expired"},{"line_number":870,"context_line":"        self.assertEqual(resp.status, 404, resp.headers.get(\u0027x-trans-id\u0027))"},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"        def get_parts(url, token, parsed, conn, objnum, extra_headers\u003dNone):"},{"line_number":873,"context_line":"            headers \u003d {\u0027X-Auth-Token\u0027: token}"},{"line_number":874,"context_line":"            if extra_headers:"},{"line_number":875,"context_line":"                headers.update(extra_headers)"}],"source_content_type":"text/x-python","patch_set":36,"id":"76560f44_eeff4e74","line":872,"range":{"start_line":872,"start_character":12,"end_line":872,"end_character":21},"updated":"2024-09-04 20:38:41.000000000","message":"This just gets the one part, yeah? Better as `get_part`","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a4b6ecee9dcf14aad4476b46de790a82e938ea3a","unresolved":false,"context_lines":[{"line_number":869,"context_line":"        # check to see manifest has expired"},{"line_number":870,"context_line":"        self.assertEqual(resp.status, 404, resp.headers.get(\u0027x-trans-id\u0027))"},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"        def get_parts(url, token, parsed, conn, objnum, extra_headers\u003dNone):"},{"line_number":873,"context_line":"            headers \u003d {\u0027X-Auth-Token\u0027: token}"},{"line_number":874,"context_line":"            if extra_headers:"},{"line_number":875,"context_line":"                headers.update(extra_headers)"}],"source_content_type":"text/x-python","patch_set":36,"id":"c0dc1c53_a0a82b88","line":872,"range":{"start_line":872,"start_character":12,"end_line":872,"end_character":21},"in_reply_to":"76560f44_eeff4e74","updated":"2024-09-09 15:09:39.000000000","message":"Acknowledged","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"13a097587081668f626e2f96b1dfad1ea8167d85","unresolved":true,"context_lines":[{"line_number":873,"context_line":"            headers \u003d {\u0027X-Auth-Token\u0027: token}"},{"line_number":874,"context_line":"            if extra_headers:"},{"line_number":875,"context_line":"                headers.update(extra_headers)"},{"line_number":876,"context_line":"            conn.request(\u0027GET\u0027, \u0027%s/%s/segments/%s\u0027 % (parsed.path,"},{"line_number":877,"context_line":"                                                       self.container,"},{"line_number":878,"context_line":"                                                       str(objnum)),"},{"line_number":879,"context_line":"                         \u0027\u0027, headers)"}],"source_content_type":"text/x-python","patch_set":36,"id":"96113ad2_cfca4e55","line":876,"updated":"2024-09-04 20:38:41.000000000","message":"Do we mean for this to be getting the segments directly, or should we be using the `?part-number\u003dX` API on the manifest?\n\nAnd should we be doing GETs, or HEADs? The commit message seems to be talking about HEADs...","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a4b6ecee9dcf14aad4476b46de790a82e938ea3a","unresolved":false,"context_lines":[{"line_number":873,"context_line":"            headers \u003d {\u0027X-Auth-Token\u0027: token}"},{"line_number":874,"context_line":"            if extra_headers:"},{"line_number":875,"context_line":"                headers.update(extra_headers)"},{"line_number":876,"context_line":"            conn.request(\u0027GET\u0027, \u0027%s/%s/segments/%s\u0027 % (parsed.path,"},{"line_number":877,"context_line":"                                                       self.container,"},{"line_number":878,"context_line":"                                                       str(objnum)),"},{"line_number":879,"context_line":"                         \u0027\u0027, headers)"}],"source_content_type":"text/x-python","patch_set":36,"id":"7cc8245b_70ea9b31","line":876,"in_reply_to":"96113ad2_cfca4e55","updated":"2024-09-09 15:09:39.000000000","message":"Technically the situation applies to whenever we have to refetch the manifest so it could be both regardless, we should be prepared for HEADs and GETs, update the commit message accordingly","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"13a097587081668f626e2f96b1dfad1ea8167d85","unresolved":true,"context_lines":[{"line_number":894,"context_line":"            resp.read()"},{"line_number":895,"context_line":"            headers \u003d HeaderKeyDict(resp.getheaders())"},{"line_number":896,"context_line":"            self.assertEqual(resp.status, 200)"},{"line_number":897,"context_line":"            self.assertTrue(now \u003e headers[\u0027X-Delete-At\u0027])"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"        def head_manifest(url, token, parsed, conn, extra_headers\u003dNone):"},{"line_number":900,"context_line":"            headers \u003d {\u0027X-Auth-Token\u0027: token}"}],"source_content_type":"text/x-python","patch_set":36,"id":"def0e16d_f725412d","line":897,"updated":"2024-09-04 20:38:41.000000000","message":"We should probably include a no-`X-Open-Expired` case and see that it 404s -- then the comparison between `now` and `X-Delete-At` is irrelevant.","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a4b6ecee9dcf14aad4476b46de790a82e938ea3a","unresolved":false,"context_lines":[{"line_number":894,"context_line":"            resp.read()"},{"line_number":895,"context_line":"            headers \u003d HeaderKeyDict(resp.getheaders())"},{"line_number":896,"context_line":"            self.assertEqual(resp.status, 200)"},{"line_number":897,"context_line":"            self.assertTrue(now \u003e headers[\u0027X-Delete-At\u0027])"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"        def head_manifest(url, token, parsed, conn, extra_headers\u003dNone):"},{"line_number":900,"context_line":"            headers \u003d {\u0027X-Auth-Token\u0027: token}"}],"source_content_type":"text/x-python","patch_set":36,"id":"a601d686_120cdd2f","line":897,"in_reply_to":"def0e16d_f725412d","updated":"2024-09-09 15:09:39.000000000","message":"Done","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"}],"test/functional/test_slo.py":[{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"3430dfd561cb3b64032fe35dcbbc4499f07afd17","unresolved":false,"context_lines":[{"line_number":25,"context_line":"import six"},{"line_number":26,"context_line":"from six.moves import urllib"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from swift.common.header_key_dict import HeaderKeyDict"},{"line_number":29,"context_line":"from swift.common.swob import normalize_etag"},{"line_number":30,"context_line":"from swift.common.utils import md5, config_true_value"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"becc04e5_944630c3","line":28,"in_reply_to":"3d460578_3c34b79f","updated":"2024-09-09 21:13:31.000000000","message":"\u003e pep8: F401 \u0027swift.common.header_key_dict.HeaderKeyDict\u0027 imported but unused\n\nPlease fix.","commit_id":"64a2299783128a1d71503878a72c26b23839f937"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"3430dfd561cb3b64032fe35dcbbc4499f07afd17","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        for segment in segments:"},{"line_number":474,"context_line":"            etags.append(md5hex(segment))"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        def put_data(url, token, parsed, conn, object_segments,"},{"line_number":477,"context_line":"                     manifest\u003dFalse):"},{"line_number":478,"context_line":"            now \u003d int(time.time())"},{"line_number":479,"context_line":"            delete_time \u003d now + 2"}],"source_content_type":"text/x-python","patch_set":37,"id":"05918946_a1838360","line":476,"in_reply_to":"10a203a8_5a33e7fa","updated":"2024-09-09 21:13:31.000000000","message":"\u003e pep8: F811 redefinition of unused \u0027parsed\u0027 from line 32\n\nPlease fix.","commit_id":"64a2299783128a1d71503878a72c26b23839f937"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ea6db4d1dbba6389020059d90d4783ec65710c3c","unresolved":true,"context_lines":[{"line_number":541,"context_line":"        # wait for the manifest to expire"},{"line_number":542,"context_line":"        # the objects will also have expired at the same time"},{"line_number":543,"context_line":"        # since their x-delete-at times are the same"},{"line_number":544,"context_line":"        time.sleep(7)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"        resp \u003d retry(get_manifest)"},{"line_number":547,"context_line":"        resp.read()"}],"source_content_type":"text/x-python","patch_set":38,"id":"ccfe910c_9bef5402","line":544,"range":{"start_line":544,"start_character":19,"end_line":544,"end_character":20},"updated":"2024-09-11 04:02:08.000000000","message":"This seems excessive -- surely we could drop it down to at most 3?","commit_id":"97ce746aeb12fe9b5a15d631f4ff9387d03532d2"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"d422d142dfe798841f310fe9630bc6d8ad8ab26b","unresolved":false,"context_lines":[{"line_number":541,"context_line":"        # wait for the manifest to expire"},{"line_number":542,"context_line":"        # the objects will also have expired at the same time"},{"line_number":543,"context_line":"        # since their x-delete-at times are the same"},{"line_number":544,"context_line":"        time.sleep(7)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"        resp \u003d retry(get_manifest)"},{"line_number":547,"context_line":"        resp.read()"}],"source_content_type":"text/x-python","patch_set":38,"id":"d38fb8ba_f1536a79","line":544,"range":{"start_line":544,"start_character":19,"end_line":544,"end_character":20},"in_reply_to":"ccfe910c_9bef5402","updated":"2024-09-17 19:56:28.000000000","message":"Done.","commit_id":"97ce746aeb12fe9b5a15d631f4ff9387d03532d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ea6db4d1dbba6389020059d90d4783ec65710c3c","unresolved":true,"context_lines":[{"line_number":556,"context_line":"            conn.request(method, \u0027%s/%s/segments/%s%s\u0027 % (parsed.path,"},{"line_number":557,"context_line":"                                                          cont_name,"},{"line_number":558,"context_line":"                                                          str(objnum),"},{"line_number":559,"context_line":"                         \u0027?part-number\u003d1\u0027),"},{"line_number":560,"context_line":"                         \u0027\u0027, headers)"},{"line_number":561,"context_line":"            return check_response(conn)"},{"line_number":562,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"e5a749c6_7b85b74d","line":559,"updated":"2024-09-11 04:02:08.000000000","message":"So wait, are we trying to access via part-number or not? The request path is still looking directly at the segment -- which I\u0027m pretty sure is why this passes even without any changes under `swift/`.","commit_id":"97ce746aeb12fe9b5a15d631f4ff9387d03532d2"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"d422d142dfe798841f310fe9630bc6d8ad8ab26b","unresolved":false,"context_lines":[{"line_number":556,"context_line":"            conn.request(method, \u0027%s/%s/segments/%s%s\u0027 % (parsed.path,"},{"line_number":557,"context_line":"                                                          cont_name,"},{"line_number":558,"context_line":"                                                          str(objnum),"},{"line_number":559,"context_line":"                         \u0027?part-number\u003d1\u0027),"},{"line_number":560,"context_line":"                         \u0027\u0027, headers)"},{"line_number":561,"context_line":"            return check_response(conn)"},{"line_number":562,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3c204cc3_1e49ba67","line":559,"in_reply_to":"e5a749c6_7b85b74d","updated":"2024-09-17 19:56:28.000000000","message":"Acknowledged","commit_id":"97ce746aeb12fe9b5a15d631f4ff9387d03532d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d7c25e54ccbfaac44d0831abab51f949ccbbb20b","unresolved":true,"context_lines":[{"line_number":557,"context_line":"                                                          cont_name,"},{"line_number":558,"context_line":"                                                          objnum,"},{"line_number":559,"context_line":"                         \u0027?part-number\u003d1\u0027),"},{"line_number":560,"context_line":"                         \u0027\u0027, headers)"},{"line_number":561,"context_line":"            return check_response(conn)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        resp \u003d retry(get_manifest, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"}],"source_content_type":"text/x-python","patch_set":44,"id":"da73c6d5_095832af","line":560,"updated":"2024-10-03 22:00:36.000000000","message":"I was expecting this to be making a request to a path more like `\u0027%s/%s/manifest?part-number\u003d%d\u0027 % (parsed.path, cont_name, objnum)` ...\n\nI think that explains why this test still passes even when I back out the fix.","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"c6dea4aa4e35633e7c7ca3b8fac7073b3e4ce450","unresolved":true,"context_lines":[{"line_number":557,"context_line":"                                                          cont_name,"},{"line_number":558,"context_line":"                                                          objnum,"},{"line_number":559,"context_line":"                         \u0027?part-number\u003d1\u0027),"},{"line_number":560,"context_line":"                         \u0027\u0027, headers)"},{"line_number":561,"context_line":"            return check_response(conn)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        resp \u003d retry(get_manifest, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"}],"source_content_type":"text/x-python","patch_set":44,"id":"5714cee8_888ae9d0","line":560,"in_reply_to":"4335d073_cfe62a7b","updated":"2024-10-16 21:00:53.000000000","message":"i think the naming conventions i chose are confusing me as well since this being a very old patch. I am also hvaing a hard time understanding why i am getting 409\u0027s as the current functest stands, im sure i am missing something.","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"95e112b35583c038ff96e7a069dd8bc2bdce5fdf","unresolved":true,"context_lines":[{"line_number":557,"context_line":"                                                          cont_name,"},{"line_number":558,"context_line":"                                                          objnum,"},{"line_number":559,"context_line":"                         \u0027?part-number\u003d1\u0027),"},{"line_number":560,"context_line":"                         \u0027\u0027, headers)"},{"line_number":561,"context_line":"            return check_response(conn)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        resp \u003d retry(get_manifest, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"}],"source_content_type":"text/x-python","patch_set":44,"id":"eecc04fa_7a7d5c84","line":560,"in_reply_to":"5714cee8_888ae9d0","updated":"2024-10-16 21:01:36.000000000","message":"When i use my postman client on the same path i still get the desired `206` response that i want!!","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"91f11506a0dc59242ed94be43831023afbb14f77","unresolved":false,"context_lines":[{"line_number":557,"context_line":"                                                          cont_name,"},{"line_number":558,"context_line":"                                                          objnum,"},{"line_number":559,"context_line":"                         \u0027?part-number\u003d1\u0027),"},{"line_number":560,"context_line":"                         \u0027\u0027, headers)"},{"line_number":561,"context_line":"            return check_response(conn)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        resp \u003d retry(get_manifest, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"}],"source_content_type":"text/x-python","patch_set":44,"id":"4335d073_cfe62a7b","line":560,"in_reply_to":"da73c6d5_095832af","updated":"2024-10-03 23:49:35.000000000","message":"Done. I though i changed it already must have gotten backed out while incorporating feedback :-/","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"3ebabf5f4f4c2af6de51228fba6ac44a52a9f100","unresolved":false,"context_lines":[{"line_number":557,"context_line":"                                                          cont_name,"},{"line_number":558,"context_line":"                                                          objnum,"},{"line_number":559,"context_line":"                         \u0027?part-number\u003d1\u0027),"},{"line_number":560,"context_line":"                         \u0027\u0027, headers)"},{"line_number":561,"context_line":"            return check_response(conn)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        resp \u003d retry(get_manifest, extra_headers\u003d{\u0027X-Open-Expired\u0027: True})"}],"source_content_type":"text/x-python","patch_set":44,"id":"8b56137c_9a063046","line":560,"in_reply_to":"eecc04fa_7a7d5c84","updated":"2024-10-17 20:46:33.000000000","message":"Done","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"df26888f4c1d8e0e6b80fcc85f913fdf418148ca","unresolved":true,"context_lines":[{"line_number":553,"context_line":"            headers \u003d {\u0027X-Auth-Token\u0027: token}"},{"line_number":554,"context_line":"            if extra_headers:"},{"line_number":555,"context_line":"                headers.update(extra_headers)"},{"line_number":556,"context_line":"            conn.request(method, \u0027%s/%s/manifest/?part-number\u003d%d\u0027 % ("},{"line_number":557,"context_line":"                parsed.path,"},{"line_number":558,"context_line":"                cont_name,"},{"line_number":559,"context_line":"                objnum"}],"source_content_type":"text/x-python","patch_set":45,"id":"7db709c6_98b5cb55","line":556,"range":{"start_line":556,"start_character":48,"end_line":556,"end_character":49},"updated":"2024-10-04 04:27:42.000000000","message":"`manifest/`? With a trailing slash?","commit_id":"708ffb85d52629ea952df0d62644fddb17031a86"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"eddef711bbf65d90a513a71a26dfb5d109c0c897","unresolved":false,"context_lines":[{"line_number":553,"context_line":"            headers \u003d {\u0027X-Auth-Token\u0027: token}"},{"line_number":554,"context_line":"            if extra_headers:"},{"line_number":555,"context_line":"                headers.update(extra_headers)"},{"line_number":556,"context_line":"            conn.request(method, \u0027%s/%s/manifest/?part-number\u003d%d\u0027 % ("},{"line_number":557,"context_line":"                parsed.path,"},{"line_number":558,"context_line":"                cont_name,"},{"line_number":559,"context_line":"                objnum"}],"source_content_type":"text/x-python","patch_set":45,"id":"2889bb60_15ddc99f","line":556,"range":{"start_line":556,"start_character":48,"end_line":556,"end_character":49},"in_reply_to":"7db709c6_98b5cb55","updated":"2024-10-16 16:09:29.000000000","message":"Done","commit_id":"708ffb85d52629ea952df0d62644fddb17031a86"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7308e2f2ba6b7e6dfc34142b5cb7b414fbe51e29","unresolved":true,"context_lines":[{"line_number":477,"context_line":"            now \u003d int(time.time())"},{"line_number":478,"context_line":"            delete_time \u003d now + 2"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"            if manifest:"},{"line_number":481,"context_line":"                manifest_data \u003d []"},{"line_number":482,"context_line":"                start \u003d 0"},{"line_number":483,"context_line":"                index \u003d 0"}],"source_content_type":"text/x-python","patch_set":48,"id":"e2c162f5_2929e674","line":480,"updated":"2024-10-17 18:43:53.000000000","message":"probably best to have to functions - one that puts the manifest and one that puts the segments","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"c00e306ed66904858f66819a3fdcd135d9d4f12f","unresolved":false,"context_lines":[{"line_number":477,"context_line":"            now \u003d int(time.time())"},{"line_number":478,"context_line":"            delete_time \u003d now + 2"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"            if manifest:"},{"line_number":481,"context_line":"                manifest_data \u003d []"},{"line_number":482,"context_line":"                start \u003d 0"},{"line_number":483,"context_line":"                index \u003d 0"}],"source_content_type":"text/x-python","patch_set":48,"id":"9955e0ff_8bb3b179","line":480,"in_reply_to":"e2c162f5_2929e674","updated":"2024-10-17 20:44:22.000000000","message":"Done","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7308e2f2ba6b7e6dfc34142b5cb7b414fbe51e29","unresolved":true,"context_lines":[{"line_number":515,"context_line":"                        body\u003dobject_segments[objnum],"},{"line_number":516,"context_line":"                        headers\u003d{"},{"line_number":517,"context_line":"                            \u0027X-Auth-Token\u0027: token,"},{"line_number":518,"context_line":"                            \u0027X-Delete-At\u0027: delete_time})"},{"line_number":519,"context_line":"                    resp \u003d check_response(conn)"},{"line_number":520,"context_line":"                    body \u003d resp.read()"},{"line_number":521,"context_line":"                    self.assertEqual(resp.status, 201,"}],"source_content_type":"text/x-python","patch_set":48,"id":"7efc0eaf_8ac76144","line":518,"updated":"2024-10-17 18:43:53.000000000","message":"I think you should remove the `x-delete-at` on the segments:\n\n```\ndiff --git a/test/functional/test_slo.py b/test/functional/test_slo.py\nindex a29e34931..197ae534b 100644\n--- a/test/functional/test_slo.py\n+++ b/test/functional/test_slo.py\n@@ -513,9 +513,7 @@ class TestSlo(Base):\n                         cont_name,\n                         str(objnum)),\n                         body\u003dobject_segments[objnum],\n-                        headers\u003d{\n-                            \u0027X-Auth-Token\u0027: token,\n-                            \u0027X-Delete-At\u0027: delete_time})\n+                        headers\u003d{\u0027X-Auth-Token\u0027: token})\n                     resp \u003d check_response(conn)\n                     body \u003d resp.read()\n                     self.assertEqual(resp.status, 201,\n```","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"61702992e8e1b63dd09a8d634909c0eb11aa8b81","unresolved":false,"context_lines":[{"line_number":515,"context_line":"                        body\u003dobject_segments[objnum],"},{"line_number":516,"context_line":"                        headers\u003d{"},{"line_number":517,"context_line":"                            \u0027X-Auth-Token\u0027: token,"},{"line_number":518,"context_line":"                            \u0027X-Delete-At\u0027: delete_time})"},{"line_number":519,"context_line":"                    resp \u003d check_response(conn)"},{"line_number":520,"context_line":"                    body \u003d resp.read()"},{"line_number":521,"context_line":"                    self.assertEqual(resp.status, 201,"}],"source_content_type":"text/x-python","patch_set":48,"id":"2ccb9da2_788f24f8","line":518,"in_reply_to":"518b663a_e8abdded","updated":"2024-10-17 21:11:48.000000000","message":"Done","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"61702992e8e1b63dd09a8d634909c0eb11aa8b81","unresolved":true,"context_lines":[{"line_number":515,"context_line":"                        body\u003dobject_segments[objnum],"},{"line_number":516,"context_line":"                        headers\u003d{"},{"line_number":517,"context_line":"                            \u0027X-Auth-Token\u0027: token,"},{"line_number":518,"context_line":"                            \u0027X-Delete-At\u0027: delete_time})"},{"line_number":519,"context_line":"                    resp \u003d check_response(conn)"},{"line_number":520,"context_line":"                    body \u003d resp.read()"},{"line_number":521,"context_line":"                    self.assertEqual(resp.status, 201,"}],"source_content_type":"text/x-python","patch_set":48,"id":"a0c37a67_cb655b70","line":518,"in_reply_to":"518b663a_e8abdded","updated":"2024-10-17 21:11:48.000000000","message":"[reworded the patch](https://review.opendev.org/c/openstack/swift/+/916547/49..50)","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"c00e306ed66904858f66819a3fdcd135d9d4f12f","unresolved":true,"context_lines":[{"line_number":515,"context_line":"                        body\u003dobject_segments[objnum],"},{"line_number":516,"context_line":"                        headers\u003d{"},{"line_number":517,"context_line":"                            \u0027X-Auth-Token\u0027: token,"},{"line_number":518,"context_line":"                            \u0027X-Delete-At\u0027: delete_time})"},{"line_number":519,"context_line":"                    resp \u003d check_response(conn)"},{"line_number":520,"context_line":"                    body \u003d resp.read()"},{"line_number":521,"context_line":"                    self.assertEqual(resp.status, 201,"}],"source_content_type":"text/x-python","patch_set":48,"id":"518b663a_e8abdded","line":518,"in_reply_to":"7efc0eaf_8ac76144","updated":"2024-10-17 20:44:22.000000000","message":"an alternative that tim suggested is to introduce https://paste.opendev.org/show/bN7d6YRtoR0F79OCU0rK/\n\nplease keep an eye out for the patch description being reworded","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e535260a34e020f88c71db5b38a77ce855157896","unresolved":true,"context_lines":[{"line_number":571,"context_line":"                         extra_headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":572,"context_line":"                         part_num\u003dpart_num,)"},{"line_number":573,"context_line":"            resp.read()"},{"line_number":574,"context_line":"            self.assertEqual(resp.status, 206)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        for objnum in range(len(segments)):"},{"line_number":577,"context_line":"            part_num \u003d str(objnum + 1)"}],"source_content_type":"text/x-python","patch_set":48,"id":"bd86a07d_acc7506d","line":574,"updated":"2024-10-17 16:39:36.000000000","message":"desired response should be `206` and not `409`","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"c00e306ed66904858f66819a3fdcd135d9d4f12f","unresolved":false,"context_lines":[{"line_number":571,"context_line":"                         extra_headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":572,"context_line":"                         part_num\u003dpart_num,)"},{"line_number":573,"context_line":"            resp.read()"},{"line_number":574,"context_line":"            self.assertEqual(resp.status, 206)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        for objnum in range(len(segments)):"},{"line_number":577,"context_line":"            part_num \u003d str(objnum + 1)"}],"source_content_type":"text/x-python","patch_set":48,"id":"daad6194_21c6ba54","line":574,"in_reply_to":"28b5a74f_2d54a0ac","updated":"2024-10-17 20:44:22.000000000","message":"Done","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54140837b0955e6dd61099ca44aba8f77625e31e","unresolved":true,"context_lines":[{"line_number":571,"context_line":"                         extra_headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":572,"context_line":"                         part_num\u003dpart_num,)"},{"line_number":573,"context_line":"            resp.read()"},{"line_number":574,"context_line":"            self.assertEqual(resp.status, 206)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        for objnum in range(len(segments)):"},{"line_number":577,"context_line":"            part_num \u003d str(objnum + 1)"}],"source_content_type":"text/x-python","patch_set":48,"id":"28b5a74f_2d54a0ac","line":574,"in_reply_to":"bd86a07d_acc7506d","updated":"2024-10-17 18:19:45.000000000","message":"Ah! So maybe we **do** need that change in `request_helpers.py`!","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54140837b0955e6dd61099ca44aba8f77625e31e","unresolved":true,"context_lines":[{"line_number":585,"context_line":"        for objnum in range(len(segments)):"},{"line_number":586,"context_line":"            part_num \u003d str(objnum + 1)"},{"line_number":587,"context_line":"            resp \u003d retry(get_or_head_part,"},{"line_number":588,"context_line":"                         extra_headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":589,"context_line":"                         method\u003d\u0027HEAD\u0027, part_num\u003dpart_num)"},{"line_number":590,"context_line":"            resp.read()"},{"line_number":591,"context_line":"            self.assertEqual(resp.status, 404)"}],"source_content_type":"text/x-python","patch_set":48,"id":"ce592a65_1b055a22","line":588,"updated":"2024-10-17 18:19:45.000000000","message":"This doesn\u0027t seem to match the comment above...","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"c00e306ed66904858f66819a3fdcd135d9d4f12f","unresolved":false,"context_lines":[{"line_number":585,"context_line":"        for objnum in range(len(segments)):"},{"line_number":586,"context_line":"            part_num \u003d str(objnum + 1)"},{"line_number":587,"context_line":"            resp \u003d retry(get_or_head_part,"},{"line_number":588,"context_line":"                         extra_headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":589,"context_line":"                         method\u003d\u0027HEAD\u0027, part_num\u003dpart_num)"},{"line_number":590,"context_line":"            resp.read()"},{"line_number":591,"context_line":"            self.assertEqual(resp.status, 404)"}],"source_content_type":"text/x-python","patch_set":48,"id":"6bc7baca_e9e46835","line":588,"in_reply_to":"ce592a65_1b055a22","updated":"2024-10-17 20:44:22.000000000","message":"Acknowledged","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7308e2f2ba6b7e6dfc34142b5cb7b414fbe51e29","unresolved":true,"context_lines":[{"line_number":586,"context_line":"            part_num \u003d str(objnum + 1)"},{"line_number":587,"context_line":"            resp \u003d retry(get_or_head_part,"},{"line_number":588,"context_line":"                         extra_headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":589,"context_line":"                         method\u003d\u0027HEAD\u0027, part_num\u003dpart_num)"},{"line_number":590,"context_line":"            resp.read()"},{"line_number":591,"context_line":"            self.assertEqual(resp.status, 404)"},{"line_number":592,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"8ff25e6d_64fbda2c","line":589,"updated":"2024-10-17 18:43:53.000000000","message":"but this request *does* have `x-open-expired: true`\n```\nFAILED swift/test/functional/test_slo.py::TestSlo::test_x_delete_at_with_part_number_and_open_expired - AssertionError: 206 !\u003d 404\n```","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"c00e306ed66904858f66819a3fdcd135d9d4f12f","unresolved":false,"context_lines":[{"line_number":586,"context_line":"            part_num \u003d str(objnum + 1)"},{"line_number":587,"context_line":"            resp \u003d retry(get_or_head_part,"},{"line_number":588,"context_line":"                         extra_headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":589,"context_line":"                         method\u003d\u0027HEAD\u0027, part_num\u003dpart_num)"},{"line_number":590,"context_line":"            resp.read()"},{"line_number":591,"context_line":"            self.assertEqual(resp.status, 404)"},{"line_number":592,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"89ad7f94_f5e01c35","line":589,"in_reply_to":"8ff25e6d_64fbda2c","updated":"2024-10-17 20:44:22.000000000","message":"Acknowledged, the tests were in a state of flux and i guess my debugging never reached there for me to notice, thanks for the review!","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54140837b0955e6dd61099ca44aba8f77625e31e","unresolved":true,"context_lines":[{"line_number":594,"context_line":"        for objnum in range(len(segments)):"},{"line_number":595,"context_line":"            part_num \u003d str(objnum + 1)"},{"line_number":596,"context_line":"            resp \u003d retry(get_or_head_part,"},{"line_number":597,"context_line":"                         extra_headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":598,"context_line":"                         method\u003d\u0027GET\u0027, part_num\u003dpart_num)"},{"line_number":599,"context_line":"            resp.read()"},{"line_number":600,"context_line":"            self.assertEqual(resp.status, 404)"}],"source_content_type":"text/x-python","patch_set":48,"id":"577478d1_e31cd774","line":597,"updated":"2024-10-17 18:19:45.000000000","message":"ditto","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"c00e306ed66904858f66819a3fdcd135d9d4f12f","unresolved":false,"context_lines":[{"line_number":594,"context_line":"        for objnum in range(len(segments)):"},{"line_number":595,"context_line":"            part_num \u003d str(objnum + 1)"},{"line_number":596,"context_line":"            resp \u003d retry(get_or_head_part,"},{"line_number":597,"context_line":"                         extra_headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":598,"context_line":"                         method\u003d\u0027GET\u0027, part_num\u003dpart_num)"},{"line_number":599,"context_line":"            resp.read()"},{"line_number":600,"context_line":"            self.assertEqual(resp.status, 404)"}],"source_content_type":"text/x-python","patch_set":48,"id":"8039f950_a7aff24a","line":597,"in_reply_to":"577478d1_e31cd774","updated":"2024-10-17 20:44:22.000000000","message":"Acknowledged","commit_id":"1c9ee0615487b87d25474b06159c9c77d1cf3a70"}],"test/probe/test_object_expirer.py":[{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a71661fc36b0768bf696f326bc2a565f3d0b16af","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        client.put_container(self.url, self.token, self.container_name, {})"},{"line_number":414,"context_line":"        client.put_container(self.url, self.token, segment_container, {})"},{"line_number":415,"context_line":"        client.put_object(self.url, self.token,"},{"line_number":416,"context_line":"                          segment_container, \u0027segment_1\u0027, b\u002712\u0027)"},{"line_number":417,"context_line":"        client.put_object(self.url, self.token,"},{"line_number":418,"context_line":"                          segment_container, \u0027segment_2\u0027, b\u00275678\u0027)"},{"line_number":419,"context_line":"        client.put_object("}],"source_content_type":"text/x-python","patch_set":10,"id":"149f782a_1713f136","line":416,"updated":"2024-05-16 20:31:23.000000000","message":"The body was changed for the first segment which induce failures in the gate, fixing them now\n```\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_expirer_delete_returns_outdated_404 PASSED [ 11%]\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_expirer_delete_returns_outdated_412 PASSED [ 22%]\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_expirer_doesnt_make_async_pendings PASSED [ 33%]\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_expirer_object_should_not_be_expired PASSED [ 44%]\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_expirer_object_split_brain PASSED [ 55%]\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_disabled SKIPPED [ 66%]\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled PASSED [ 77%]\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled_with_part_num PASSED [ 88%]\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_slo_async_delete PASSED [100%]\n```","commit_id":"a6d471282d1ea49a500f43c29e58c184edb6d7ae"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"287ff9af399d1d40d91b253049b3cdc5c3c94b45","unresolved":true,"context_lines":[{"line_number":442,"context_line":"        delete_at \u003d int(now + 2)"},{"line_number":443,"context_line":"        try:"},{"line_number":444,"context_line":"            client.post_object(self.url, self.token,"},{"line_number":445,"context_line":"                               self.container_name, \u0027slo\u0027,"},{"line_number":446,"context_line":"                               headers\u003d{\u0027X-Delete-At\u0027: str(delete_at),"},{"line_number":447,"context_line":"                                        \u0027X-Object-Meta-Test\u0027: \u0027foo\u0027})"},{"line_number":448,"context_line":"        except UnexpectedResponse as e:"}],"source_content_type":"text/x-python","patch_set":11,"id":"f808b901_66900500","line":445,"updated":"2024-05-16 21:30:57.000000000","message":"OK, so we set the manifest to expire, and the segments should still be around. Would be cool to test the other way around, too.","commit_id":"594e4a9d9241063b8eb22463ee4834984df97605"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4d4a51436e0deaadf7c5d09057ce55bbda9cb662","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        delete_at \u003d int(now + 2)"},{"line_number":443,"context_line":"        try:"},{"line_number":444,"context_line":"            client.post_object(self.url, self.token,"},{"line_number":445,"context_line":"                               self.container_name, \u0027slo\u0027,"},{"line_number":446,"context_line":"                               headers\u003d{\u0027X-Delete-At\u0027: str(delete_at),"},{"line_number":447,"context_line":"                                        \u0027X-Object-Meta-Test\u0027: \u0027foo\u0027})"},{"line_number":448,"context_line":"        except UnexpectedResponse as e:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ef96ba36_aa06b8d8","line":445,"in_reply_to":"f808b901_66900500","updated":"2024-05-20 21:30:10.000000000","message":"Thank you for the suggestion, the next patchset will be proving coverage for that","commit_id":"594e4a9d9241063b8eb22463ee4834984df97605"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"287ff9af399d1d40d91b253049b3cdc5c3c94b45","unresolved":true,"context_lines":[{"line_number":450,"context_line":"                \u0027Expected 200 for POST object but got %s\u0027 % e.resp.status)"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        # make sure auto-created containers get in the account listing"},{"line_number":453,"context_line":"        Manager([\u0027container-updater\u0027]).once()"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        # sleep until after expired but not reaped"},{"line_number":456,"context_line":"        while time.time() \u003c\u003d delete_at:"}],"source_content_type":"text/x-python","patch_set":11,"id":"dd9e076f_a7a16ca2","line":453,"updated":"2024-05-16 21:30:57.000000000","message":"This is the only non-server process we\u0027re running, yeah? We\u0027re not even running the expirer, in this test in `test_object_expirer.py`... seems like it might be better as a func test.","commit_id":"594e4a9d9241063b8eb22463ee4834984df97605"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4d4a51436e0deaadf7c5d09057ce55bbda9cb662","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                \u0027Expected 200 for POST object but got %s\u0027 % e.resp.status)"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        # make sure auto-created containers get in the account listing"},{"line_number":453,"context_line":"        Manager([\u0027container-updater\u0027]).once()"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        # sleep until after expired but not reaped"},{"line_number":456,"context_line":"        while time.time() \u003c\u003d delete_at:"}],"source_content_type":"text/x-python","patch_set":11,"id":"46b401db_64d5212d","line":453,"in_reply_to":"dd9e076f_a7a16ca2","updated":"2024-05-20 21:30:10.000000000","message":"The newest patchset will have expirer running once at the end and container updater running twice","commit_id":"594e4a9d9241063b8eb22463ee4834984df97605"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7fbe433b0d7163d7908a93b9b7a81c82a202e0ae","unresolved":true,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        seg_container, container_name \u003d self._setup_test_slo_object()"},{"line_number":444,"context_line":"        now \u003d time.time()"},{"line_number":445,"context_line":"        delete_at \u003d int(now + 2)"},{"line_number":446,"context_line":"        try:"},{"line_number":447,"context_line":"            client.post_object(self.url, self.token,"},{"line_number":448,"context_line":"                               container_name, \u0027slo\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"efc4eae2_f7aff380","line":445,"updated":"2024-06-25 16:46:41.000000000","message":"you might be able to get by with `now + 1`","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4c9de853873eff15329303eef5dd735dd25bda4b","unresolved":false,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        seg_container, container_name \u003d self._setup_test_slo_object()"},{"line_number":444,"context_line":"        now \u003d time.time()"},{"line_number":445,"context_line":"        delete_at \u003d int(now + 2)"},{"line_number":446,"context_line":"        try:"},{"line_number":447,"context_line":"            client.post_object(self.url, self.token,"},{"line_number":448,"context_line":"                               container_name, \u0027slo\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"7ebdfba7_64b38cdb","line":445,"in_reply_to":"efc4eae2_f7aff380","updated":"2024-07-31 16:46:00.000000000","message":"Acknowledged","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7fbe433b0d7163d7908a93b9b7a81c82a202e0ae","unresolved":true,"context_lines":[{"line_number":450,"context_line":"                                        \u0027X-Object-Meta-Test\u0027: \u0027foo\u0027})"},{"line_number":451,"context_line":"        except UnexpectedResponse as e:"},{"line_number":452,"context_line":"            self.fail("},{"line_number":453,"context_line":"                \u0027Expected 200 for POST object but got %s\u0027 % e.resp.status)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        # make sure auto-created containers get in the account listing"},{"line_number":456,"context_line":"        Manager([\u0027container-updater\u0027]).once()"}],"source_content_type":"text/x-python","patch_set":25,"id":"017ea5a1_7396332a","line":453,"updated":"2024-06-25 16:46:41.000000000","message":"i think it\u0027d be more idiomatic to just let the error fail the test.  I don\u0027t think UnexpectedResponse is only raised from *internal* client requests.","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4c9de853873eff15329303eef5dd735dd25bda4b","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                                        \u0027X-Object-Meta-Test\u0027: \u0027foo\u0027})"},{"line_number":451,"context_line":"        except UnexpectedResponse as e:"},{"line_number":452,"context_line":"            self.fail("},{"line_number":453,"context_line":"                \u0027Expected 200 for POST object but got %s\u0027 % e.resp.status)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        # make sure auto-created containers get in the account listing"},{"line_number":456,"context_line":"        Manager([\u0027container-updater\u0027]).once()"}],"source_content_type":"text/x-python","patch_set":25,"id":"03661c04_38dc13e2","line":453,"in_reply_to":"017ea5a1_7396332a","updated":"2024-07-31 16:46:00.000000000","message":"Acknowledged","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7fbe433b0d7163d7908a93b9b7a81c82a202e0ae","unresolved":true,"context_lines":[{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        # sleep until after expired but not reaped"},{"line_number":459,"context_line":"        while time.time() \u003c\u003d delete_at:"},{"line_number":460,"context_line":"            time.sleep(0.1)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        # should get a 404, object is expired"},{"line_number":463,"context_line":"        with self.assertRaises(ClientException) as e:"}],"source_content_type":"text/x-python","patch_set":25,"id":"9c515cc2_f3b91dcc","line":460,"updated":"2024-06-25 16:46:41.000000000","message":"maybe more idiomatic to fetch the object until it expires (i.e. raises ClientException with `http_status \u003d\u003d 404`)","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4c9de853873eff15329303eef5dd735dd25bda4b","unresolved":false,"context_lines":[{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        # sleep until after expired but not reaped"},{"line_number":459,"context_line":"        while time.time() \u003c\u003d delete_at:"},{"line_number":460,"context_line":"            time.sleep(0.1)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        # should get a 404, object is expired"},{"line_number":463,"context_line":"        with self.assertRaises(ClientException) as e:"}],"source_content_type":"text/x-python","patch_set":25,"id":"b14d06ff_5763968b","line":460,"in_reply_to":"9c515cc2_f3b91dcc","updated":"2024-07-31 16:46:00.000000000","message":"Acknowledged","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7fbe433b0d7163d7908a93b9b7a81c82a202e0ae","unresolved":true,"context_lines":[{"line_number":460,"context_line":"            time.sleep(0.1)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        # should get a 404, object is expired"},{"line_number":463,"context_line":"        with self.assertRaises(ClientException) as e:"},{"line_number":464,"context_line":"            client.head_object(self.url, self.token,"},{"line_number":465,"context_line":"                               container_name, \u0027slo\u0027)"},{"line_number":466,"context_line":"        self.assertEqual(e.exception.http_status, 404)"}],"source_content_type":"text/x-python","patch_set":25,"id":"09fa355d_8f1e86ec","line":463,"updated":"2024-06-25 16:46:41.000000000","message":"this looks right, I think client will raise ClientException - but I don\u0027t think it ever raises UnexpectedResponse?","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4c9de853873eff15329303eef5dd735dd25bda4b","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            time.sleep(0.1)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        # should get a 404, object is expired"},{"line_number":463,"context_line":"        with self.assertRaises(ClientException) as e:"},{"line_number":464,"context_line":"            client.head_object(self.url, self.token,"},{"line_number":465,"context_line":"                               container_name, \u0027slo\u0027)"},{"line_number":466,"context_line":"        self.assertEqual(e.exception.http_status, 404)"}],"source_content_type":"text/x-python","patch_set":25,"id":"074eb807_0008f4dc","line":463,"in_reply_to":"09fa355d_8f1e86ec","updated":"2024-07-31 16:46:00.000000000","message":"Acknowledged","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7fbe433b0d7163d7908a93b9b7a81c82a202e0ae","unresolved":true,"context_lines":[{"line_number":471,"context_line":"                                          query_string\u003d\u0027part-number\u003d1\u0027)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"        self.assertEqual(resp_headers.get(\u0027x-object-meta-test\u0027), \u0027foo\u0027)"},{"line_number":474,"context_line":"        self.assertEqual(resp_headers.get(\u0027content-range\u0027), \u0027bytes 0-1/7\u0027)"},{"line_number":475,"context_line":"        self.assertEqual(resp_headers.get(\u0027content-length\u0027), \u00272\u0027)"},{"line_number":476,"context_line":"        self.assertEqual(resp_headers.get(\u0027x-parts-count\u0027), \u00273\u0027)"},{"line_number":477,"context_line":"        self.assertEqual(resp_headers.get(\u0027x-static-large-object\u0027), \u0027True\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"dedb6ebb_2311e473","line":474,"updated":"2024-06-25 16:46:41.000000000","message":"oic, 7 bytes because\n\n```\n\u003e\u003e\u003e base64.b64decode(\u0027Cg\u003d\u003d\u0027)\nb\u0027\\n\u0027\n```","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4c9de853873eff15329303eef5dd735dd25bda4b","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                                          query_string\u003d\u0027part-number\u003d1\u0027)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"        self.assertEqual(resp_headers.get(\u0027x-object-meta-test\u0027), \u0027foo\u0027)"},{"line_number":474,"context_line":"        self.assertEqual(resp_headers.get(\u0027content-range\u0027), \u0027bytes 0-1/7\u0027)"},{"line_number":475,"context_line":"        self.assertEqual(resp_headers.get(\u0027content-length\u0027), \u00272\u0027)"},{"line_number":476,"context_line":"        self.assertEqual(resp_headers.get(\u0027x-parts-count\u0027), \u00273\u0027)"},{"line_number":477,"context_line":"        self.assertEqual(resp_headers.get(\u0027x-static-large-object\u0027), \u0027True\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"501a1dc9_4ed77657","line":474,"in_reply_to":"dedb6ebb_2311e473","updated":"2024-07-31 16:46:00.000000000","message":"Done","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7fbe433b0d7163d7908a93b9b7a81c82a202e0ae","unresolved":true,"context_lines":[{"line_number":491,"context_line":"                                                \u0027segment-foo\u0027})"},{"line_number":492,"context_line":"        except UnexpectedResponse as e:"},{"line_number":493,"context_line":"            self.fail("},{"line_number":494,"context_line":"                \u0027Expected 200 for POST object but got %s\u0027 % e.resp.status)"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        # make sure auto-created containers get in the account listing"},{"line_number":497,"context_line":"        Manager([\u0027container-updater\u0027]).once()"}],"source_content_type":"text/x-python","patch_set":25,"id":"34e2bb51_d9c313c8","line":494,"updated":"2024-06-25 16:46:41.000000000","message":"again I don\u0027t think this will ever get raised - don\u0027t catch errors you don\u0027t expect to get raised just to translate them to fail - if you want to propogate an error and fail the test just don\u0027t catch it ;)","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"aa659bd4f99813bf56759c160c56b1e97f57bf85","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                                                \u0027segment-foo\u0027})"},{"line_number":492,"context_line":"        except UnexpectedResponse as e:"},{"line_number":493,"context_line":"            self.fail("},{"line_number":494,"context_line":"                \u0027Expected 200 for POST object but got %s\u0027 % e.resp.status)"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        # make sure auto-created containers get in the account listing"},{"line_number":497,"context_line":"        Manager([\u0027container-updater\u0027]).once()"}],"source_content_type":"text/x-python","patch_set":25,"id":"11cadcd2_cc2dee8c","line":494,"in_reply_to":"34e2bb51_d9c313c8","updated":"2024-08-01 19:58:18.000000000","message":"Done","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7fbe433b0d7163d7908a93b9b7a81c82a202e0ae","unresolved":true,"context_lines":[{"line_number":498,"context_line":"        while time.time() \u003c\u003d delete_at:"},{"line_number":499,"context_line":"            time.sleep(0.4)"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"        # should get a 404, segment object is expired"},{"line_number":502,"context_line":"        try:"},{"line_number":503,"context_line":"            client.head_object(self.url, self.token,"},{"line_number":504,"context_line":"                               seg_container, \u0027segment_2\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"c9951ecf_9133b5e1","line":501,"updated":"2024-06-25 16:46:41.000000000","message":"I think this comment is misleading; I don\u0027t see where we set an x-delete-at on the segments - are you SURE the head_object call returns 404?","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"aa659bd4f99813bf56759c160c56b1e97f57bf85","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        while time.time() \u003c\u003d delete_at:"},{"line_number":499,"context_line":"            time.sleep(0.4)"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"        # should get a 404, segment object is expired"},{"line_number":502,"context_line":"        try:"},{"line_number":503,"context_line":"            client.head_object(self.url, self.token,"},{"line_number":504,"context_line":"                               seg_container, \u0027segment_2\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fe0f47fb_e3677946","line":501,"in_reply_to":"c9951ecf_9133b5e1","updated":"2024-08-01 19:58:18.000000000","message":"Acknowledged","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7fbe433b0d7163d7908a93b9b7a81c82a202e0ae","unresolved":true,"context_lines":[{"line_number":504,"context_line":"                               seg_container, \u0027segment_2\u0027)"},{"line_number":505,"context_line":"        except UnexpectedResponse as e:"},{"line_number":506,"context_line":"            self.fail("},{"line_number":507,"context_line":"                \u0027Expected 404 for HEAD object but got %s\u0027 % e.resp.status)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        # magic of x-open-expired and using part_num in query string doesn\u0027t"},{"line_number":510,"context_line":"        # make sense since the manifest is already expired"}],"source_content_type":"text/x-python","patch_set":25,"id":"2a9cd7be_2395f488","line":507,"updated":"2024-06-25 16:46:41.000000000","message":"where is the assertion that head_object generated a 404?  Isn\u0027t a 404 an unexpected response?","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4c9de853873eff15329303eef5dd735dd25bda4b","unresolved":false,"context_lines":[{"line_number":504,"context_line":"                               seg_container, \u0027segment_2\u0027)"},{"line_number":505,"context_line":"        except UnexpectedResponse as e:"},{"line_number":506,"context_line":"            self.fail("},{"line_number":507,"context_line":"                \u0027Expected 404 for HEAD object but got %s\u0027 % e.resp.status)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        # magic of x-open-expired and using part_num in query string doesn\u0027t"},{"line_number":510,"context_line":"        # make sense since the manifest is already expired"}],"source_content_type":"text/x-python","patch_set":25,"id":"fce8c20a_d41762be","line":507,"in_reply_to":"2a9cd7be_2395f488","updated":"2024-07-31 16:46:00.000000000","message":"Done","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7fbe433b0d7163d7908a93b9b7a81c82a202e0ae","unresolved":true,"context_lines":[{"line_number":507,"context_line":"                \u0027Expected 404 for HEAD object but got %s\u0027 % e.resp.status)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        # magic of x-open-expired and using part_num in query string doesn\u0027t"},{"line_number":510,"context_line":"        # make sense since the manifest is already expired"},{"line_number":511,"context_line":"        resp_headers \u003d client.head_object(self.url, self.token,"},{"line_number":512,"context_line":"                                          seg_container, \u0027segment_2\u0027,"},{"line_number":513,"context_line":"                                          headers\u003d{\u0027X-Open-Expired\u0027: True})"}],"source_content_type":"text/x-python","patch_set":25,"id":"6a1a2320_109785da","line":510,"updated":"2024-06-25 16:46:41.000000000","message":"I\u0027m not sure what you mean, I think using part-num never makes sense when you make a request directly to a segment object.","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"4c9de853873eff15329303eef5dd735dd25bda4b","unresolved":false,"context_lines":[{"line_number":507,"context_line":"                \u0027Expected 404 for HEAD object but got %s\u0027 % e.resp.status)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        # magic of x-open-expired and using part_num in query string doesn\u0027t"},{"line_number":510,"context_line":"        # make sense since the manifest is already expired"},{"line_number":511,"context_line":"        resp_headers \u003d client.head_object(self.url, self.token,"},{"line_number":512,"context_line":"                                          seg_container, \u0027segment_2\u0027,"},{"line_number":513,"context_line":"                                          headers\u003d{\u0027X-Open-Expired\u0027: True})"}],"source_content_type":"text/x-python","patch_set":25,"id":"28141aa8_66ef963b","line":510,"in_reply_to":"6a1a2320_109785da","updated":"2024-07-31 16:46:00.000000000","message":"the comment didn\u0027t make sense, you\u0027re right!","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7fbe433b0d7163d7908a93b9b7a81c82a202e0ae","unresolved":true,"context_lines":[{"line_number":521,"context_line":"        # expirer runs to reap the whichever object was set for expiry"},{"line_number":522,"context_line":"        self.expirer.once()"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        # should get a 404 even with x-open-expired since object is reaped"},{"line_number":525,"context_line":"        try:"},{"line_number":526,"context_line":"            client.head_object(self.url, self.token,"},{"line_number":527,"context_line":"                               seg_container, \u0027segment_2\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9d50f16f_e8a890a6","line":524,"updated":"2024-06-25 16:46:41.000000000","message":"AFAIK the segments would only get reaped if they were for an MPU and you had carried 800701: Delete s3api MPU segments when expiring the manifest | https://review.opendev.org/c/openstack/swift/+/800701\n\nI don\u0027t think the segments are expired, nor reaped, nor returning 404","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"f5f6e527d8c8c70be5c0c158824143bfd8ef258b","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        # expirer runs to reap the whichever object was set for expiry"},{"line_number":522,"context_line":"        self.expirer.once()"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        # should get a 404 even with x-open-expired since object is reaped"},{"line_number":525,"context_line":"        try:"},{"line_number":526,"context_line":"            client.head_object(self.url, self.token,"},{"line_number":527,"context_line":"                               seg_container, \u0027segment_2\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"f2d0c71d_a2128c44","line":524,"in_reply_to":"9d50f16f_e8a890a6","updated":"2024-09-24 15:22:02.000000000","message":"Done.","commit_id":"0fc807cf6b387685ea4360eb40e120af4b27f74e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"13a097587081668f626e2f96b1dfad1ea8167d85","unresolved":true,"context_lines":[{"line_number":469,"context_line":"                if e.http_status \u003d\u003d 404:"},{"line_number":470,"context_line":"                    break  # The object is expired, so we can exit the loop"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        resp_headers \u003d client.head_object("},{"line_number":473,"context_line":"            self.url, self.token, container_name, \u0027slo\u0027,"},{"line_number":474,"context_line":"            headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":475,"context_line":"            query_string\u003d\u0027part-number\u003d1\u0027"}],"source_content_type":"text/x-python","patch_set":36,"id":"5d0276a5_89b4b496","line":472,"updated":"2024-09-04 20:38:41.000000000","message":"So this call here fails with a 404 if I back out the changes under `swift/`","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a4b6ecee9dcf14aad4476b46de790a82e938ea3a","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                if e.http_status \u003d\u003d 404:"},{"line_number":470,"context_line":"                    break  # The object is expired, so we can exit the loop"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        resp_headers \u003d client.head_object("},{"line_number":473,"context_line":"            self.url, self.token, container_name, \u0027slo\u0027,"},{"line_number":474,"context_line":"            headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":475,"context_line":"            query_string\u003d\u0027part-number\u003d1\u0027"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a642563_b9309710","line":472,"in_reply_to":"5d0276a5_89b4b496","updated":"2024-09-09 15:09:39.000000000","message":"Acknowledged","commit_id":"51246ce9a247f6f384b65448e098fcda8229156b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ea6db4d1dbba6389020059d90d4783ec65710c3c","unresolved":true,"context_lines":[{"line_number":473,"context_line":"            self.url, self.token, container_name, \u0027slo\u0027,"},{"line_number":474,"context_line":"            headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":475,"context_line":"            query_string\u003d\u0027part-number\u003d1\u0027"},{"line_number":476,"context_line":"        )"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"        self.assertEqual(resp_headers.get(\u0027x-object-meta-test\u0027), \u0027foo\u0027)"},{"line_number":479,"context_line":"        self.assertEqual(resp_headers.get(\u0027content-range\u0027), \u0027bytes 0-1/7\u0027)"}],"source_content_type":"text/x-python","patch_set":38,"id":"391538d5_a422e638","line":476,"updated":"2024-09-11 04:02:08.000000000","message":"Testing locally, this now fails with a 404.","commit_id":"97ce746aeb12fe9b5a15d631f4ff9387d03532d2"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"e74dedadd43cbd560e774802a67646cd74f312ad","unresolved":false,"context_lines":[{"line_number":473,"context_line":"            self.url, self.token, container_name, \u0027slo\u0027,"},{"line_number":474,"context_line":"            headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":475,"context_line":"            query_string\u003d\u0027part-number\u003d1\u0027"},{"line_number":476,"context_line":"        )"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"        self.assertEqual(resp_headers.get(\u0027x-object-meta-test\u0027), \u0027foo\u0027)"},{"line_number":479,"context_line":"        self.assertEqual(resp_headers.get(\u0027content-range\u0027), \u0027bytes 0-1/7\u0027)"}],"source_content_type":"text/x-python","patch_set":38,"id":"015284e4_55d3af93","line":476,"in_reply_to":"0701496a_3d264824","updated":"2024-09-19 04:23:00.000000000","message":"I just figured out that i backed the changes out of the wrong file which is why the probe test started failing again!","commit_id":"97ce746aeb12fe9b5a15d631f4ff9387d03532d2"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"d422d142dfe798841f310fe9630bc6d8ad8ab26b","unresolved":true,"context_lines":[{"line_number":473,"context_line":"            self.url, self.token, container_name, \u0027slo\u0027,"},{"line_number":474,"context_line":"            headers\u003d{\u0027X-Open-Expired\u0027: True},"},{"line_number":475,"context_line":"            query_string\u003d\u0027part-number\u003d1\u0027"},{"line_number":476,"context_line":"        )"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"        self.assertEqual(resp_headers.get(\u0027x-object-meta-test\u0027), \u0027foo\u0027)"},{"line_number":479,"context_line":"        self.assertEqual(resp_headers.get(\u0027content-range\u0027), \u0027bytes 0-1/7\u0027)"}],"source_content_type":"text/x-python","patch_set":38,"id":"0701496a_3d264824","line":476,"in_reply_to":"391538d5_a422e638","updated":"2024-09-17 19:56:28.000000000","message":"When the changes are backed out in `request_helpers` the probe test fails for me, but it does so regardless, the test needs fixing up again:\n\n```\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled_with_part_num\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled_with_part_num\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled_with_part_num\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled_with_part_num\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled_with_part_num\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled_with_part_num\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled_with_part_num\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled_with_part_num\ntest/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled_with_part_num\n  /vagrant/python-swiftclient/swiftclient/client.py:461: DeprecationWarning: HTTPResponse.getheader() is deprecated and will be removed in urllib3 v2.1.0. Instead use HTTPResponse.headers.get(name, default).\n    return _decode_header(old_getheader(\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d short test summary info \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nFAILED test/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled_with_part_num - swiftclient.exceptions.ClientException: Object HEAD failed: http://saio:8080/v1/...\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d 1 failed, 12 warnings in 58.00s \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n```","commit_id":"97ce746aeb12fe9b5a15d631f4ff9387d03532d2"}],"test/unit/common/middleware/test_slo.py":[{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"a71661fc36b0768bf696f326bc2a565f3d0b16af","unresolved":true,"context_lines":[{"line_number":6041,"context_line":"        ]"},{"line_number":6042,"context_line":"        self.assertEqual(expected_calls, self.app.calls)"},{"line_number":6043,"context_line":""},{"line_number":6044,"context_line":"    def test_part_number_zero_byte_manifest(self):"},{"line_number":6045,"context_line":"        part_num \u003d 1"},{"line_number":6046,"context_line":"        req \u003d Request.blank("},{"line_number":6047,"context_line":"            \u0027/v1/AUTH_test/gettest/manifest-zero-byte?\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a03b917_1f8e0f2b","line":6044,"updated":"2024-05-16 20:31:23.000000000","message":"This is just a drive-by test that i felt i could add for part-num requests.","commit_id":"a6d471282d1ea49a500f43c29e58c184edb6d7ae"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"d32490d7d153bf30dfb1f53467c2a13263c02d96","unresolved":false,"context_lines":[{"line_number":6041,"context_line":"        ]"},{"line_number":6042,"context_line":"        self.assertEqual(expected_calls, self.app.calls)"},{"line_number":6043,"context_line":""},{"line_number":6044,"context_line":"    def test_part_number_zero_byte_manifest(self):"},{"line_number":6045,"context_line":"        part_num \u003d 1"},{"line_number":6046,"context_line":"        req \u003d Request.blank("},{"line_number":6047,"context_line":"            \u0027/v1/AUTH_test/gettest/manifest-zero-byte?\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"94e37205_e16c7db5","line":6044,"in_reply_to":"23bdab9d_73dd87ff","updated":"2024-05-20 21:30:45.000000000","message":"Acknowledged","commit_id":"a6d471282d1ea49a500f43c29e58c184edb6d7ae"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"287ff9af399d1d40d91b253049b3cdc5c3c94b45","unresolved":true,"context_lines":[{"line_number":6041,"context_line":"        ]"},{"line_number":6042,"context_line":"        self.assertEqual(expected_calls, self.app.calls)"},{"line_number":6043,"context_line":""},{"line_number":6044,"context_line":"    def test_part_number_zero_byte_manifest(self):"},{"line_number":6045,"context_line":"        part_num \u003d 1"},{"line_number":6046,"context_line":"        req \u003d Request.blank("},{"line_number":6047,"context_line":"            \u0027/v1/AUTH_test/gettest/manifest-zero-byte?\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"23bdab9d_73dd87ff","line":6044,"in_reply_to":"5a03b917_1f8e0f2b","updated":"2024-05-16 21:30:57.000000000","message":"That explains why it still passes when I back out the changes under `swift/`\n\nSo we\u0027re entirely relying on the probe test to keep us honest... and [it gets skipped in the gate](https://zuul.opendev.org/t/openstack/build/e708bd3c95bb4f9d9e81a151db6c0ec0/log/job-output.txt#967):\n```\n2024-05-16 00:17:35.376207 | centos-9-stream | test/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_disabled PASSED [ 34%]\n2024-05-16 00:17:42.684284 | centos-9-stream | test/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled SKIPPED [ 35%]\n2024-05-16 00:17:48.988197 | centos-9-stream | test/probe/test_object_expirer.py::TestObjectExpirer::test_open_expired_enabled_with_part_num SKIPPED [ 36%]\n2024-05-16 00:17:55.275474 | centos-9-stream | test/probe/test_object_expirer.py::TestObjectExpirer::test_slo_async_delete FAILED [ 36%]\n2024-05-16 00:18:01.346167 | centos-9-stream | test/probe/test_object_failures.py::TestObjectFailures::test_runner PASSED [ 37%]\n```","commit_id":"a6d471282d1ea49a500f43c29e58c184edb6d7ae"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d7c25e54ccbfaac44d0831abab51f949ccbbb20b","unresolved":true,"context_lines":[{"line_number":2036,"context_line":"        self._setup_manifest(\u0027bc-expires\u0027, _bc_expires_manifest,"},{"line_number":2037,"context_line":"                             extra_headers\u003d{\u0027X-Object-Meta-Plant\u0027:"},{"line_number":2038,"context_line":"                                            \u0027Ficus-Expires\u0027},"},{"line_number":2039,"context_line":"                             container\u003d\u0027gettest\u0027)"},{"line_number":2040,"context_line":""},{"line_number":2041,"context_line":"    def _setup_manifest_abcd(self):"},{"line_number":2042,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":44,"id":"af0da135_4ed195d1","line":2039,"updated":"2024-10-03 22:00:36.000000000","message":"I don\u0027t see anything in this setup that makes me think \"expiring object\" -- which I suppose is reasonable, since we want to be mocking out successful responses, not the 404s.\n\nCouldn\u0027t we use one of the other (existing) manifest setups, though?","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f16a2fe98378f0a0de148f5e683b818f92116f38","unresolved":true,"context_lines":[{"line_number":2036,"context_line":"        self._setup_manifest(\u0027bc-expires\u0027, _bc_expires_manifest,"},{"line_number":2037,"context_line":"                             extra_headers\u003d{\u0027X-Object-Meta-Plant\u0027:"},{"line_number":2038,"context_line":"                                            \u0027Ficus-Expires\u0027},"},{"line_number":2039,"context_line":"                             container\u003d\u0027gettest\u0027)"},{"line_number":2040,"context_line":""},{"line_number":2041,"context_line":"    def _setup_manifest_abcd(self):"},{"line_number":2042,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":44,"id":"eb990744_6bc99343","line":2039,"in_reply_to":"5cb45ef3_4bd40d3c","updated":"2024-10-04 04:24:38.000000000","message":"Hold on -- was there anything that actually called this? I don\u0027t think this function was even used! If we _were_ going to use this, I\u0027d expect something like\n```\n    def test_get_manifest_with_x_open_expired_part_num(self):\n        self._setup_manifest_bc_expires()\n\n        req \u003d Request.blank(\n            \u0027/v1/AUTH_test/gettest/manifest-bc-expires?part-number\u003d1\u0027,\n            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027HEAD\u0027},\n            headers\u003d{\u0027x-open-expired\u0027: \u0027true\u0027})\n\n        status, headers, _ \u003d self.call_slo(req)\n```\nsomewhere...","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"91f11506a0dc59242ed94be43831023afbb14f77","unresolved":false,"context_lines":[{"line_number":2036,"context_line":"        self._setup_manifest(\u0027bc-expires\u0027, _bc_expires_manifest,"},{"line_number":2037,"context_line":"                             extra_headers\u003d{\u0027X-Object-Meta-Plant\u0027:"},{"line_number":2038,"context_line":"                                            \u0027Ficus-Expires\u0027},"},{"line_number":2039,"context_line":"                             container\u003d\u0027gettest\u0027)"},{"line_number":2040,"context_line":""},{"line_number":2041,"context_line":"    def _setup_manifest_abcd(self):"},{"line_number":2042,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":44,"id":"5cb45ef3_4bd40d3c","line":2039,"in_reply_to":"af0da135_4ed195d1","updated":"2024-10-03 23:49:35.000000000","message":"Yes, i can look into it as long as there are no tests that follow it since we won\u0027t be able to restore it no mo although there is no harm in setting up a manifest specifically for our tests","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"eddef711bbf65d90a513a71a26dfb5d109c0c897","unresolved":false,"context_lines":[{"line_number":2036,"context_line":"        self._setup_manifest(\u0027bc-expires\u0027, _bc_expires_manifest,"},{"line_number":2037,"context_line":"                             extra_headers\u003d{\u0027X-Object-Meta-Plant\u0027:"},{"line_number":2038,"context_line":"                                            \u0027Ficus-Expires\u0027},"},{"line_number":2039,"context_line":"                             container\u003d\u0027gettest\u0027)"},{"line_number":2040,"context_line":""},{"line_number":2041,"context_line":"    def _setup_manifest_abcd(self):"},{"line_number":2042,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":44,"id":"0806caf2_728585f4","line":2039,"in_reply_to":"eb990744_6bc99343","updated":"2024-10-16 16:09:29.000000000","message":"Done, sorry been going on an doff with this patch for so long, hard to stay tuned in","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d7c25e54ccbfaac44d0831abab51f949ccbbb20b","unresolved":true,"context_lines":[{"line_number":5835,"context_line":"            headers\u003d{\u0027X-Delete-After\u0027: \u00271\u0027}"},{"line_number":5836,"context_line":"        )"},{"line_number":5837,"context_line":""},{"line_number":5838,"context_line":"        time.sleep(3)"},{"line_number":5839,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":5840,"context_line":"        self.assertEqual(status, \u0027202 Accepted\u0027)"},{"line_number":5841,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"4580aae6_50271c66","line":5838,"range":{"start_line":5838,"start_character":8,"end_line":5838,"end_character":21},"updated":"2024-10-03 22:00:36.000000000","message":"Do we need this? Multi-second sleeps in unit tests *suck* -- if you\u0027re targeting your test runs well, 3s can mean tripling your wall time.","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"91f11506a0dc59242ed94be43831023afbb14f77","unresolved":false,"context_lines":[{"line_number":5835,"context_line":"            headers\u003d{\u0027X-Delete-After\u0027: \u00271\u0027}"},{"line_number":5836,"context_line":"        )"},{"line_number":5837,"context_line":""},{"line_number":5838,"context_line":"        time.sleep(3)"},{"line_number":5839,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":5840,"context_line":"        self.assertEqual(status, \u0027202 Accepted\u0027)"},{"line_number":5841,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"e9e161a8_017539e6","line":5838,"range":{"start_line":5838,"start_character":8,"end_line":5838,"end_character":21},"in_reply_to":"4580aae6_50271c66","updated":"2024-10-03 23:49:35.000000000","message":"Acknowledged","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d7c25e54ccbfaac44d0831abab51f949ccbbb20b","unresolved":true,"context_lines":[{"line_number":5851,"context_line":"            headers\u003d{\u0027x-open-expired\u0027: \u0027true\u0027})"},{"line_number":5852,"context_line":""},{"line_number":5853,"context_line":"        status, headers, _ \u003d self.call_slo(req)"},{"line_number":5854,"context_line":"        self.assertEqual(status, \u0027206 Partial Content\u0027)"},{"line_number":5855,"context_line":""},{"line_number":5856,"context_line":"        self.app.register(\u0027HEAD\u0027,"},{"line_number":5857,"context_line":"                          \u0027/v1/AUTH_test/gettest/manifest-bc-expires\u0027"}],"source_content_type":"text/x-python","patch_set":44,"id":"0ce17951_16f93a61","line":5854,"updated":"2024-10-03 22:00:36.000000000","message":"Somewhere around here, I think you want to start examining `self.app.calls_with_headers` and making sure that the proxy-server app received that `x-open-expired` -- that\u0027s how you\u0027ll get to a test that fails without the fix.","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"91f11506a0dc59242ed94be43831023afbb14f77","unresolved":false,"context_lines":[{"line_number":5851,"context_line":"            headers\u003d{\u0027x-open-expired\u0027: \u0027true\u0027})"},{"line_number":5852,"context_line":""},{"line_number":5853,"context_line":"        status, headers, _ \u003d self.call_slo(req)"},{"line_number":5854,"context_line":"        self.assertEqual(status, \u0027206 Partial Content\u0027)"},{"line_number":5855,"context_line":""},{"line_number":5856,"context_line":"        self.app.register(\u0027HEAD\u0027,"},{"line_number":5857,"context_line":"                          \u0027/v1/AUTH_test/gettest/manifest-bc-expires\u0027"}],"source_content_type":"text/x-python","patch_set":44,"id":"0d918705_eba34efc","line":5854,"in_reply_to":"0ce17951_16f93a61","updated":"2024-10-03 23:49:35.000000000","message":"Done","commit_id":"f47631c046ddf6e56237851f6c402eccb27d56c3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f16a2fe98378f0a0de148f5e683b818f92116f38","unresolved":true,"context_lines":[{"line_number":5836,"context_line":"            headers\u003d{\u0027X-Delete-At\u0027: t}"},{"line_number":5837,"context_line":"        )"},{"line_number":5838,"context_line":""},{"line_number":5839,"context_line":"        time.sleep(0.3)"},{"line_number":5840,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":5841,"context_line":"        self.assertEqual(status, \u0027202 Accepted\u0027)"},{"line_number":5842,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"0bfed10e_60429cf3","line":5839,"updated":"2024-10-04 04:24:38.000000000","message":"I don\u0027t think we even need this -- `FakeSwift` will already give us whatever response status/headers/etc. we could want -- why do we need to wait *at all* for real world clocks to move forward? What are we hoping for here?","commit_id":"708ffb85d52629ea952df0d62644fddb17031a86"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"eddef711bbf65d90a513a71a26dfb5d109c0c897","unresolved":false,"context_lines":[{"line_number":5836,"context_line":"            headers\u003d{\u0027X-Delete-At\u0027: t}"},{"line_number":5837,"context_line":"        )"},{"line_number":5838,"context_line":""},{"line_number":5839,"context_line":"        time.sleep(0.3)"},{"line_number":5840,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":5841,"context_line":"        self.assertEqual(status, \u0027202 Accepted\u0027)"},{"line_number":5842,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"89b0fc45_c11d75d2","line":5839,"in_reply_to":"0bfed10e_60429cf3","updated":"2024-10-16 16:09:29.000000000","message":"Acknowledged","commit_id":"708ffb85d52629ea952df0d62644fddb17031a86"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f16a2fe98378f0a0de148f5e683b818f92116f38","unresolved":true,"context_lines":[{"line_number":5844,"context_line":"                          \u0027/v1/AUTH_test/gettest/manifest-bc-expires\u0027"},{"line_number":5845,"context_line":"                          \u0027?part-number\u003d1\u0027,"},{"line_number":5846,"context_line":"                          swob.HTTPPartialContent,"},{"line_number":5847,"context_line":"                          headers\u003d{\u0027x-open-expired\u0027: \u0027true\u0027})"},{"line_number":5848,"context_line":""},{"line_number":5849,"context_line":"        req \u003d Request.blank("},{"line_number":5850,"context_line":"            \u0027/v1/AUTH_test/gettest/manifest-bc-expires?part-number\u003d1\u0027,"}],"source_content_type":"text/x-python","patch_set":45,"id":"7997814d_ba552bb5","line":5847,"updated":"2024-10-04 04:24:38.000000000","message":"Wait, why are we adding an `x-open-expired` header to the _response_?","commit_id":"708ffb85d52629ea952df0d62644fddb17031a86"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"eddef711bbf65d90a513a71a26dfb5d109c0c897","unresolved":false,"context_lines":[{"line_number":5844,"context_line":"                          \u0027/v1/AUTH_test/gettest/manifest-bc-expires\u0027"},{"line_number":5845,"context_line":"                          \u0027?part-number\u003d1\u0027,"},{"line_number":5846,"context_line":"                          swob.HTTPPartialContent,"},{"line_number":5847,"context_line":"                          headers\u003d{\u0027x-open-expired\u0027: \u0027true\u0027})"},{"line_number":5848,"context_line":""},{"line_number":5849,"context_line":"        req \u003d Request.blank("},{"line_number":5850,"context_line":"            \u0027/v1/AUTH_test/gettest/manifest-bc-expires?part-number\u003d1\u0027,"}],"source_content_type":"text/x-python","patch_set":45,"id":"475b42c7_3b98b916","line":5847,"in_reply_to":"7997814d_ba552bb5","updated":"2024-10-16 16:09:29.000000000","message":"Done","commit_id":"708ffb85d52629ea952df0d62644fddb17031a86"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f16a2fe98378f0a0de148f5e683b818f92116f38","unresolved":true,"context_lines":[{"line_number":5860,"context_line":"        self.app.register(\u0027HEAD\u0027,"},{"line_number":5861,"context_line":"                          \u0027/v1/AUTH_test/gettest/manifest-bc-expires\u0027"},{"line_number":5862,"context_line":"                          \u0027?part-number\u003d1\u0027,"},{"line_number":5863,"context_line":"                          swob.HTTPNotFound, {}, None)"},{"line_number":5864,"context_line":""},{"line_number":5865,"context_line":"        req \u003d Request.blank("},{"line_number":5866,"context_line":"            \u0027/v1/AUTH_test/gettest/manifest-bc-expires?part-number\u003d1\u0027,"}],"source_content_type":"text/x-python","patch_set":45,"id":"b8948a5e_76431db6","line":5863,"updated":"2024-10-04 04:24:38.000000000","message":"Ohhh... and why do we keep overwriting what we want our FakeSwift to be returning? This gives no indication of anything being there, much less an SLO manifest...","commit_id":"708ffb85d52629ea952df0d62644fddb17031a86"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"eddef711bbf65d90a513a71a26dfb5d109c0c897","unresolved":false,"context_lines":[{"line_number":5860,"context_line":"        self.app.register(\u0027HEAD\u0027,"},{"line_number":5861,"context_line":"                          \u0027/v1/AUTH_test/gettest/manifest-bc-expires\u0027"},{"line_number":5862,"context_line":"                          \u0027?part-number\u003d1\u0027,"},{"line_number":5863,"context_line":"                          swob.HTTPNotFound, {}, None)"},{"line_number":5864,"context_line":""},{"line_number":5865,"context_line":"        req \u003d Request.blank("},{"line_number":5866,"context_line":"            \u0027/v1/AUTH_test/gettest/manifest-bc-expires?part-number\u003d1\u0027,"}],"source_content_type":"text/x-python","patch_set":45,"id":"515abe09_591ea3f7","line":5863,"in_reply_to":"b8948a5e_76431db6","updated":"2024-10-16 16:09:29.000000000","message":"Acknowledged","commit_id":"708ffb85d52629ea952df0d62644fddb17031a86"}]}
