)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3033246741d7759880fb7cae03af020e252c8801","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Christian Schwede \u003ccschwede@mailbox.org\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-10-29 13:37:27 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"test/s3api: support other regions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a create_bucket helper that names the location outside us-east-1"},{"line_number":10,"context_line":"to allow running the test suite against other regions."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3b8eaed8_831ca159","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":33},"updated":"2026-10-30 16:36:46.000000000","message":"why do we need this? are we planning to have Swift mimic different S3 regions based on Swift region config?\n\nI assumed that we wanted to ensure Swift is compatible with the most typical S3 behaviour (so pick an S3 region). I\u0027m not sure I understand why need compat tests to succeed against any S3 region by allowing their assertions to deviate from what Swift does - that doesn\u0027t help verify that Swift does exactly what (an instance of) S3 does.\n\nI think I must be missing something","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c813e4be6114b95b4bf13685581d506608841b8f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Christian Schwede \u003ccschwede@mailbox.org\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-10-29 13:37:27 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"test/s3api: support other regions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a create_bucket helper that names the location outside us-east-1"},{"line_number":10,"context_line":"to allow running the test suite against other regions."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"792ecbd1_78178afc","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":33},"in_reply_to":"2961ea79_d5fd9b8e","updated":"2026-11-09 19:15:46.000000000","message":"Acknowledged","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"2676e1c33880d7c1d46c9d35244683b7dfefc50f","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Christian Schwede \u003ccschwede@mailbox.org\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-10-29 13:37:27 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"test/s3api: support other regions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a create_bucket helper that names the location outside us-east-1"},{"line_number":10,"context_line":"to allow running the test suite against other regions."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"2961ea79_d5fd9b8e","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":33},"in_reply_to":"3b8eaed8_831ca159","updated":"2026-10-30 17:07:39.000000000","message":"This patch makes it possible to run tests against other than todays default region as well. At the end the compat tests should pass against one region, but not necessarily todays default region.","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c26366f8e5daa0bb53e8ecf74281a9a24d59a3bd","unresolved":true,"context_lines":[{"line_number":7,"context_line":"test/s3api: support other regions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a create_bucket helper that names the location outside us-east-1"},{"line_number":10,"context_line":"to allow running the test suite against other regions."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I7061afbed25ed38004b445c102c7013ecb268f15"},{"line_number":13,"context_line":"Signed-off-by: Christian Schwede \u003ccschwede@mailbox.org\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1227f5d1_79785be0","line":10,"updated":"2026-10-29 15:38:48.000000000","message":"So we know that we\u0027re doing this because AWS exhibits different behaviors in different regions -- what\u0027s our plan for managing the different expectations in tests? Add some `@skipIf(region !\u003d \u0027us-east-1)` decorators? Some `expected \u003d A if region \u003d\u003d \u0027us-east-1\u0027 else B` blocks before assertions? Seems like it might get gnarly when we\u0027re testing against Swift, though, where an operator might configure the region name as they like, regardless of Swift\u0027s behavior...\n\nDo we want this particular test suite to target a particular region\u0027s behaviors? Or should it be trying to characterize as many (distinct) AWS behaviors as it can, across regions?","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"0a9c5c7fb18c3bee597b4b804a1291508ec713f6","unresolved":true,"context_lines":[{"line_number":7,"context_line":"test/s3api: support other regions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a create_bucket helper that names the location outside us-east-1"},{"line_number":10,"context_line":"to allow running the test suite against other regions."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I7061afbed25ed38004b445c102c7013ecb268f15"},{"line_number":13,"context_line":"Signed-off-by: Christian Schwede \u003ccschwede@mailbox.org\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"8c08cc49_eea195df","line":10,"in_reply_to":"1227f5d1_79785be0","updated":"2026-11-03 13:47:07.000000000","message":"The idea for this patch is just to make testing against other AWS regions possible at all.\n\nI think we should not use skips decorators. A follow up patch might change the default region (see Alistairs comments as well) and also needs a few minor changes in Swift itself to pass all tests in different regions, but I don\u0027t want to include those changes in this commit.","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3227afd9dbdbd779d284e205bb05c78e73853c76","unresolved":true,"context_lines":[{"line_number":7,"context_line":"test/s3api: support other regions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a create_bucket helper that names the location outside us-east-1"},{"line_number":10,"context_line":"to allow running the test suite against other regions."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I7061afbed25ed38004b445c102c7013ecb268f15"},{"line_number":13,"context_line":"Signed-off-by: Christian Schwede \u003ccschwede@mailbox.org\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ffe1a7af_03b8a07d","line":10,"in_reply_to":"8c08cc49_eea195df","updated":"2026-11-06 21:48:16.000000000","message":"\u003e The idea for this patch is just to make testing against other AWS regions possible at all.\n\nYes, and I get that. I just wanted to highlight that these are the *immediate* next questions, and we already see them being brought up further down the chain.\n\nDo the tests all pass against multiple regions currently? I suppose I ought to try it out...","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"61925242d91aced555510e3b40fc4fffaa1c140a","unresolved":true,"context_lines":[{"line_number":7,"context_line":"test/s3api: support other regions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a create_bucket helper that names the location outside us-east-1"},{"line_number":10,"context_line":"to allow running the test suite against other regions."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I7061afbed25ed38004b445c102c7013ecb268f15"},{"line_number":13,"context_line":"Signed-off-by: Christian Schwede \u003ccschwede@mailbox.org\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"2d9c4dca_4daeb332","line":10,"in_reply_to":"ffe1a7af_03b8a07d","updated":"2026-11-10 13:54:42.000000000","message":"| Do the tests all pass against multiple regions currently? I suppose I ought to try it out...\n\nNo, they do not - running against eu-central-1 these fail:\n\n`test/s3api/test_input_errors.py::TestV2AuthQuery`: all failing, but expected - V2 auth is not supported there\n\n`test/s3api/test_versioning.py::TestObjectVersioning::test_setup`: Alistair proposed a patch in 1014792: s3 compat: move CreateBucket assertions to test_bucket.py | https://review.opendev.org/c/openstack/swift/+/1014792\n\n`test/s3api/test_input_errors.py::TestV4AuthQuery::test_get_object_invalid_sha`: fails every time on eu-central-1, and ~40% of the time in us-east-1 with `AssertionError: Tuples differ: (400, \u0027Bad Request\u0027) !\u003d (200, \u0027OK\u0027)`. Because it passes ~60% of the time in us-east-1, we likely need to either remove the assert, or split it up based on region. Some ideas in 1012860: test/s3api: check the ACL after a repeated CreateBucket | https://review.opendev.org/c/openstack/swift/+/1012860","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c813e4be6114b95b4bf13685581d506608841b8f","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a create_bucket helper that sets the bucket location for each region"},{"line_number":10,"context_line":"other than us-east-1. The test suite can then run against other regions."},{"line_number":11,"context_line":"Limit the teardown to the buckets in the test region."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I7061afbed25ed38004b445c102c7013ecb268f15"},{"line_number":14,"context_line":"Signed-off-by: Christian Schwede \u003ccschwede@mailbox.org\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"8981a69e_2b1dc4e8","line":11,"updated":"2026-11-09 19:15:46.000000000","message":"I saw at least one test fail with us-east-2 (see inline). I understand that this patch is simply introducing the capability to vary region. However, I think it would be helpful for the commit message (and perhaps the rst doc) to mention that tests are currently only expected to pass against us-east-1.","commit_id":"deddb280ce12a6edd96240df4cdc58a42f23e493"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"61925242d91aced555510e3b40fc4fffaa1c140a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a create_bucket helper that sets the bucket location for each region"},{"line_number":10,"context_line":"other than us-east-1. The test suite can then run against other regions."},{"line_number":11,"context_line":"Limit the teardown to the buckets in the test region."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I7061afbed25ed38004b445c102c7013ecb268f15"},{"line_number":14,"context_line":"Signed-off-by: Christian Schwede \u003ccschwede@mailbox.org\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"f6730a54_2cc3f9a8","line":11,"in_reply_to":"1c795570_a7d8633f","updated":"2026-11-10 13:54:42.000000000","message":"Acknowledged","commit_id":"deddb280ce12a6edd96240df4cdc58a42f23e493"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"79c1f2184a0c9004fa02349fcd3eddf980e4df8e","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a create_bucket helper that sets the bucket location for each region"},{"line_number":10,"context_line":"other than us-east-1. The test suite can then run against other regions."},{"line_number":11,"context_line":"Limit the teardown to the buckets in the test region."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I7061afbed25ed38004b445c102c7013ecb268f15"},{"line_number":14,"context_line":"Signed-off-by: Christian Schwede \u003ccschwede@mailbox.org\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1c795570_a7d8633f","line":11,"in_reply_to":"8981a69e_2b1dc4e8","updated":"2026-11-10 13:04:47.000000000","message":"suggested addition to commit message\n```\nNote: The full suite of cross-compatibility tests currently\nonly passes when run against AWS S3 ``us-east-1`` region.\nOther AWS S3 regions and endpoints may be used, but some test\nfailures should then be expected.\n```","commit_id":"deddb280ce12a6edd96240df4cdc58a42f23e493"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"21cea29a414f96ab24a295ae4b809fc337395e15","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e1bd01f2_f209648b","updated":"2026-11-02 17:15:05.000000000","message":"I ran into some issues while testing this w.r.t. consistent config\n\nsee https://review.opendev.org/c/openstack/swift/+/1013581 sq? teardown only buckets in test region","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e54844fe7255444d8d26c2cfe69b610611263051","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6b028bcf_6ac45b44","updated":"2026-11-02 14:14:23.000000000","message":"I think I understand now - we\u0027ll need this in order to vary the default compat test region from us-east-1\n\nI need to get my aws creds sorted before I can test and +2","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c813e4be6114b95b4bf13685581d506608841b8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5500f09f_42a10e69","updated":"2026-11-09 19:15:46.000000000","message":"I\u0027m ok with this but want to check before merging that the test I see fail with us-east-2 is expected, and if so then I think we should document that only S3 us-east-1 is known to pass all tests.\n\nI left a follow to deal with the create bucket location header, but I think it will need to be combined with the later patch in this chain https://review.opendev.org/c/openstack/swift/+/1012860/5 which also adds test_bucket.py","commit_id":"deddb280ce12a6edd96240df4cdc58a42f23e493"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3227afd9dbdbd779d284e205bb05c78e73853c76","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b3df066c_ed3c773a","updated":"2026-11-06 21:48:16.000000000","message":"I\u0027m still fine with making this possible ahead of us sorting out exactly which AWS region(s) we want to be compatible with.","commit_id":"deddb280ce12a6edd96240df4cdc58a42f23e493"}],"doc/source/development_guidelines.rst":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e54844fe7255444d8d26c2cfe69b610611263051","unresolved":true,"context_lines":[{"line_number":231,"context_line":"    SWIFT_TEST_AWS_CONFIG_FILE\u003d~/.aws/credentials pytest ./test/s3api"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":".. note::"},{"line_number":234,"context_line":"  When using ``SWIFT_TEST_AWS_CONFIG_FILE``, the region defaults to"},{"line_number":235,"context_line":"  ``us-east-1`` and only the default credentials are loaded."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"To run against another region, set the region and the matching endpoint in"},{"line_number":238,"context_line":"the credentials file. A region-specific endpoint refuses a CreateBucket"}],"source_content_type":"text/x-rst","patch_set":2,"id":"a89fe281_74f03ab3","line":235,"range":{"start_line":234,"start_character":0,"end_line":235,"end_character":60},"updated":"2026-11-02 14:14:23.000000000","message":":( IIUC we\u0027re going to need to change this so that the default region is one for which all tests will pass (when those tests merge)","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"0a9c5c7fb18c3bee597b4b804a1291508ec713f6","unresolved":true,"context_lines":[{"line_number":231,"context_line":"    SWIFT_TEST_AWS_CONFIG_FILE\u003d~/.aws/credentials pytest ./test/s3api"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":".. note::"},{"line_number":234,"context_line":"  When using ``SWIFT_TEST_AWS_CONFIG_FILE``, the region defaults to"},{"line_number":235,"context_line":"  ``us-east-1`` and only the default credentials are loaded."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"To run against another region, set the region and the matching endpoint in"},{"line_number":238,"context_line":"the credentials file. A region-specific endpoint refuses a CreateBucket"}],"source_content_type":"text/x-rst","patch_set":2,"id":"b123ea7e_a44ae81b","line":235,"range":{"start_line":234,"start_character":0,"end_line":235,"end_character":60},"in_reply_to":"a89fe281_74f03ab3","updated":"2026-11-03 13:47:07.000000000","message":"Yes, but let\u0027s keep changing the default out of this commit. It needs some more changes, this one is just to make testing possible at all?","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c813e4be6114b95b4bf13685581d506608841b8f","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    SWIFT_TEST_AWS_CONFIG_FILE\u003d~/.aws/credentials pytest ./test/s3api"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":".. note::"},{"line_number":234,"context_line":"  When using ``SWIFT_TEST_AWS_CONFIG_FILE``, the region defaults to"},{"line_number":235,"context_line":"  ``us-east-1`` and only the default credentials are loaded."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"To run against another region, set the region and the matching endpoint in"},{"line_number":238,"context_line":"the credentials file. A region-specific endpoint refuses a CreateBucket"}],"source_content_type":"text/x-rst","patch_set":2,"id":"e4368604_e6972c7c","line":235,"range":{"start_line":234,"start_character":0,"end_line":235,"end_character":60},"in_reply_to":"b123ea7e_a44ae81b","updated":"2026-11-09 19:15:46.000000000","message":"Acknowledged","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"21cea29a414f96ab24a295ae4b809fc337395e15","unresolved":true,"context_lines":[{"line_number":235,"context_line":"  ``us-east-1`` and only the default credentials are loaded."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"To run against another region, set the region and the matching endpoint in"},{"line_number":238,"context_line":"the credentials file. A region-specific endpoint refuses a CreateBucket"},{"line_number":239,"context_line":"that names no location. The tests take the location from ``region``::"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    [default]"}],"source_content_type":"text/x-rst","patch_set":2,"id":"94823318_32e878de","line":238,"range":{"start_line":238,"start_character":4,"end_line":238,"end_character":20},"updated":"2026-11-02 17:15:05.000000000","message":"...and the test.conf file?? That was my experience at least. Which is unfortunate. I need to understand what is pulling region from which source.\n\nsee follow-up patch for ideas","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"0a9c5c7fb18c3bee597b4b804a1291508ec713f6","unresolved":false,"context_lines":[{"line_number":235,"context_line":"  ``us-east-1`` and only the default credentials are loaded."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"To run against another region, set the region and the matching endpoint in"},{"line_number":238,"context_line":"the credentials file. A region-specific endpoint refuses a CreateBucket"},{"line_number":239,"context_line":"that names no location. The tests take the location from ``region``::"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    [default]"}],"source_content_type":"text/x-rst","patch_set":2,"id":"a5c77ad8_24a2c73f","line":238,"range":{"start_line":238,"start_character":4,"end_line":238,"end_character":20},"in_reply_to":"94823318_32e878de","updated":"2026-11-03 13:47:07.000000000","message":"Ack, fixed in the last patchset.","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"21cea29a414f96ab24a295ae4b809fc337395e15","unresolved":true,"context_lines":[{"line_number":235,"context_line":"  ``us-east-1`` and only the default credentials are loaded."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"To run against another region, set the region and the matching endpoint in"},{"line_number":238,"context_line":"the credentials file. A region-specific endpoint refuses a CreateBucket"},{"line_number":239,"context_line":"that names no location. The tests take the location from ``region``::"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    [default]"},{"line_number":242,"context_line":"    aws_access_key_id \u003d ..."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1790be3c_401e1a1c","line":239,"range":{"start_line":238,"start_character":22,"end_line":239,"end_character":23},"updated":"2026-11-02 17:15:05.000000000","message":"This statement may be true but it\u0027s not clear how it is relevant right here.","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"0a9c5c7fb18c3bee597b4b804a1291508ec713f6","unresolved":false,"context_lines":[{"line_number":235,"context_line":"  ``us-east-1`` and only the default credentials are loaded."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"To run against another region, set the region and the matching endpoint in"},{"line_number":238,"context_line":"the credentials file. A region-specific endpoint refuses a CreateBucket"},{"line_number":239,"context_line":"that names no location. The tests take the location from ``region``::"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    [default]"},{"line_number":242,"context_line":"    aws_access_key_id \u003d ..."}],"source_content_type":"text/x-rst","patch_set":2,"id":"f5d6cf87_532fab5e","line":239,"range":{"start_line":238,"start_character":22,"end_line":239,"end_character":23},"in_reply_to":"1790be3c_401e1a1c","updated":"2026-11-03 13:47:07.000000000","message":"Ack, removed in the last patchset.","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"79c1f2184a0c9004fa02349fcd3eddf980e4df8e","unresolved":true,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":"You can use ``SWIFT_TEST_AWS_CONFIG_FILE`` to replace the whole"},{"line_number":245,"context_line":"``[s3api_test]`` section. The tests then take all options from the"},{"line_number":246,"context_line":"credentials file and ignore `/etc/swift/test.conf`."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"------------"},{"line_number":249,"context_line":"Coding Style"}],"source_content_type":"text/x-rst","patch_set":4,"id":"8a6dd765_b5633e53","line":246,"updated":"2026-11-10 13:04:47.000000000","message":"suggested re-write of this section:\n\n```\ndiff --git a/doc/source/development_guidelines.rst b/doc/source/development_guidelines.rst\nindex ebdda19c4..e3dff63f7 100644\n--- a/doc/source/development_guidelines.rst\n+++ b/doc/source/development_guidelines.rst\n@@ -223,27 +223,63 @@ that the Swift S3 API behaves in the same way as the AWS S3 API. They should\n pass when run against either a Swift endpoint (with S3 API enabled) or an AWS\n S3 endpoint.\n \n+The tests can be configured in the ``[s3api_test]`` section of the\n+`/etc/swift/test.conf` file.\n+\n+By default the tests assume that the Swift endpoint\u0027s S3 API has the default\n+region configuration, i.e. ``location \u003d us-east-1``. To run the tests against a\n+Swift endpoint with a different region configuration, set the region in\n+`/etc/swift/test.conf`::\n+\n+    [s3api_test]\n+    region \u003d \u003cregion\u003e\n+\n To run against an AWS S3 endpoint, the `/etc/swift/test.conf` file must be\n-edited to provide AWS key IDs and secrets. Alternatively, an AWS CLI style\n-credentials file can be loaded by setting the ``SWIFT_TEST_AWS_CONFIG_FILE``\n-environment variable, e.g.::\n+edited to provide the AWS endpoint, region, key IDs and secrets. For example::\n \n-    SWIFT_TEST_AWS_CONFIG_FILE\u003d~/.aws/credentials pytest ./test/s3api\n+    [s3api_test]\n+    endpoint \u003d \u003cS3 endpoint\u003e\n+    region \u003d us-east-1\n+    access_key1 \u003d \u003caws_access_key_id\u003e\n+    secret_key1 \u003d \u003caws_secret_access_key\u003e\n+    session_token1 \u003d \u003caws_session_token\u003e\n \n .. note::\n-  When using ``SWIFT_TEST_AWS_CONFIG_FILE``, the region defaults to\n-  ``us-east-1`` and only the default credentials are loaded.\n+  The full suite of cross-compatibility tests currently only passes when run\n+  against AWS S3 ``us-east-1`` region. Other AWS S3 regions and endpoints may\n+  be used, but some test failures should then be expected. This may change as\n+  Swift\u0027s S3 API compatibility is improved.\n \n-To run against another region, set the region and the matching endpoint in\n-`/etc/swift/test.conf`::\n+The options in the ``[s3api_test]`` section of the `/etc/swift/test.conf` file\n+may be replaced entirely by options in an alternative config file, such as an\n+AWS CLI style credentials file. To load an alternative config file, set the\n+``SWIFT_TEST_AWS_CONFIG_FILE`` environment variable, e.g.::\n \n-    [s3api_test]\n-    endpoint \u003d \u003cendpoint of that region\u003e\n-    region \u003d \u003cregion\u003e\n+    SWIFT_TEST_AWS_CONFIG_FILE\u003d~/.aws/credentials pytest ./test/s3api\n+\n+The alternative config file should have a ``[default]`` section with the\n+following keys:\n+\n+- ``aws_access_key_id``, ``aws_secret_access_key`` and ``aws_session_token``,\n+  which are mapped to the tests\u0027 primary user\u0027s credentials.\n+\n+- ``endpoint``, which defaults to ``https://s3.amazonaws.com``.\n \n-You can use ``SWIFT_TEST_AWS_CONFIG_FILE`` to replace the whole\n-``[s3api_test]`` section. The tests then take all options from the\n-credentials file and ignore `/etc/swift/test.conf`.\n+- ``region``, which defaults to ``us-east-1``.\n+\n+For example::\n+\n+    [default]\n+    endpoint \u003d https://s3.amazonaws.com\n+    region \u003d us-east-1\n+    aws_access_key_id \u003d \u003cvalue used for access_key1\u003e\n+    aws_secret_access_key \u003d \u003cvalue used for secret_key1\u003e\n+    aws_session_token \u003d \u003cvalue used for session_token1\u003e\n+\n+.. note::\n+  When using ``SWIFT_TEST_AWS_CONFIG_FILE``, the tests take all options from\n+  that file or assume their default values; options in the ``[s3api_test]``\n+  section of `/etc/swift/test.conf` are ignored.\n \n ------------\n Coding Style\n```","commit_id":"deddb280ce12a6edd96240df4cdc58a42f23e493"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"61925242d91aced555510e3b40fc4fffaa1c140a","unresolved":false,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":"You can use ``SWIFT_TEST_AWS_CONFIG_FILE`` to replace the whole"},{"line_number":245,"context_line":"``[s3api_test]`` section. The tests then take all options from the"},{"line_number":246,"context_line":"credentials file and ignore `/etc/swift/test.conf`."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"------------"},{"line_number":249,"context_line":"Coding Style"}],"source_content_type":"text/x-rst","patch_set":4,"id":"206c7c52_275f1d89","line":246,"in_reply_to":"8a6dd765_b5633e53","updated":"2026-11-10 13:54:42.000000000","message":"Thanks @alistairncoles@gmail.com for the proposed updates, included in latest patchset!","commit_id":"deddb280ce12a6edd96240df4cdc58a42f23e493"}],"test/s3api/__init__.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c26366f8e5daa0bb53e8ecf74281a9a24d59a3bd","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        A region-specific endpoint refuses a create that names no"},{"line_number":264,"context_line":"        location. us-east-1 refuses a create that names one."},{"line_number":265,"context_line":"        \"\"\""},{"line_number":266,"context_line":"        region \u003d get_opt(\u0027region\u0027, \u0027us-east-1\u0027)"},{"line_number":267,"context_line":"        if region !\u003d \u0027us-east-1\u0027:"},{"line_number":268,"context_line":"            kwargs[\u0027CreateBucketConfiguration\u0027] \u003d {"},{"line_number":269,"context_line":"                \u0027LocationConstraint\u0027: region}"}],"source_content_type":"text/x-python","patch_set":2,"id":"2914a957_ec588003","line":266,"updated":"2026-10-29 15:38:48.000000000","message":"I was expecting a `test/sample.conf` change, too, but [it\u0027s already there](https://github.com/openstack/swift/blame/2.38.3/test/sample.conf#L4)! We just needed to actually do the configuration.","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c26366f8e5daa0bb53e8ecf74281a9a24d59a3bd","unresolved":true,"context_lines":[{"line_number":267,"context_line":"        if region !\u003d \u0027us-east-1\u0027:"},{"line_number":268,"context_line":"            kwargs[\u0027CreateBucketConfiguration\u0027] \u003d {"},{"line_number":269,"context_line":"                \u0027LocationConstraint\u0027: region}"},{"line_number":270,"context_line":"        return client.create_bucket(Bucket\u003dbucket, **kwargs)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    @classmethod"},{"line_number":273,"context_line":"    def create_name(cls, slug):"}],"source_content_type":"text/x-python","patch_set":2,"id":"a5d2b68c_5d4d708e","line":270,"updated":"2026-10-29 15:38:48.000000000","message":"Should we confirm that this succeeded, or are we content to just make sure it didn\u0027t raise? I was thinking something like\n```\nresp \u003d client.create_bucket(Bucket\u003dbucket, **kwargs)\nself.assertEqual(200, resp[\u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])\nreturn resp\n```\nsimilar to what some of the other tests we\u0027re touching already do.","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"0a9c5c7fb18c3bee597b4b804a1291508ec713f6","unresolved":true,"context_lines":[{"line_number":267,"context_line":"        if region !\u003d \u0027us-east-1\u0027:"},{"line_number":268,"context_line":"            kwargs[\u0027CreateBucketConfiguration\u0027] \u003d {"},{"line_number":269,"context_line":"                \u0027LocationConstraint\u0027: region}"},{"line_number":270,"context_line":"        return client.create_bucket(Bucket\u003dbucket, **kwargs)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    @classmethod"},{"line_number":273,"context_line":"    def create_name(cls, slug):"}],"source_content_type":"text/x-python","patch_set":2,"id":"cfcd96fd_c270159d","line":270,"in_reply_to":"a5d2b68c_5d4d708e","updated":"2026-11-03 13:47:07.000000000","message":"This is a class method - so there is no `self`? Using `cls.assertEqual` also fails because it needs an instance. We could use sth like:\n\n```\nstatus \u003d resp[\u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027]                                                                                            \nif status !\u003d 200:                                                                                                                              \n    raise AssertionError(\u0027Expected 200, got %s\u0027 % status)                                                                                      \nreturn resp \n```\nWDYT?\n\nIf the create failed with anything \u003e\u003d 300 botocore already raises an error.","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3227afd9dbdbd779d284e205bb05c78e73853c76","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        if region !\u003d \u0027us-east-1\u0027:"},{"line_number":268,"context_line":"            kwargs[\u0027CreateBucketConfiguration\u0027] \u003d {"},{"line_number":269,"context_line":"                \u0027LocationConstraint\u0027: region}"},{"line_number":270,"context_line":"        return client.create_bucket(Bucket\u003dbucket, **kwargs)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    @classmethod"},{"line_number":273,"context_line":"    def create_name(cls, slug):"}],"source_content_type":"text/x-python","patch_set":2,"id":"cb115cd6_8d5d807c","line":270,"in_reply_to":"cfcd96fd_c270159d","updated":"2026-11-06 21:48:16.000000000","message":"Ah, right -- and it needs to be a class method so we can use it in `setUpClass`. I think I\u0027m fine with relying on botocore to raise errors.\n\nI guess the counterpoint is, should we drop the assertions elsewhere as being unnecessary? E.g., at `BaseMultiPartUploadTestCase.setUp`","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"21cea29a414f96ab24a295ae4b809fc337395e15","unresolved":true,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    @classmethod"},{"line_number":277,"context_line":"    def clear_account(cls, client):"},{"line_number":278,"context_line":"        for bucket in client.list_buckets()[\u0027Buckets\u0027]:"},{"line_number":279,"context_line":"            if not bucket[\u0027Name\u0027].startswith(TEST_PREFIX):"},{"line_number":280,"context_line":"                # these tests run against real s3 accounts"},{"line_number":281,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aed94ba_41248a9e","line":278,"updated":"2026-11-02 17:15:05.000000000","message":"I managed to get a stale bucket in a different region :O which then caused the tearDown to blow up:\n\n```\nbotocore.exceptions.ClientError: An error occurred (PermanentRedirect) when calling the ListObjectVersions operation: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.\n```\n\n...so I think we need to filter the bucket listing by region - see my sq? follow-up patch. And/or be careful about concurrent testing against multiple regions!","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3227afd9dbdbd779d284e205bb05c78e73853c76","unresolved":true,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    @classmethod"},{"line_number":277,"context_line":"    def clear_account(cls, client):"},{"line_number":278,"context_line":"        for bucket in client.list_buckets()[\u0027Buckets\u0027]:"},{"line_number":279,"context_line":"            if not bucket[\u0027Name\u0027].startswith(TEST_PREFIX):"},{"line_number":280,"context_line":"                # these tests run against real s3 accounts"},{"line_number":281,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"303a62a8_404f7892","line":278,"in_reply_to":"5aed94ba_41248a9e","updated":"2026-11-06 21:48:16.000000000","message":"\u003e be careful about concurrent testing against multiple regions!\n\nYeah, our concurrent testing story is *atrocious* here -- I\u0027m surprised we haven\u0027t run into more troubles with all of us at NVIDIA (who can all see each other\u0027s buckets!) running tests concurrently. I feel like `TEST_PREFIX` should probably be configurable.","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"}],"test/s3api/test_mpu.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c26366f8e5daa0bb53e8ecf74281a9a24d59a3bd","unresolved":true,"context_lines":[{"line_number":20,"context_line":"from botocore.exceptions import ClientError"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class BaseMultiPartUploadTestCase(BaseS3TestCase):"},{"line_number":24,"context_line":"    maxDiff \u003d None"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"05299acc_82c9eed9","line":23,"updated":"2026-10-29 15:38:48.000000000","message":"Off-topic: I wonder if this (and others) should inherit from `BaseS3TestCaseWithBucket`...","commit_id":"1d88eb9266b9ec749e6d94d8eadec8f4c7344b84"}],"test/s3api/test_versioning.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c813e4be6114b95b4bf13685581d506608841b8f","unresolved":true,"context_lines":[{"line_number":74,"context_line":"        resp \u003d self.create_bucket(self.client, bucket_name)"},{"line_number":75,"context_line":"        self.assertEqual(200, resp[\u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"},{"line_number":76,"context_line":"        expected_location \u003d \u0027/%s\u0027 % bucket_name"},{"line_number":77,"context_line":"        self.assertEqual(expected_location, resp[\u0027Location\u0027])"},{"line_number":78,"context_line":"        headers \u003d HeaderKeyDict(resp[\u0027ResponseMetadata\u0027][\u0027HTTPHeaders\u0027])"},{"line_number":79,"context_line":"        self.assertEqual(\u00270\u0027, headers[\u0027content-length\u0027])"},{"line_number":80,"context_line":"        self.assertEqual(expected_location, headers[\u0027location\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"906ddc24_5579e60d","line":77,"updated":"2026-11-09 19:15:46.000000000","message":"I saw this fail against us-east-2, presumably because:\n```\nA forward slash followed by the name of the bucket for all account regional namespace buckets and all global general purpose buckets created in us-east-1. For example, /amzn-s3-demo-bucket. For global general purpose buckets created in other AWS Regions, the Location field is the global endpoint URL. For example, http://amzn-s3-demo-bucket.s3.amazonaws.com/.\n```\nhttps://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html#API_CreateBucket_ResponseElements\n\nSee s3 compat: move CreateBucket assertions to test_bucket.py  https://review.opendev.org/c/openstack/swift/+/1014792","commit_id":"deddb280ce12a6edd96240df4cdc58a42f23e493"}]}
