)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bd745d5986b4f95dcdff3c7fa56508146f145e41","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Matthew Allen \u003cmaallen@nvidia.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-06-03 17:06:53 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"account: Quarantine truncated DBs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"While exercising the account-auditor in a SAIO, we observed that"},{"line_number":10,"context_line":"manually truncating an account database did not cause it to be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"6962d0c3_11d7bc7b","line":7,"updated":"2026-06-04 18:49:24.000000000","message":"does it tho?\n\nhttps://review.opendev.org/c/openstack/swift/+/991709/1/test/unit/account/test_auditor.py#155","commit_id":"4e2c5fb6c1cbe5ae636afa097c4f643fc0ce2536"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bd745d5986b4f95dcdff3c7fa56508146f145e41","unresolved":true,"context_lines":[{"line_number":28,"context_line":"This intentionally narrows the quarantine trigger to a definitively-"},{"line_number":29,"context_line":"missing row rather than broadening the OperationalError catch, which"},{"line_number":30,"context_line":"would risk spurious quarantines on transient SQLITE_BUSY or"},{"line_number":31,"context_line":"pre-migration \"no such column\" errors."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Change-Id: I35b689717c01b1649e9205f67d46958d3d5c16d2"},{"line_number":34,"context_line":"Signed-off-by: Matthew Allen \u003cmaallen@nvidia.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"0fb7072d_54cd81e3","line":31,"updated":"2026-06-04 18:49:24.000000000","message":"I think that\u0027s a reasonable justification, but possibly still to narrow - maybe we could add some kind of \"is this even a sqlite database?\" fallback verification to the OperationalError somehow.","commit_id":"4e2c5fb6c1cbe5ae636afa097c4f643fc0ce2536"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bd745d5986b4f95dcdff3c7fa56508146f145e41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"11d7d6d6_25c90833","updated":"2026-06-04 18:49:24.000000000","message":"because the motivation of this change is improving robustness of the auditor I would suggest that the test_backend changes seem necessary but insufficient\n\nIf the title is \"quarantine truncated databases\" I would expect to see an auditor oriented test that sets up a screwy db runs audit and shows the quarantine:\n\n991709: sq? Add auditor quarantine regression tests | https://review.opendev.org/c/openstack/swift/+/991709\n\n^ N.B. the \"existing table missing row\" vs \"no such table\" difference.\n\nAlso don\u0027t be afraid to scope the operational error down some\n\nhttps://github.com/NVIDIA/swift/blob/master/swift/common/db.py#L952\n\n^ I went looking for a \"better\" way to \"catagorize\" sqlite operational errors once and didn\u0027t find it; so I\u0027ve learned to live with:\n\n```\nif \u0027expected quarantine/migration condition\u0027 not in str(e):  raise\n```\n\nYMMV\n\nIf you want to limit the scope to just \"quarantine when table is missing row\" - that may still be useful, but maybe change/elaborate in the title?  I may have unfairly anchored \"truncated\" ~\u003d `: \u003e /some/path/to/a/hash.db`","commit_id":"4e2c5fb6c1cbe5ae636afa097c4f643fc0ce2536"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"0da742c349dc1710e65a044add9a68c882eee0b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1cb0c086_b8f0fabf","updated":"2026-06-04 09:16:07.000000000","message":"recheck\n\nFailures looks unrelated to this patch:\nERROR with Account server 158.69.69.167:6212/sdb2 re: Trying to GET /v1/AUTH_test: ConnectionTimeout (0.5s)\nERROR with Account server 158.69.69.167:6212/sdb2 re: Trying to POST /AUTH_test: ConnectionTimeout (0.5s)","commit_id":"4e2c5fb6c1cbe5ae636afa097c4f643fc0ce2536"}],"swift/account/backend.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bd745d5986b4f95dcdff3c7fa56508146f145e41","unresolved":true,"context_lines":[{"line_number":345,"context_line":"        \"\"\""},{"line_number":346,"context_line":"        self._commit_puts_stale_ok()"},{"line_number":347,"context_line":"        with self.get() as conn:"},{"line_number":348,"context_line":"            data \u003d dict(conn.execute(\u0027\u0027\u0027"},{"line_number":349,"context_line":"                SELECT account, created_at,  put_timestamp, delete_timestamp,"},{"line_number":350,"context_line":"                       status_changed_at, container_count, object_count,"},{"line_number":351,"context_line":"                       bytes_used, hash, id"}],"source_content_type":"text/x-python","patch_set":1,"id":"79713395_f92b73d3","side":"PARENT","line":348,"updated":"2026-06-04 18:49:24.000000000","message":"oic, we removed the dict cast here","commit_id":"ca8749f344168ad1c4e07fdfd24e68ca04c57eae"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bd745d5986b4f95dcdff3c7fa56508146f145e41","unresolved":true,"context_lines":[{"line_number":271,"context_line":"        info \u003d conn.execute(\u0027\u0027\u0027"},{"line_number":272,"context_line":"            SELECT put_timestamp, delete_timestamp, container_count, status"},{"line_number":273,"context_line":"            FROM account_stat\u0027\u0027\u0027).fetchone()"},{"line_number":274,"context_line":"        if not info:"},{"line_number":275,"context_line":"            self.quarantine(\"missing row in account_stat table\")"},{"line_number":276,"context_line":"        return self._is_deleted_info(**info)"},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"93f95f08_3d73b289","line":274,"updated":"2026-06-04 18:49:24.000000000","message":"here \"info\" is really more like \"data\" or \"row\" \n\nthe `if not row: quarantine()` pattern is well established in `common.db` e.g.\n\nhttps://github.com/NVIDIA/swift/blob/master/swift/common/db.py#L948","commit_id":"4e2c5fb6c1cbe5ae636afa097c4f643fc0ce2536"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bd745d5986b4f95dcdff3c7fa56508146f145e41","unresolved":true,"context_lines":[{"line_number":341,"context_line":"        \"\"\""},{"line_number":342,"context_line":"        Get global data for the account."},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        :returns: dict with keys: account, created_at, put_timestamp,"},{"line_number":345,"context_line":"                  delete_timestamp, status_changed_at, container_count,"},{"line_number":346,"context_line":"                  object_count, bytes_used, hash, id"},{"line_number":347,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"b7c82f70_15cb5753","line":344,"updated":"2026-06-04 18:49:24.000000000","message":"oic, a *dict* - not just a sqlite3.Row that *acts like* a dict","commit_id":"4e2c5fb6c1cbe5ae636afa097c4f643fc0ce2536"}]}
