)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Nathan Nguyen \u003cnguyennathan1502@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-06-22 14:45:17 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fixing constant creation-date for s3api list-buckets"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I3239e4c43ed18c02c94effc951cc1ad6066afc61"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"e53d538b_05c4c28f","line":7,"updated":"2025-06-25 01:30:14.000000000","message":"Could use a\n\n\u003e Closes-Bug: #1856938","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"d7453836a3a0de6acb45260acc8eaf32058e15f6","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Nathan Nguyen \u003cnguyennathan1502@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-06-22 14:45:17 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fixing constant creation-date for s3api list-buckets"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I3239e4c43ed18c02c94effc951cc1ad6066afc61"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"35becf69_fa6688ea","line":7,"in_reply_to":"e53d538b_05c4c28f","updated":"2025-07-05 21:08:10.000000000","message":"Done","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"3f48adfc8e4a3e66d6cc28c3d8411362cc665b08","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"587d0cc8_6fdcee12","updated":"2025-05-08 01:25:37.000000000","message":"The code is working when I dry run it and some of the existing tests are currently failing. I\u0027m wondering if the logic is good enough to start working on tests","commit_id":"7a55ca722cb06271d315206452c2bfcbfda99297"},{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"1930bd863a91b41b5dc16edb854d06d84e602074","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"79d80250_06152e65","updated":"2025-06-22 21:50:02.000000000","message":"Hi Tim and Matt, my code is ready for review. It looks okay when I manually test it and just want to make sure all is good before I start writing test.","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e3ad8199_a9803ff7","updated":"2025-06-25 01:30:14.000000000","message":"The migration mechanics look right to me (only run the migration during a write, gracefully degrade as best we can during reads) but I wonder if we should rely more on the container layer providing us the data we want, rather than merging timestamps up here in the account layer.\n\nMight be good to add some assertions to existing probe tests where we do a bunch of operations to make real out-of-sync containers and demonstrate how the replication updaters and replicators bring them back in-sync.","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"97d2a28b921849b2868f94d41f34ca19fd2b8804","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2741e3dd_ee8826f9","in_reply_to":"79d80250_06152e65","updated":"2025-06-22 21:50:53.000000000","message":"Thank you","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"}],"swift/account/backend.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":true,"context_lines":[{"line_number":85,"context_line":"                bytes_used INTEGER,"},{"line_number":86,"context_line":"                deleted INTEGER DEFAULT 0,"},{"line_number":87,"context_line":"                storage_policy_index INTEGER DEFAULT 0,"},{"line_number":88,"context_line":"                creation_date TEXT DEFAULT 1233679509"},{"line_number":89,"context_line":"            );"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            CREATE INDEX ix_container_deleted_name ON"}],"source_content_type":"text/x-python","patch_set":2,"id":"e7af6a67_b2f2b2fd","line":88,"range":{"start_line":88,"start_character":16,"end_line":88,"end_character":29},"updated":"2025-06-25 01:30:14.000000000","message":"Probably better as `create_timestamp`, to keep with the naming convention for `put_timestamp` and `delete_timestamp` -- or `created_at`, to match the columns (both in `container_info` and `object`) in the container backend -- come to think of it, why aren\u0027t we using that `container_info` value here? Plumb it through the container-updater to the account-server and down into the backend. Then we can rely on how the container replicas merge their timestamps and always trust the updater (like we do for storage policy).","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"66418b1b30a2e5ca3716e610cf326fb802bd5e9d","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                bytes_used INTEGER,"},{"line_number":86,"context_line":"                deleted INTEGER DEFAULT 0,"},{"line_number":87,"context_line":"                storage_policy_index INTEGER DEFAULT 0,"},{"line_number":88,"context_line":"                creation_date TEXT DEFAULT 1233679509"},{"line_number":89,"context_line":"            );"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            CREATE INDEX ix_container_deleted_name ON"}],"source_content_type":"text/x-python","patch_set":2,"id":"72af2db2_f61ccf3e","line":88,"range":{"start_line":88,"start_character":16,"end_line":88,"end_character":29},"in_reply_to":"e7af6a67_b2f2b2fd","updated":"2025-07-05 20:58:35.000000000","message":"Done","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":true,"context_lines":[{"line_number":201,"context_line":"        if len(entry) \u003e 7:"},{"line_number":202,"context_line":"            creation_date \u003d entry[7]"},{"line_number":203,"context_line":"        else:"},{"line_number":204,"context_line":"            creation_date \u003d 1233679509"},{"line_number":205,"context_line":"        item_list.append("},{"line_number":206,"context_line":"            {\u0027name\u0027: name,"},{"line_number":207,"context_line":"             \u0027put_timestamp\u0027: put_timestamp,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9c108919_1f1a83a8","line":204,"updated":"2025-06-25 01:30:14.000000000","message":"I get why you chose this time -- it means we\u0027ll match existing s3api behavior -- but it feels a bit like the tail wagging the dog.\n\nI think I\u0027m partial toward defaulting this to `put_timestamp` -- at least it\u0027s *related* to the client API calls. Or 0, as a big red flag to not trust this value. WDYT? We could also see what Matt thinks about it.","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"66418b1b30a2e5ca3716e610cf326fb802bd5e9d","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        if len(entry) \u003e 7:"},{"line_number":202,"context_line":"            creation_date \u003d entry[7]"},{"line_number":203,"context_line":"        else:"},{"line_number":204,"context_line":"            creation_date \u003d 1233679509"},{"line_number":205,"context_line":"        item_list.append("},{"line_number":206,"context_line":"            {\u0027name\u0027: name,"},{"line_number":207,"context_line":"             \u0027put_timestamp\u0027: put_timestamp,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9cd1f7a1_dbdf04d0","line":204,"in_reply_to":"9c108919_1f1a83a8","updated":"2025-07-05 20:58:35.000000000","message":"Done","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":true,"context_lines":[{"line_number":249,"context_line":"            deleted \u003d 0"},{"line_number":250,"context_line":"        creation_date \u003d None"},{"line_number":251,"context_line":"        # fetch the creation_date from the container directly"},{"line_number":252,"context_line":"        # since creation_date never changes -- no need to use param"},{"line_number":253,"context_line":"        with self.get() as conn:"},{"line_number":254,"context_line":"            try:"},{"line_number":255,"context_line":"                row \u003d conn.execute("}],"source_content_type":"text/x-python","patch_set":2,"id":"921a2677_8fe9c5fc","line":252,"range":{"start_line":252,"start_character":16,"end_line":252,"end_character":43},"updated":"2025-06-25 01:30:14.000000000","message":"So what happens when you\u0027ve got\n\n- a PUT at t0,\n- a DELETE at t1, and\n- a PUT at t2\n\n(with `t2 - t0 \u003c reclaim_age`)? It still counts as \"created\" at t0, even though the storage policy may have changed with the PUT at t2?\n\nThough when I go looking at how we deal with `created_at`, it\u0027s in a similar boat... maybe we really want `status_changed_at` -- except [I don\u0027t think that gets replicated](https://bugs.launchpad.net/swift/+bug/1945034) 😕","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":true,"context_lines":[{"line_number":258,"context_line":"                if row and row[0] and row[0] !\u003d \u00270\u0027:"},{"line_number":259,"context_line":"                    creation_date \u003d row[0]"},{"line_number":260,"context_line":"            except sqlite3.OperationalError as err:"},{"line_number":261,"context_line":"                if \"no such column: creation_date\" in str(err):"},{"line_number":262,"context_line":"                    self._migrate_add_creation_date(conn)"},{"line_number":263,"context_line":"                    row \u003d conn.execute("},{"line_number":264,"context_line":"                        \u0027SELECT creation_date FROM container WHERE name \u003d ?\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"45b5c655_ada6cf3c","line":261,"updated":"2025-06-25 01:30:14.000000000","message":"I was expecting an\n```\nelse:\n    raise\n```\nThen by the time we get out of the `try`/`except`, we know we\u0027ve got `row` and can move the common\n```\nif row and ...:\n    creation_date \u003d row[0]\n```\nout and down.","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"66418b1b30a2e5ca3716e610cf326fb802bd5e9d","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                if row and row[0] and row[0] !\u003d \u00270\u0027:"},{"line_number":259,"context_line":"                    creation_date \u003d row[0]"},{"line_number":260,"context_line":"            except sqlite3.OperationalError as err:"},{"line_number":261,"context_line":"                if \"no such column: creation_date\" in str(err):"},{"line_number":262,"context_line":"                    self._migrate_add_creation_date(conn)"},{"line_number":263,"context_line":"                    row \u003d conn.execute("},{"line_number":264,"context_line":"                        \u0027SELECT creation_date FROM container WHERE name \u003d ?\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"04147f5a_6c311f3f","line":261,"in_reply_to":"45b5c655_ada6cf3c","updated":"2025-07-05 20:58:35.000000000","message":"Done","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":true,"context_lines":[{"line_number":268,"context_line":"        # If this is a new container, set creation_date to the current time"},{"line_number":269,"context_line":"        # Migration will use default timestamp being 1233679509"},{"line_number":270,"context_line":"        if creation_date is None:"},{"line_number":271,"context_line":"            creation_date \u003d put_timestamp"},{"line_number":272,"context_line":"        record \u003d {\u0027name\u0027: name, \u0027put_timestamp\u0027: put_timestamp,"},{"line_number":273,"context_line":"                  \u0027delete_timestamp\u0027: delete_timestamp,"},{"line_number":274,"context_line":"                  \u0027object_count\u0027: object_count,"}],"source_content_type":"text/x-python","patch_set":2,"id":"8076e7ad_2ba76a70","line":271,"updated":"2025-06-25 01:30:14.000000000","message":"I think you could just start with this up at L250 and override as you run queries.","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"66418b1b30a2e5ca3716e610cf326fb802bd5e9d","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        # If this is a new container, set creation_date to the current time"},{"line_number":269,"context_line":"        # Migration will use default timestamp being 1233679509"},{"line_number":270,"context_line":"        if creation_date is None:"},{"line_number":271,"context_line":"            creation_date \u003d put_timestamp"},{"line_number":272,"context_line":"        record \u003d {\u0027name\u0027: name, \u0027put_timestamp\u0027: put_timestamp,"},{"line_number":273,"context_line":"                  \u0027delete_timestamp\u0027: delete_timestamp,"},{"line_number":274,"context_line":"                  \u0027object_count\u0027: object_count,"}],"source_content_type":"text/x-python","patch_set":2,"id":"24c4fabd_d18b23db","line":271,"in_reply_to":"8076e7ad_2ba76a70","updated":"2025-07-05 20:58:35.000000000","message":"Done","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":true,"context_lines":[{"line_number":396,"context_line":"        :param allow_reserved: exclude names with reserved-byte by default"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        :returns: list of tuples of (name, object_count, bytes_used,"},{"line_number":399,"context_line":"                  put_timestamp, storage_policy_index, is_subdir)"},{"line_number":400,"context_line":"        \"\"\""},{"line_number":401,"context_line":"        delim_force_gte \u003d False"},{"line_number":402,"context_line":"        if reverse:"}],"source_content_type":"text/x-python","patch_set":2,"id":"70462dfd_9e3f2925","line":399,"updated":"2025-06-25 01:30:14.000000000","message":"Needs updating.","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":true,"context_lines":[{"line_number":414,"context_line":"                # The base query  without the creation_date"},{"line_number":415,"context_line":"                query \u003d \"\"\""},{"line_number":416,"context_line":"                    SELECT name, object_count, bytes_used, put_timestamp,"},{"line_number":417,"context_line":"                    {storage_policy_index}, 0{creation_date}"},{"line_number":418,"context_line":"                    FROM container"},{"line_number":419,"context_line":"                    WHERE \"\"\""},{"line_number":420,"context_line":"                query_args \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aef772d_347ebf4b","line":417,"updated":"2025-06-25 01:30:14.000000000","message":"FWIW I\u0027d be fine with adding the creation timestamp in the middle of things and keeping the `is_dir` flag at the end.","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"66418b1b30a2e5ca3716e610cf326fb802bd5e9d","unresolved":false,"context_lines":[{"line_number":414,"context_line":"                # The base query  without the creation_date"},{"line_number":415,"context_line":"                query \u003d \"\"\""},{"line_number":416,"context_line":"                    SELECT name, object_count, bytes_used, put_timestamp,"},{"line_number":417,"context_line":"                    {storage_policy_index}, 0{creation_date}"},{"line_number":418,"context_line":"                    FROM container"},{"line_number":419,"context_line":"                    WHERE \"\"\""},{"line_number":420,"context_line":"                query_args \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"ad9e585d_1ebc502a","line":417,"in_reply_to":"1aef772d_347ebf4b","updated":"2025-07-05 20:58:35.000000000","message":"Done","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":true,"context_lines":[{"line_number":465,"context_line":"                    # then this special handling can be removed."},{"line_number":466,"context_line":"                    if \"no such column: storage_policy_index\" in str(err):"},{"line_number":467,"context_line":"                        # Try without storage_policy_index but"},{"line_number":468,"context_line":"                        # with creation_date"},{"line_number":469,"context_line":"                        try:"},{"line_number":470,"context_line":"                            curs \u003d conn.execute("},{"line_number":471,"context_line":"                                query.format(storage_policy_index\u003d\"0\","}],"source_content_type":"text/x-python","patch_set":2,"id":"f4fe46a6_f0b525c0","line":468,"updated":"2025-06-25 01:30:14.000000000","message":"But if we don\u0027t have a `storage_policy_index`, surely we don\u0027t have a `creation_date` column either, right?\n\nI think what\u0027s really bugging me is the repetition -- maybe something like [when we\u0027re merging shard ranges](https://github.com/openstack/swift/blob/2.35.0/swift/container/backend.py#L1467-L1494) would be better?","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"d7453836a3a0de6acb45260acc8eaf32058e15f6","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                    # then this special handling can be removed."},{"line_number":466,"context_line":"                    if \"no such column: storage_policy_index\" in str(err):"},{"line_number":467,"context_line":"                        # Try without storage_policy_index but"},{"line_number":468,"context_line":"                        # with creation_date"},{"line_number":469,"context_line":"                        try:"},{"line_number":470,"context_line":"                            curs \u003d conn.execute("},{"line_number":471,"context_line":"                                query.format(storage_policy_index\u003d\"0\","}],"source_content_type":"text/x-python","patch_set":2,"id":"a318982d_9fd03375","line":468,"in_reply_to":"f4fe46a6_f0b525c0","updated":"2025-07-05 21:08:10.000000000","message":"Done","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":true,"context_lines":[{"line_number":484,"context_line":"                        # creation_date"},{"line_number":485,"context_line":"                        curs \u003d conn.execute(query.format("},{"line_number":486,"context_line":"                            storage_policy_index\u003d\"storage_policy_index\","},{"line_number":487,"context_line":"                            creation_date\u003d\"\"), query_args)"},{"line_number":488,"context_line":"                    else:"},{"line_number":489,"context_line":"                        raise"},{"line_number":490,"context_line":"                curs.row_factory \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"dbd6f688_68618843","line":487,"range":{"start_line":487,"start_character":28,"end_line":487,"end_character":44},"updated":"2025-06-25 01:30:14.000000000","message":"We could add a default here, so we always return the same number of columns.","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"66418b1b30a2e5ca3716e610cf326fb802bd5e9d","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                        # creation_date"},{"line_number":485,"context_line":"                        curs \u003d conn.execute(query.format("},{"line_number":486,"context_line":"                            storage_policy_index\u003d\"storage_policy_index\","},{"line_number":487,"context_line":"                            creation_date\u003d\"\"), query_args)"},{"line_number":488,"context_line":"                    else:"},{"line_number":489,"context_line":"                        raise"},{"line_number":490,"context_line":"                curs.row_factory \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"d55ecb09_5c85afaf","line":487,"range":{"start_line":487,"start_character":28,"end_line":487,"end_character":44},"in_reply_to":"dbd6f688_68618843","updated":"2025-07-05 20:58:35.000000000","message":"Done","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":true,"context_lines":[{"line_number":596,"context_line":"                    else:"},{"line_number":597,"context_line":"                        record[5] \u003d 0"},{"line_number":598,"context_line":"                    if len(row) \u003e 7 and row[7] and row[7] !\u003d \u00270\u0027:"},{"line_number":599,"context_line":"                        creation_date \u003d row[7]"},{"line_number":600,"context_line":"                record.append(creation_date)"},{"line_number":601,"context_line":"                curs.execute(\u0027\u0027\u0027"},{"line_number":602,"context_line":"                    DELETE FROM container WHERE name \u003d ? AND"}],"source_content_type":"text/x-python","patch_set":2,"id":"16849ea7_b43aa444","line":599,"updated":"2025-06-25 01:30:14.000000000","message":"So when should `row[7]` win and when should `rec[\u0027creation_date\u0027]`? FWIW, it looks like for `storage_policy`, the incoming `rec` *always* wins.","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"d7453836a3a0de6acb45260acc8eaf32058e15f6","unresolved":false,"context_lines":[{"line_number":596,"context_line":"                    else:"},{"line_number":597,"context_line":"                        record[5] \u003d 0"},{"line_number":598,"context_line":"                    if len(row) \u003e 7 and row[7] and row[7] !\u003d \u00270\u0027:"},{"line_number":599,"context_line":"                        creation_date \u003d row[7]"},{"line_number":600,"context_line":"                record.append(creation_date)"},{"line_number":601,"context_line":"                curs.execute(\u0027\u0027\u0027"},{"line_number":602,"context_line":"                    DELETE FROM container WHERE name \u003d ? AND"}],"source_content_type":"text/x-python","patch_set":2,"id":"8c07b57e_1f29af29","line":599,"in_reply_to":"16849ea7_b43aa444","updated":"2025-07-05 21:08:10.000000000","message":"Done","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330e04f0c5072648654efb57fd3d6adf77b1fee3","unresolved":true,"context_lines":[{"line_number":724,"context_line":"            \u0027\u0027\u0027)"},{"line_number":725,"context_line":"            conn.commit()"},{"line_number":726,"context_line":"        except sqlite3.OperationalError as err:"},{"line_number":727,"context_line":"            if \u0027no such column: creation_date\u0027 not in str(err):"},{"line_number":728,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":2,"id":"7c7f3a99_cee6f96c","line":727,"updated":"2025-06-25 01:30:14.000000000","message":"I think we want to be looking for something like `duplicate column`, like at https://github.com/openstack/swift/blob/2.35.0/swift/container/backend.py#L1600-L1607","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"},{"author":{"_account_id":37337,"name":"Nathan Nguyen","display_name":"Nathan Nguyen","email":"nguyennathan1502@gmail.com","username":"nathang15"},"change_message_id":"d7453836a3a0de6acb45260acc8eaf32058e15f6","unresolved":false,"context_lines":[{"line_number":724,"context_line":"            \u0027\u0027\u0027)"},{"line_number":725,"context_line":"            conn.commit()"},{"line_number":726,"context_line":"        except sqlite3.OperationalError as err:"},{"line_number":727,"context_line":"            if \u0027no such column: creation_date\u0027 not in str(err):"},{"line_number":728,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":2,"id":"a3593ff1_b517e23e","line":727,"in_reply_to":"7c7f3a99_cee6f96c","updated":"2025-07-05 21:08:10.000000000","message":"Done","commit_id":"24902b17f8c072f965988fd0bdfaf08b3221e246"}]}
