)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"2319594d99b9b4ffaccf49bddd25c347c38d1657","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"bdee4244_81cd10f7","updated":"2025-12-12 00:32:15.000000000","message":"Otherwise looks great!","commit_id":"1bc64df6eba8ed3b74e3527cb13634c1847c88b6"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dec0a56f3eeaf669582447a49b4b1970673674a5","unresolved":true,"context_lines":[{"line_number":1178,"context_line":"                  self.resp.getheader(\u0027x-put-timestamp\u0027) or"},{"line_number":1179,"context_line":"                  self.resp.getheader(\u0027x-timestamp\u0027) or"},{"line_number":1180,"context_line":"                  None)"},{"line_number":1181,"context_line":"        return Timestamp(header) if header else Timestamp.zero()"},{"line_number":1182,"context_line":""},{"line_number":1183,"context_line":"    @property"},{"line_number":1184,"context_line":"    def parts_iter(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"296e3f09_7fc2ccb6","line":1181,"updated":"2025-12-01 22:39:35.000000000","message":"I\u0027m starting to wonder if we might want a `Timestamp.first_or_zero()` class method like\n```\n@classmethod\ndef first_or_zero(cls, *args):\n    for arg in args:\n        if arg:\n            return cls(arg)\n    return cls.zero()\n```","commit_id":"718749744991ed8a74d54526b611194c892790ba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"818b67dbdbf90e92688d7824974d15befdc2bddd","unresolved":false,"context_lines":[{"line_number":1178,"context_line":"                  self.resp.getheader(\u0027x-put-timestamp\u0027) or"},{"line_number":1179,"context_line":"                  self.resp.getheader(\u0027x-timestamp\u0027) or"},{"line_number":1180,"context_line":"                  None)"},{"line_number":1181,"context_line":"        return Timestamp(header) if header else Timestamp.zero()"},{"line_number":1182,"context_line":""},{"line_number":1183,"context_line":"    @property"},{"line_number":1184,"context_line":"    def parts_iter(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bdc821bf_4d744a0a","line":1181,"in_reply_to":"296e3f09_7fc2ccb6","updated":"2025-12-05 13:18:27.000000000","message":"that\u0027s a neat idea. But I think maybe we can just allow Timestamp(None) or Timestamp(\u0027\u0027) to default to a zero timestamp.\n\nTackling that in the Timestamp.zero patch\n\nUPDATE: I backed away from my idea, see the Timestamp.zero patch. For now, I\u0027ll stick with writing out the default cases longhand rather then getting distracted by clever factory methods.","commit_id":"718749744991ed8a74d54526b611194c892790ba"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dec0a56f3eeaf669582447a49b4b1970673674a5","unresolved":true,"context_lines":[{"line_number":1603,"context_line":"                    src_headers.get(\u0027x-backend-data-timestamp\u0027) or"},{"line_number":1604,"context_line":"                    src_headers.get(\u0027x-backend-timestamp\u0027) or"},{"line_number":1605,"context_line":"                    src_headers.get(\u0027x-put-timestamp\u0027) or"},{"line_number":1606,"context_line":"                    src_headers.get(\u0027x-timestamp\u0027) or 0)"},{"line_number":1607,"context_line":"                if ps_timestamp \u003e\u003d self.latest_404_timestamp:"},{"line_number":1608,"context_line":"                    self.statuses.append(possible_source.status)"},{"line_number":1609,"context_line":"                    self.reasons.append(possible_source.reason)"}],"source_content_type":"text/x-python","patch_set":4,"id":"0fe3ad07_c476cf6d","line":1606,"updated":"2025-12-01 22:39:35.000000000","message":"What about this one?","commit_id":"718749744991ed8a74d54526b611194c892790ba"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"818b67dbdbf90e92688d7824974d15befdc2bddd","unresolved":false,"context_lines":[{"line_number":1603,"context_line":"                    src_headers.get(\u0027x-backend-data-timestamp\u0027) or"},{"line_number":1604,"context_line":"                    src_headers.get(\u0027x-backend-timestamp\u0027) or"},{"line_number":1605,"context_line":"                    src_headers.get(\u0027x-put-timestamp\u0027) or"},{"line_number":1606,"context_line":"                    src_headers.get(\u0027x-timestamp\u0027) or 0)"},{"line_number":1607,"context_line":"                if ps_timestamp \u003e\u003d self.latest_404_timestamp:"},{"line_number":1608,"context_line":"                    self.statuses.append(possible_source.status)"},{"line_number":1609,"context_line":"                    self.reasons.append(possible_source.reason)"}],"source_content_type":"text/x-python","patch_set":4,"id":"0092bb29_e531a16f","line":1606,"in_reply_to":"0fe3ad07_c476cf6d","updated":"2025-12-05 13:18:27.000000000","message":"Done","commit_id":"718749744991ed8a74d54526b611194c892790ba"}],"test/unit/proxy/controllers/test_base.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1eb8592df9a4d3ecba58eb7c0d3355693a46f162","unresolved":true,"context_lines":[{"line_number":1657,"context_line":"                               \u0027X-Put-Timestamp\u0027: timestamps[1].internal},"},{"line_number":1658,"context_line":"                              {\u0027ip\u0027: \u00271.2.3.9\u0027, \u0027port\u0027: \u00277\u0027}),"},{"line_number":1659,"context_line":"        ]"},{"line_number":1660,"context_line":"        actual \u003d sorted(srcs, key\u003doperator.attrgetter(\u0027timestamp\u0027))"},{"line_number":1661,"context_line":"        self.assertEqual([srcs[3], srcs[0], srcs[1], srcs[2]], actual)"},{"line_number":1662,"context_line":""},{"line_number":1663,"context_line":"    def test_close(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"44a5a1f0_9b0970f1","line":1660,"range":{"start_line":1660,"start_character":24,"end_line":1660,"end_character":28},"updated":"2025-12-01 21:01:47.000000000","message":"I kind of really want to make this `random.sample(srcs, k\u003dlen(srcs))` so we could define `srcs` more reasonably and just say `self.assertEqual(srcs, actual)` at the end, but I\u0027m pretty sure that\u0027ll make the test flakey until we get our random offsets...\n\nAs things are, this test is a pain to reason about, and I feel like the extra indirection with `timestamps` made it worse :-(","commit_id":"718749744991ed8a74d54526b611194c892790ba"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"2319594d99b9b4ffaccf49bddd25c347c38d1657","unresolved":true,"context_lines":[{"line_number":1657,"context_line":"                               \u0027X-Put-Timestamp\u0027: timestamps[1].internal},"},{"line_number":1658,"context_line":"                              {\u0027ip\u0027: \u00271.2.3.9\u0027, \u0027port\u0027: \u00277\u0027}),"},{"line_number":1659,"context_line":"        ]"},{"line_number":1660,"context_line":"        actual \u003d sorted(srcs, key\u003doperator.attrgetter(\u0027timestamp\u0027))"},{"line_number":1661,"context_line":"        self.assertEqual([srcs[3], srcs[0], srcs[1], srcs[2]], actual)"},{"line_number":1662,"context_line":""},{"line_number":1663,"context_line":"    def test_close(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"680c873d_5d04d3cd","line":1660,"range":{"start_line":1660,"start_character":24,"end_line":1660,"end_character":28},"in_reply_to":"44a5a1f0_9b0970f1","updated":"2025-12-12 00:32:15.000000000","message":"Yeah it does make it harder to read. We\u0027re not even really using the timestamps more then once. So maybe this needs to be:\n\n```\nsrcs \u003d [\n            self._make_source({\u0027X-Timestamp\u0027: Timestamp(\u002712345.12345\u0027).internal},\n                              {\u0027ip\u0027: \u00271.2.3.7\u0027, \u0027port\u0027: \u00279\u0027}),\n            self._make_source({\u0027X-Timestamp\u0027: Timestamp(\u002712345.12346\u0027).internal},\n                              {\u0027ip\u0027: \u00271.2.3.8\u0027, \u0027port\u0027: \u00278\u0027}),\n            self._make_source({\u0027X-Timestamp\u0027: Timestamp(12345.12346).internal},\n                              {\u0027ip\u0027: \u00271.2.3.8\u0027, \u0027port\u0027: \u00274\u0027}),\n            self._make_source({\u0027X-Timestamp\u0027: Timestamp(\u002712345.12343\u0027).internal,\n                               \u0027X-Put-Timestamp\u0027: Timestamp(\u002712345.12344\u0027).internal},\n                              {\u0027ip\u0027: \u00271.2.3.9\u0027, \u0027port\u0027: \u00277\u0027}),\n        ]\n```","commit_id":"718749744991ed8a74d54526b611194c892790ba"}]}
