)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"49cc46338fd7456f431ff42785a8cd550f94e93d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5c9f0b99_bf7c427e","updated":"2026-01-29 05:36:21.000000000","message":"I like it, less guess work on where the x-timestamp will be added. Either in a middleware or in handle_request, but it\u0027ll only add it if its missing. Much better then all the `ensure_x_timestamp` all other the place.","commit_id":"8d9cfa98805b41ec6a46a6976e544e943fcc1314"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"927c00ebeede68bc25a6e1c1a49da3a0e45d0617","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7c3b03b5_6191d930","updated":"2026-01-30 00:47:18.000000000","message":"This touches more then just tests, so maybe @jian can take a look and put the +A on it? Although if i see it still hasn\u0027t landed next time I look I\u0027ll probably just land it ;)","commit_id":"8d9cfa98805b41ec6a46a6976e544e943fcc1314"}],"swift/proxy/controllers/container.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e80e84822b189cdbd9f670f99869ad3b2b3dc97c","unresolved":false,"context_lines":[{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    def _backend_requests(self, req, n_outgoing, account_partition, accounts,"},{"line_number":749,"context_line":"                          policy_index\u003dNone):"},{"line_number":750,"context_line":"        additional \u003d {\u0027X-Timestamp\u0027: Timestamp.now().internal}"},{"line_number":751,"context_line":"        if policy_index is None:"},{"line_number":752,"context_line":"            additional[\u0027X-Backend-Storage-Policy-Default\u0027] \u003d \\"},{"line_number":753,"context_line":"                int(POLICIES.default)"}],"source_content_type":"text/x-python","patch_set":4,"id":"20dc63c7_9a92163a","side":"PARENT","line":750,"updated":"2026-01-30 04:19:56.000000000","message":"I woulda been real tempted to do a diff like\n```\n-       additional \u003d {\u0027X-Timestamp\u0027: Timestamp.now().internal}\n+       additional \u003d {}\n```\nbut this\u0027ll do.","commit_id":"b16fef443fe4493694f4f80b48d05e025492d451"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0324befca4e743f57a7616acb836192bf7502dfc","unresolved":false,"context_lines":[{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    def _backend_requests(self, req, n_outgoing, account_partition, accounts,"},{"line_number":749,"context_line":"                          policy_index\u003dNone):"},{"line_number":750,"context_line":"        additional \u003d {\u0027X-Timestamp\u0027: Timestamp.now().internal}"},{"line_number":751,"context_line":"        if policy_index is None:"},{"line_number":752,"context_line":"            additional[\u0027X-Backend-Storage-Policy-Default\u0027] \u003d \\"},{"line_number":753,"context_line":"                int(POLICIES.default)"}],"source_content_type":"text/x-python","patch_set":4,"id":"32848797_9464de27","side":"PARENT","line":750,"in_reply_to":"20dc63c7_9a92163a","updated":"2026-01-30 11:01:07.000000000","message":"yeah with hindsight that would have done it nicely. IIRC I went through a few iterations before settling the diff and perhaps lost sight of the original (at first I didn\u0027t spot that the if and else set different *keys* as well as values!).","commit_id":"b16fef443fe4493694f4f80b48d05e025492d451"}],"swift/proxy/server.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"49cc46338fd7456f431ff42785a8cd550f94e93d","unresolved":true,"context_lines":[{"line_number":520,"context_line":"            return [b\u0027Internal server error.\\n\u0027]"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"    def update_request(self, req):"},{"line_number":523,"context_line":"        req.ensure_x_timestamp()"},{"line_number":524,"context_line":"        if \u0027x-storage-token\u0027 in req.headers and \\"},{"line_number":525,"context_line":"                \u0027x-auth-token\u0027 not in req.headers:"},{"line_number":526,"context_line":"            req.headers[\u0027x-auth-token\u0027] \u003d req.headers[\u0027x-storage-token\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"c762d1c1_dd0315f6","line":523,"updated":"2026-01-29 05:36:21.000000000","message":"Yup nice and early, but also not overriding AND now done in one place rather then everywhere.. Love it!","commit_id":"8d9cfa98805b41ec6a46a6976e544e943fcc1314"}],"test/unit/proxy/controllers/test_account.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e80e84822b189cdbd9f670f99869ad3b2b3dc97c","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        self.app \u003d proxy_server.Application("},{"line_number":346,"context_line":"            None,"},{"line_number":347,"context_line":"            account_ring\u003dFakeRing(replicas\u003d4),"},{"line_number":348,"context_line":"            container_ring\u003dFakeRing(replicas\u003d4))"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def test_response_code_for_PUT(self):"},{"line_number":351,"context_line":"        PUT_TEST_CASES \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"727fc3b1_5fe1d530","side":"PARENT","line":348,"updated":"2026-01-30 04:19:56.000000000","message":"Nice.","commit_id":"b16fef443fe4493694f4f80b48d05e025492d451"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e80e84822b189cdbd9f670f99869ad3b2b3dc97c","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"@patch_policies([StoragePolicy(0, \u0027zero\u0027, True, object_ring\u003dFakeRing())])"},{"line_number":35,"context_line":"class TestAccountController(BaseUnitTestCase):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    ACCOUNT_REPLICAS \u003d 3"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"80bcbdb2_316e1782","line":35,"updated":"2026-01-30 04:19:56.000000000","message":"So we\u0027re adding not one but *two* new superclasses...","commit_id":"8d9cfa98805b41ec6a46a6976e544e943fcc1314"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0324befca4e743f57a7616acb836192bf7502dfc","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"@patch_policies([StoragePolicy(0, \u0027zero\u0027, True, object_ring\u003dFakeRing())])"},{"line_number":35,"context_line":"class TestAccountController(BaseUnitTestCase):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    ACCOUNT_REPLICAS \u003d 3"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"90ccbf62_64b7fecd","line":35,"in_reply_to":"80bcbdb2_316e1782","updated":"2026-01-30 11:01:07.000000000","message":"``test.BaseTestCase`` already existed\n\nI added ``test.unit.BaseUnitTestCase`` to provide a timestamp iter by default. The iter helpers are in ``test.unit``; I didn\u0027t fancy moving them up to ``test`` to avoid the circular import, and I couldn\u0027t foresee using timestamp iters outside of unit tests, hence ``test.unit.BaseUnitTestCase``.","commit_id":"8d9cfa98805b41ec6a46a6976e544e943fcc1314"}]}
