)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8114186e06ef1f13bb26503074b2ba605e9bfc84","unresolved":true,"context_lines":[{"line_number":14,"context_line":"Delete_timestamp for instance, might indicate the UNSHARDED container is"},{"line_number":15,"context_line":"actually deleted, but there are objects inside that need to be dealt"},{"line_number":16,"context_line":"with. Currently, when transitioning to the SHARDING state it effectively"},{"line_number":17,"context_line":"undeletes itself."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch, when moving into the SHARDING DB state via"},{"line_number":20,"context_line":"broker.set_sharding_state() also persists these 2 extra bits of"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"cc817c6d_68db57b2","line":17,"updated":"2022-07-12 23:41:48.000000000","message":"Was this something we definitely observed in prod? Or something we suspect may have happened? Or just something we envision might happen?","commit_id":"f9158071343ac889a450aca311bfbfcf28d3609a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4d2e1e3d5d733c4d86c728b208ce401997ef26c4","unresolved":true,"context_lines":[{"line_number":14,"context_line":"Delete_timestamp for instance, might indicate the UNSHARDED container is"},{"line_number":15,"context_line":"actually deleted, but there are objects inside that need to be dealt"},{"line_number":16,"context_line":"with. Currently, when transitioning to the SHARDING state it effectively"},{"line_number":17,"context_line":"undeletes itself."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch, when moving into the SHARDING DB state via"},{"line_number":20,"context_line":"broker.set_sharding_state() also persists these 2 extra bits of"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f7de714_f2c068ff","line":17,"in_reply_to":"744739b8_c2ee042a","updated":"2022-07-13 10:31:17.000000000","message":"I\u0027m not aware we have seen this in production, but currently the sharder will not shard an apparently deleted DB, so we wouldn\u0027t see it. I saw it when writing a probe test for the dependent patch https://review.opendev.org/c/openstack/swift/+/849548/2","commit_id":"f9158071343ac889a450aca311bfbfcf28d3609a"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"dc26b27aab1e0a3253dc4b7c1fe196d1db0bf233","unresolved":true,"context_lines":[{"line_number":14,"context_line":"Delete_timestamp for instance, might indicate the UNSHARDED container is"},{"line_number":15,"context_line":"actually deleted, but there are objects inside that need to be dealt"},{"line_number":16,"context_line":"with. Currently, when transitioning to the SHARDING state it effectively"},{"line_number":17,"context_line":"undeletes itself."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch, when moving into the SHARDING DB state via"},{"line_number":20,"context_line":"broker.set_sharding_state() also persists these 2 extra bits of"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"744739b8_c2ee042a","line":17,"in_reply_to":"cc817c6d_68db57b2","updated":"2022-07-13 00:15:17.000000000","message":"We see it happening in tests, which is why are delete again (see the delete I removed in test_backend). But its also something we can see with a draining issue we currently have in prod. When we go and shard them, even through there is no objects in the shards it will go undelete itself.. which is clearly wrong.","commit_id":"f9158071343ac889a450aca311bfbfcf28d3609a"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"538fd85d9b0e25af9fef5320f12f08df24e0a476","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"2487c8c2_f82b1392","updated":"2022-07-12 09:25:38.000000000","message":"This is going to be a particularly relevant fix once we make the sharder actually shard deleted DBs!\n\nI think a unit test targetted at the info before/after a set_sharding_state() call would be useful.","commit_id":"bf1a8b669be17f92c8f794c27e4e7cdbab734a25"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8114186e06ef1f13bb26503074b2ba605e9bfc84","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e954b9a6_5d5a5d0f","updated":"2022-07-12 23:41:48.000000000","message":"I\u0027m worried about transferring status_changed_at but not status -- did I miss where that comes across?","commit_id":"f9158071343ac889a450aca311bfbfcf28d3609a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a0b1677191322b95baa142784cee3664acd6c6fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1cf4164a_4f0e4f18","updated":"2022-07-12 14:57:59.000000000","message":"recheck\n\nfailing probe test is unrelated","commit_id":"f9158071343ac889a450aca311bfbfcf28d3609a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c44917984bb8bf13f77302aea7c26354566160db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"6f17b4a2_71b1e8ad","updated":"2022-07-13 16:41:20.000000000","message":"the unit test I added on patchset 2 has been lost - I will copy it back in and expand to cover status","commit_id":"714e96cb716ec5376afc23d0a2300eb2b77c1cb7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"66d4ce942b34eb95bd91e8820618d904391adb50","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d591dd7a_7d45635e","updated":"2022-07-13 16:49:47.000000000","message":"Added unit tests\n\nI\u0027m a little nervous about getting distracted by understanding the implications for container sync and the reconciler, but maybe I\u0027m fretting too much","commit_id":"eb64f3cf56fdfbd42f5b16385e6903b24eb7208b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5445afec179b15bc002a5f900864eafbafb29286","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"0eeb86be_d0113e40","updated":"2022-07-18 17:00:19.000000000","message":"Yeah, this seems sane. Even if not complete (I\u0027ll keep looking further down the chain), it\u0027s a step in the right direction.","commit_id":"45e13ff4c56748345c9d31bbee3bc6e7abdb5b43"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d01b2d3435cce6a04416a7fd4f919aaeff561e44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"af07375f_179ec9c2","updated":"2022-07-14 08:51:26.000000000","message":"thanks Matt","commit_id":"45e13ff4c56748345c9d31bbee3bc6e7abdb5b43"}],"swift/container/backend.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8114186e06ef1f13bb26503074b2ba605e9bfc84","unresolved":true,"context_lines":[{"line_number":2010,"context_line":"            try:"},{"line_number":2011,"context_line":"                fresh_broker_conn.execute("},{"line_number":2012,"context_line":"                    (\u0027UPDATE container_stat SET created_at\u003d?, \u0027"},{"line_number":2013,"context_line":"                     \u0027status_changed_at\u003d?, delete_timestamp\u003d?\u0027),"},{"line_number":2014,"context_line":"                    (info[\u0027created_at\u0027], info[\u0027status_changed_at\u0027],"},{"line_number":2015,"context_line":"                     info[\u0027delete_timestamp\u0027]))"},{"line_number":2016,"context_line":"                fresh_broker_conn.commit()"}],"source_content_type":"text/x-python","patch_set":2,"id":"e8407043_1de5924e","line":2013,"updated":"2022-07-12 23:41:48.000000000","message":"Feels weird to me that we\u0027re setting status_changed_at but not status, and delete_timestamp but not put_timestamp.... I guess put_timestamp got set in the initialize() call, though? And status will only ever be NULL (or is it blank?) or \u0027DELETED\u0027 -- and presumably we wouldn\u0027t call set_sharding_state() on a DB that\u0027s been flagged as deleted -- except, that seems to be *exactly* the case the commit message is worried about!\n\nThe more I think about it, it\u0027s kinda weird that these aren\u0027t *all* values we could pass to initialize()... but at least we\u0027re doing this all in a temp DB so we don\u0027t have to worry about something reading it while we\u0027re only part way through set_sharding_state()!","commit_id":"f9158071343ac889a450aca311bfbfcf28d3609a"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"e76d4679d664a849052b33c0e0e87ae903be91e2","unresolved":true,"context_lines":[{"line_number":2010,"context_line":"            try:"},{"line_number":2011,"context_line":"                fresh_broker_conn.execute("},{"line_number":2012,"context_line":"                    (\u0027UPDATE container_stat SET created_at\u003d?, \u0027"},{"line_number":2013,"context_line":"                     \u0027status_changed_at\u003d?, delete_timestamp\u003d?\u0027),"},{"line_number":2014,"context_line":"                    (info[\u0027created_at\u0027], info[\u0027status_changed_at\u0027],"},{"line_number":2015,"context_line":"                     info[\u0027delete_timestamp\u0027]))"},{"line_number":2016,"context_line":"                fresh_broker_conn.commit()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9be03c66_dba53fb7","line":2013,"in_reply_to":"88e8982f_e3f0b994","updated":"2022-07-13 00:28:48.000000000","message":"hmm, status isn\u0027t pulled out into get_info. So I see 2 possible options.\n\n1. Just simplify this scope to just delete_timestamp\n2. Maybe have a function that clones the container_info data so we can push it all into the fresh db.\n3. Both, over 2 patches, so we can land the delete_timestamp one for next release.","commit_id":"f9158071343ac889a450aca311bfbfcf28d3609a"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d51dd46403288eb7e1c67666db621056ecbc55a2","unresolved":false,"context_lines":[{"line_number":2010,"context_line":"            try:"},{"line_number":2011,"context_line":"                fresh_broker_conn.execute("},{"line_number":2012,"context_line":"                    (\u0027UPDATE container_stat SET created_at\u003d?, \u0027"},{"line_number":2013,"context_line":"                     \u0027status_changed_at\u003d?, delete_timestamp\u003d?\u0027),"},{"line_number":2014,"context_line":"                    (info[\u0027created_at\u0027], info[\u0027status_changed_at\u0027],"},{"line_number":2015,"context_line":"                     info[\u0027delete_timestamp\u0027]))"},{"line_number":2016,"context_line":"                fresh_broker_conn.commit()"}],"source_content_type":"text/x-python","patch_set":2,"id":"305d2e67_b12796ca","line":2013,"in_reply_to":"9be03c66_dba53fb7","updated":"2022-07-14 02:27:29.000000000","message":"Ack","commit_id":"f9158071343ac889a450aca311bfbfcf28d3609a"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"dc26b27aab1e0a3253dc4b7c1fe196d1db0bf233","unresolved":true,"context_lines":[{"line_number":2010,"context_line":"            try:"},{"line_number":2011,"context_line":"                fresh_broker_conn.execute("},{"line_number":2012,"context_line":"                    (\u0027UPDATE container_stat SET created_at\u003d?, \u0027"},{"line_number":2013,"context_line":"                     \u0027status_changed_at\u003d?, delete_timestamp\u003d?\u0027),"},{"line_number":2014,"context_line":"                    (info[\u0027created_at\u0027], info[\u0027status_changed_at\u0027],"},{"line_number":2015,"context_line":"                     info[\u0027delete_timestamp\u0027]))"},{"line_number":2016,"context_line":"                fresh_broker_conn.commit()"}],"source_content_type":"text/x-python","patch_set":2,"id":"88e8982f_e3f0b994","line":2013,"in_reply_to":"e8407043_1de5924e","updated":"2022-07-13 00:15:17.000000000","message":"put_timestamp is pulled across in the initialize. The delete_timestamp is really the big one where.\nThe status_changed_at I think is idividual for a replica, but because we\u0027re making the fresh db, in essence the same as the retiring db it should match.\n\nYou right though, if we\u0027re pulling these over to the fresh DB maybe the status should come too. I\u0027ll add it.","commit_id":"f9158071343ac889a450aca311bfbfcf28d3609a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c44917984bb8bf13f77302aea7c26354566160db","unresolved":true,"context_lines":[{"line_number":923,"context_line":"        Get global data for the container."},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"        :returns: dict with keys: account, container, created_at,"},{"line_number":926,"context_line":"                  put_timestamp, delete_timestamp, status, status_changed_at,"},{"line_number":927,"context_line":"                  object_count, bytes_used, reported_put_timestamp,"},{"line_number":928,"context_line":"                  reported_delete_timestamp, reported_object_count,"},{"line_number":929,"context_line":"                  reported_bytes_used, hash, id, x_container_sync_point1,"}],"source_content_type":"text/x-python","patch_set":5,"id":"dc801d23_d97be26b","line":926,"range":{"start_line":926,"start_character":51,"end_line":926,"end_character":57},"updated":"2022-07-13 16:41:20.000000000","message":"so status was previously write-only? I guess we ought to sync it in case future us decides it is useful","commit_id":"714e96cb716ec5376afc23d0a2300eb2b77c1cb7"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d51dd46403288eb7e1c67666db621056ecbc55a2","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        Get global data for the container."},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"        :returns: dict with keys: account, container, created_at,"},{"line_number":926,"context_line":"                  put_timestamp, delete_timestamp, status, status_changed_at,"},{"line_number":927,"context_line":"                  object_count, bytes_used, reported_put_timestamp,"},{"line_number":928,"context_line":"                  reported_delete_timestamp, reported_object_count,"},{"line_number":929,"context_line":"                  reported_bytes_used, hash, id, x_container_sync_point1,"}],"source_content_type":"text/x-python","patch_set":5,"id":"175f3277_fa674d17","line":926,"range":{"start_line":926,"start_character":51,"end_line":926,"end_character":57},"in_reply_to":"dc801d23_d97be26b","updated":"2022-07-14 02:27:29.000000000","message":"Ack","commit_id":"714e96cb716ec5376afc23d0a2300eb2b77c1cb7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5445afec179b15bc002a5f900864eafbafb29286","unresolved":true,"context_lines":[{"line_number":923,"context_line":"        Get global data for the container."},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"        :returns: dict with keys: account, container, created_at,"},{"line_number":926,"context_line":"                  put_timestamp, delete_timestamp, status, status_changed_at,"},{"line_number":927,"context_line":"                  object_count, bytes_used, reported_put_timestamp,"},{"line_number":928,"context_line":"                  reported_delete_timestamp, reported_object_count,"},{"line_number":929,"context_line":"                  reported_bytes_used, hash, id, x_container_sync_point1,"}],"source_content_type":"text/x-python","patch_set":5,"id":"43a5f77d_238e8d75","line":926,"range":{"start_line":926,"start_character":51,"end_line":926,"end_character":57},"in_reply_to":"dc801d23_d97be26b","updated":"2022-07-18 17:00:19.000000000","message":"status is weird, man. It\u0027s like local-only info that we don\u0027t actually look at :-/\n\nEr... actually, maybe we *do* look at it, but only at the account level: https://github.com/openstack/swift/blob/2.29.1/swift/account/backend.py#L262","commit_id":"714e96cb716ec5376afc23d0a2300eb2b77c1cb7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c44917984bb8bf13f77302aea7c26354566160db","unresolved":true,"context_lines":[{"line_number":2013,"context_line":"                sql +\u003d \u0027delete_timestamp\u003d?\u0027"},{"line_number":2014,"context_line":"                sql_data \u003d [info[\u0027created_at\u0027], info[\u0027delete_timestamp\u0027]]"},{"line_number":2015,"context_line":"                if info.get(\u0027status\u0027):"},{"line_number":2016,"context_line":"                    sql +\u003d \u0027, status\u003d?, status_changed_at\u003d?\u0027"},{"line_number":2017,"context_line":"                    sql_data.extend([info[\u0027status\u0027],"},{"line_number":2018,"context_line":"                                     info[\u0027status_changed_at\u0027]])"},{"line_number":2019,"context_line":"                # Not syncing reported_* as it does hurt to force an update to"}],"source_content_type":"text/x-python","patch_set":5,"id":"15bf4f8c_03e78dc6","line":2016,"range":{"start_line":2016,"start_character":30,"end_line":2016,"end_character":36},"updated":"2022-07-13 16:41:20.000000000","message":"I don\u0027t see any unit test coverage for this change","commit_id":"714e96cb716ec5376afc23d0a2300eb2b77c1cb7"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d51dd46403288eb7e1c67666db621056ecbc55a2","unresolved":true,"context_lines":[{"line_number":2013,"context_line":"                sql +\u003d \u0027delete_timestamp\u003d?\u0027"},{"line_number":2014,"context_line":"                sql_data \u003d [info[\u0027created_at\u0027], info[\u0027delete_timestamp\u0027]]"},{"line_number":2015,"context_line":"                if info.get(\u0027status\u0027):"},{"line_number":2016,"context_line":"                    sql +\u003d \u0027, status\u003d?, status_changed_at\u003d?\u0027"},{"line_number":2017,"context_line":"                    sql_data.extend([info[\u0027status\u0027],"},{"line_number":2018,"context_line":"                                     info[\u0027status_changed_at\u0027]])"},{"line_number":2019,"context_line":"                # Not syncing reported_* as it does hurt to force an update to"}],"source_content_type":"text/x-python","patch_set":5,"id":"a5503f26_ccca7c98","line":2016,"range":{"start_line":2016,"start_character":30,"end_line":2016,"end_character":36},"in_reply_to":"15bf4f8c_03e78dc6","updated":"2022-07-14 02:27:29.000000000","message":"Not sure we need it in a conditional anymore.. I added this only if status existed because originally (that never made it into a patchset) I was pulling out the container stats as a SELECT and fell back to get_info which didn\u0027t have... now that it does (as of this patch), we can simply always include it.\n\nWill update the patch.","commit_id":"714e96cb716ec5376afc23d0a2300eb2b77c1cb7"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"990db03cf4d025a163b20ac565fee2706f30a06b","unresolved":false,"context_lines":[{"line_number":2013,"context_line":"                sql +\u003d \u0027delete_timestamp\u003d?\u0027"},{"line_number":2014,"context_line":"                sql_data \u003d [info[\u0027created_at\u0027], info[\u0027delete_timestamp\u0027]]"},{"line_number":2015,"context_line":"                if info.get(\u0027status\u0027):"},{"line_number":2016,"context_line":"                    sql +\u003d \u0027, status\u003d?, status_changed_at\u003d?\u0027"},{"line_number":2017,"context_line":"                    sql_data.extend([info[\u0027status\u0027],"},{"line_number":2018,"context_line":"                                     info[\u0027status_changed_at\u0027]])"},{"line_number":2019,"context_line":"                # Not syncing reported_* as it does hurt to force an update to"}],"source_content_type":"text/x-python","patch_set":5,"id":"a801b43d_2d8e2879","line":2016,"range":{"start_line":2016,"start_character":30,"end_line":2016,"end_character":36},"in_reply_to":"a5503f26_ccca7c98","updated":"2022-07-14 04:46:12.000000000","message":"Done","commit_id":"714e96cb716ec5376afc23d0a2300eb2b77c1cb7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c44917984bb8bf13f77302aea7c26354566160db","unresolved":true,"context_lines":[{"line_number":2016,"context_line":"                    sql +\u003d \u0027, status\u003d?, status_changed_at\u003d?\u0027"},{"line_number":2017,"context_line":"                    sql_data.extend([info[\u0027status\u0027],"},{"line_number":2018,"context_line":"                                     info[\u0027status_changed_at\u0027]])"},{"line_number":2019,"context_line":"                # Not syncing reported_* as it does hurt to force an update to"},{"line_number":2020,"context_line":"                # the account layer, hash too probably doesn\u0027t hurt to be"},{"line_number":2021,"context_line":"                # re-generated, seeing as the objects would have changed."},{"line_number":2022,"context_line":"                fresh_broker_conn.execute(sql, sql_data)"}],"source_content_type":"text/x-python","patch_set":5,"id":"a5a4eae5_82801a6c","line":2019,"range":{"start_line":2019,"start_character":47,"end_line":2019,"end_character":65},"updated":"2022-07-13 16:41:20.000000000","message":"typo?\n\nfor the sake of future us, can we be more precise. I think we could write:\n\n  \u0027reported_*\u0027 items are not sync\u0027d because this is consistent with\n  when a new DB is created after rsync\u0027ing to another node (see _newid()).\n  \u0027hash\u0027 should not be sync\u0027d because this DB has no object rows.","commit_id":"714e96cb716ec5376afc23d0a2300eb2b77c1cb7"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d51dd46403288eb7e1c67666db621056ecbc55a2","unresolved":false,"context_lines":[{"line_number":2016,"context_line":"                    sql +\u003d \u0027, status\u003d?, status_changed_at\u003d?\u0027"},{"line_number":2017,"context_line":"                    sql_data.extend([info[\u0027status\u0027],"},{"line_number":2018,"context_line":"                                     info[\u0027status_changed_at\u0027]])"},{"line_number":2019,"context_line":"                # Not syncing reported_* as it does hurt to force an update to"},{"line_number":2020,"context_line":"                # the account layer, hash too probably doesn\u0027t hurt to be"},{"line_number":2021,"context_line":"                # re-generated, seeing as the objects would have changed."},{"line_number":2022,"context_line":"                fresh_broker_conn.execute(sql, sql_data)"}],"source_content_type":"text/x-python","patch_set":5,"id":"99d8449e_010f172a","line":2019,"range":{"start_line":2019,"start_character":47,"end_line":2019,"end_character":65},"in_reply_to":"a5a4eae5_82801a6c","updated":"2022-07-14 02:27:29.000000000","message":"Thanks Al, yeah, maybe I should\u0027ve really made this gettit comment, rather then doing in code and thought about better wording :)\nThanks for the much better wording.","commit_id":"714e96cb716ec5376afc23d0a2300eb2b77c1cb7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c44917984bb8bf13f77302aea7c26354566160db","unresolved":true,"context_lines":[{"line_number":2028,"context_line":"                    self.path, err)"},{"line_number":2029,"context_line":"                return False"},{"line_number":2030,"context_line":""},{"line_number":2031,"context_line":"        # sync the container-sync sync points"},{"line_number":2032,"context_line":"        if info.get(\u0027x_container_sync_point1\u0027):"},{"line_number":2033,"context_line":"            fresh_broker.set_x_container_sync_points("},{"line_number":2034,"context_line":"                info[\u0027x_container_sync_point1\u0027],"},{"line_number":2035,"context_line":"                info[\u0027x_container_sync_point2\u0027])"},{"line_number":2036,"context_line":""},{"line_number":2037,"context_line":"        # sync the reconciler sync point"},{"line_number":2038,"context_line":"        reconciler_sync_point \u003d self.get_reconciler_sync()"},{"line_number":2039,"context_line":"        if reconciler_sync_point:"},{"line_number":2040,"context_line":"            fresh_broker.update_reconciler_sync(reconciler_sync_point)"},{"line_number":2041,"context_line":""},{"line_number":2042,"context_line":"        # Rename to the new database"},{"line_number":2043,"context_line":"        fresh_db_filename \u003d make_db_file_path(self._db_file, epoch)"},{"line_number":2044,"context_line":"        renamer(tmp_db_file, fresh_db_filename)"}],"source_content_type":"text/x-python","patch_set":5,"id":"770c79fb_448bc81e","line":2041,"range":{"start_line":2031,"start_character":1,"end_line":2041,"end_character":0},"updated":"2022-07-13 16:41:20.000000000","message":"I\u0027m going to need to remind myself of the significance of these before I can +2 this change. What do container-sync and reconciler do with a sharding DB that has no objects (except misplaced)?\n\nCould we make this fix more targeted by breaking out just the delete_timestamp, status and status_changed_at items for now?","commit_id":"714e96cb716ec5376afc23d0a2300eb2b77c1cb7"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"990db03cf4d025a163b20ac565fee2706f30a06b","unresolved":false,"context_lines":[{"line_number":2028,"context_line":"                    self.path, err)"},{"line_number":2029,"context_line":"                return False"},{"line_number":2030,"context_line":""},{"line_number":2031,"context_line":"        # sync the container-sync sync points"},{"line_number":2032,"context_line":"        if info.get(\u0027x_container_sync_point1\u0027):"},{"line_number":2033,"context_line":"            fresh_broker.set_x_container_sync_points("},{"line_number":2034,"context_line":"                info[\u0027x_container_sync_point1\u0027],"},{"line_number":2035,"context_line":"                info[\u0027x_container_sync_point2\u0027])"},{"line_number":2036,"context_line":""},{"line_number":2037,"context_line":"        # sync the reconciler sync point"},{"line_number":2038,"context_line":"        reconciler_sync_point \u003d self.get_reconciler_sync()"},{"line_number":2039,"context_line":"        if reconciler_sync_point:"},{"line_number":2040,"context_line":"            fresh_broker.update_reconciler_sync(reconciler_sync_point)"},{"line_number":2041,"context_line":""},{"line_number":2042,"context_line":"        # Rename to the new database"},{"line_number":2043,"context_line":"        fresh_db_filename \u003d make_db_file_path(self._db_file, epoch)"},{"line_number":2044,"context_line":"        renamer(tmp_db_file, fresh_db_filename)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3b32aa0e_f44a0ed8","line":2041,"range":{"start_line":2031,"start_character":1,"end_line":2041,"end_character":0},"in_reply_to":"1b4b52f4_74962b35","updated":"2022-07-14 04:46:12.000000000","message":"split them up.","commit_id":"714e96cb716ec5376afc23d0a2300eb2b77c1cb7"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"b7c9b99d05c3c439fba71417f0caad453a241ceb","unresolved":true,"context_lines":[{"line_number":2028,"context_line":"                    self.path, err)"},{"line_number":2029,"context_line":"                return False"},{"line_number":2030,"context_line":""},{"line_number":2031,"context_line":"        # sync the container-sync sync points"},{"line_number":2032,"context_line":"        if info.get(\u0027x_container_sync_point1\u0027):"},{"line_number":2033,"context_line":"            fresh_broker.set_x_container_sync_points("},{"line_number":2034,"context_line":"                info[\u0027x_container_sync_point1\u0027],"},{"line_number":2035,"context_line":"                info[\u0027x_container_sync_point2\u0027])"},{"line_number":2036,"context_line":""},{"line_number":2037,"context_line":"        # sync the reconciler sync point"},{"line_number":2038,"context_line":"        reconciler_sync_point \u003d self.get_reconciler_sync()"},{"line_number":2039,"context_line":"        if reconciler_sync_point:"},{"line_number":2040,"context_line":"            fresh_broker.update_reconciler_sync(reconciler_sync_point)"},{"line_number":2041,"context_line":""},{"line_number":2042,"context_line":"        # Rename to the new database"},{"line_number":2043,"context_line":"        fresh_db_filename \u003d make_db_file_path(self._db_file, epoch)"},{"line_number":2044,"context_line":"        renamer(tmp_db_file, fresh_db_filename)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1b4b52f4_74962b35","line":2041,"range":{"start_line":2031,"start_character":1,"end_line":2041,"end_character":0},"in_reply_to":"770c79fb_448bc81e","updated":"2022-07-14 00:56:51.000000000","message":"yeah, I could split these up if that makes sense. Yeah, moving the sync points to a now empty DB (though the rowid is maintained), probably does make much of a difference. I guess to get container_sync for example, working with sharded containers it\u0027ll keep the sync points in each shard.. same with the reconciler I guess.\n\nThe way I say it was if we\u0027re replacing the old retiring DB with a new one, it\u0027ll be nice if the new one had all the old metadata, for completeness sake. Might come in useful if we ever use this \"retiring -\u003e fresh\" mechanism as a sort of vacuum. Or if we ever want to just shard off the start of a container.. which isn\u0027t in scope.. just thinking out loud.","commit_id":"714e96cb716ec5376afc23d0a2300eb2b77c1cb7"}],"test/unit/container/test_backend.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"538fd85d9b0e25af9fef5320f12f08df24e0a476","unresolved":true,"context_lines":[{"line_number":304,"context_line":"        # move to sharding state"},{"line_number":305,"context_line":"        broker.enable_sharding(next(self.ts))"},{"line_number":306,"context_line":"        self.assertTrue(broker.set_sharding_state())"},{"line_number":307,"context_line":"        broker.delete_db(next(self.ts).internal)"},{"line_number":308,"context_line":"        self.assertTrue(broker.is_deleted())"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        # check object in retiring db is considered"}],"source_content_type":"text/x-python","patch_set":1,"id":"2ee34338_a3632c8f","side":"PARENT","line":307,"updated":"2022-07-12 09:25:38.000000000","message":"oh! so we actually had to work around this bug to get the test to pass :/","commit_id":"2e2251638ce747781e836e64f8b9aa41f9eddd38"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"dc26b27aab1e0a3253dc4b7c1fe196d1db0bf233","unresolved":true,"context_lines":[{"line_number":304,"context_line":"        # move to sharding state"},{"line_number":305,"context_line":"        broker.enable_sharding(next(self.ts))"},{"line_number":306,"context_line":"        self.assertTrue(broker.set_sharding_state())"},{"line_number":307,"context_line":"        broker.delete_db(next(self.ts).internal)"},{"line_number":308,"context_line":"        self.assertTrue(broker.is_deleted())"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        # check object in retiring db is considered"}],"source_content_type":"text/x-python","patch_set":1,"id":"f1c4a9d9_95ec7a17","side":"PARENT","line":307,"in_reply_to":"2ee34338_a3632c8f","updated":"2022-07-13 00:15:17.000000000","message":"Yeah, I was as suprised as you were. I was like... hold on a minute.","commit_id":"2e2251638ce747781e836e64f8b9aa41f9eddd38"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"990db03cf4d025a163b20ac565fee2706f30a06b","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        # move to sharding state"},{"line_number":305,"context_line":"        broker.enable_sharding(next(self.ts))"},{"line_number":306,"context_line":"        self.assertTrue(broker.set_sharding_state())"},{"line_number":307,"context_line":"        broker.delete_db(next(self.ts).internal)"},{"line_number":308,"context_line":"        self.assertTrue(broker.is_deleted())"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        # check object in retiring db is considered"}],"source_content_type":"text/x-python","patch_set":1,"id":"845e0018_50983001","side":"PARENT","line":307,"in_reply_to":"f1c4a9d9_95ec7a17","updated":"2022-07-14 04:46:12.000000000","message":"Ack","commit_id":"2e2251638ce747781e836e64f8b9aa41f9eddd38"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"990db03cf4d025a163b20ac565fee2706f30a06b","unresolved":true,"context_lines":[{"line_number":329,"context_line":"        # Test ContainerBroker.empty"},{"line_number":330,"context_line":"        db_path \u003d os.path.join("},{"line_number":331,"context_line":"            tempdir, \u0027containers\u0027, \u0027part\u0027, \u0027suffix\u0027, \u0027hash\u0027,"},{"line_number":332,"context_line":"            \u0027%s-container.db\u0027 % uuid4())"},{"line_number":333,"context_line":"        broker \u003d ContainerBroker(db_path, account\u003d\u0027a\u0027, container\u003d\u0027c\u0027)"},{"line_number":334,"context_line":"        broker.initialize(next(self.ts).internal, 0)"},{"line_number":335,"context_line":"        self.assertTrue(broker.is_root_container())"}],"source_content_type":"text/x-python","patch_set":8,"id":"d4f28ddc_3b3503d1","line":332,"updated":"2022-07-14 04:46:12.000000000","message":"Not sure this is still required. Added it while debugging some legecy tests, but I think was a red herring. I guess it doesn\u0027t hurt using a unique name though?\n\nSigh, I guess I\u0027ll go fix it.","commit_id":"f347d0b2fec6701fe9bea57f32f43462ec72f300"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5445afec179b15bc002a5f900864eafbafb29286","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        # move to sharding state"},{"line_number":305,"context_line":"        broker.enable_sharding(next(self.ts))"},{"line_number":306,"context_line":"        self.assertTrue(broker.set_sharding_state())"},{"line_number":307,"context_line":"        broker.delete_db(next(self.ts).internal)"},{"line_number":308,"context_line":"        self.assertTrue(broker.is_deleted())"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        # check object in retiring db is considered"}],"source_content_type":"text/x-python","patch_set":9,"id":"a7f96568_0f90bade","side":"PARENT","line":307,"updated":"2022-07-18 17:00:19.000000000","message":"lolz","commit_id":"2e2251638ce747781e836e64f8b9aa41f9eddd38"}]}
