)]}'
{"test/unit/container/test_server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fee3ef252395d6fffadaedd0a14f0be1e3fbdaa2","unresolved":true,"context_lines":[{"line_number":274,"context_line":"                         ts_start.internal)"},{"line_number":275,"context_line":"        # the delete timestamp column defaults to \u00270\u0027"},{"line_number":276,"context_line":"        self.assertEqual(response.headers[\u0027x-backend-delete-timestamp\u0027],"},{"line_number":277,"context_line":"                         Timestamp(\u00270\u0027).internal)"},{"line_number":278,"context_line":"        self.assertEqual(response.headers[\u0027x-backend-status-changed-at\u0027],"},{"line_number":279,"context_line":"                         ts_start.internal)"},{"line_number":280,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"814ade34_613a0bd5","line":277,"updated":"2025-12-15 20:25:22.000000000","message":"Note using `Timestamp.zero()`? Won\u0027t this get a random offset later in the chain?","commit_id":"09d73e1f9ca1474354ac3976f204d51c36ce00bd"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5937b47a7ca768f2d097f1c12e686bbdb2d3fcbe","unresolved":true,"context_lines":[{"line_number":274,"context_line":"                         ts_start.internal)"},{"line_number":275,"context_line":"        # the delete timestamp column defaults to \u00270\u0027"},{"line_number":276,"context_line":"        self.assertEqual(response.headers[\u0027x-backend-delete-timestamp\u0027],"},{"line_number":277,"context_line":"                         Timestamp(\u00270\u0027).internal)"},{"line_number":278,"context_line":"        self.assertEqual(response.headers[\u0027x-backend-status-changed-at\u0027],"},{"line_number":279,"context_line":"                         ts_start.internal)"},{"line_number":280,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"efa3b356_8ca75710","line":277,"in_reply_to":"5b6143e1_001ed823","updated":"2025-12-18 17:02:09.000000000","message":"```\nrepr(Timestamp.zero()) \u003d\u003d \u00270000000000.00000_2000000000000000\u0027  # explicit zero jitter\n```\n\nOh, whoa! I hadn\u0027t realized that yet. Guess we\u0027ll need to update [that docstring](https://github.com/openstack/swift/blob/0550bd4a0ab8e58ff83b7274b033cf3cd7f61552/swift/common/utils/timestamp.py#L135):\n\n\u003e Returns an instance of the smallest possible Timestamp.\n\nI oughta take a pass at https://review.opendev.org/c/openstack/swift/+/967738 (I think? That the right patch? Or... no, there\u0027s some other class hierarchy splitting going on earlier that I should look at, too...)","commit_id":"09d73e1f9ca1474354ac3976f204d51c36ce00bd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"35aa58cec0046bed4422812ced94681952271bf4","unresolved":true,"context_lines":[{"line_number":274,"context_line":"                         ts_start.internal)"},{"line_number":275,"context_line":"        # the delete timestamp column defaults to \u00270\u0027"},{"line_number":276,"context_line":"        self.assertEqual(response.headers[\u0027x-backend-delete-timestamp\u0027],"},{"line_number":277,"context_line":"                         Timestamp(\u00270\u0027).internal)"},{"line_number":278,"context_line":"        self.assertEqual(response.headers[\u0027x-backend-status-changed-at\u0027],"},{"line_number":279,"context_line":"                         ts_start.internal)"},{"line_number":280,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"e3c0a3fc_d4a8d9e6","line":277,"in_reply_to":"814ade34_613a0bd5","updated":"2025-12-16 11:44:43.000000000","message":"nope. The default value of delete timestamp in a container DB is the string \"0\" which is parsed by Timestamp as a legacy timestamp and will always have the string internal form ``0000000000.00000``, even after we switch to v2 Timestamps.\n\nThat is different to Timestamp.zero() which may change to have a default zero jitter component. So, for example, if I move this patch after the current v2 Timestamp change, and switch it to assert Timestamp.zero(), I see\n\n```\nAssertionError: \u00270000000000.00000\u0027 !\u003d \u00270000000000.00000_2000000000000000\u0027\n```\n\nNote re. parsing to legacy format timestamps: \n* the canonical representation of a Timestamp is the string returned by ``Timestamp.internal``. \n* When we construct using ``Timestamp(str)`` we *must* preserve exactly what ``str`` represents and not add jitter, unless the ``str`` has a jitter component. Otherwise we\u0027d end up changing the timestamp (and on disk names) of existing objects when they are replicated etc :/\n\nSo in the future we might have:\n\n```\nrepr(Timestamp(\u00270\u0027)) \u003d\u003d \u00270000000000.00000\u0027\nrepr(Timestamp(0)) \u003d\u003d \u00270000000000.00000_2abcdef123000000\u0027  # random jitter\nrepr(Timestamp.zero()) \u003d\u003d \u00270000000000.00000_2000000000000000\u0027  # explicit zero jitter\n```\n\nNB I\u0027m still contemplating whether (a) we should add random jitter by default and (b) whether we should include the jitter component when it is zero, but nevertheless the assertion as written here in this test for the header value  is correct and \u0027safe\u0027.","commit_id":"09d73e1f9ca1474354ac3976f204d51c36ce00bd"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"41270809a4f6750b52c627bd9c54eb2dc72b5581","unresolved":true,"context_lines":[{"line_number":274,"context_line":"                         ts_start.internal)"},{"line_number":275,"context_line":"        # the delete timestamp column defaults to \u00270\u0027"},{"line_number":276,"context_line":"        self.assertEqual(response.headers[\u0027x-backend-delete-timestamp\u0027],"},{"line_number":277,"context_line":"                         Timestamp(\u00270\u0027).internal)"},{"line_number":278,"context_line":"        self.assertEqual(response.headers[\u0027x-backend-status-changed-at\u0027],"},{"line_number":279,"context_line":"                         ts_start.internal)"},{"line_number":280,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5b6143e1_001ed823","line":277,"in_reply_to":"e3c0a3fc_d4a8d9e6","updated":"2025-12-17 03:50:01.000000000","message":"look at the future that what ``Timestamp(\u00270\u0027)``, ``Timestamp(0)`` and ``Timestamp.zero()`` would become, it makes sense for the delete timestamp in a container DB to continue to use the string form ``0000000000.00000`` which is ``Timestamp(\u00270\u0027).internal``","commit_id":"09d73e1f9ca1474354ac3976f204d51c36ce00bd"}]}
