)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"a7f1a3cb1a9835065a06492bce9eb1edbc4bb216","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"dbb31bcf_2ae8be2e","updated":"2025-05-28 05:42:47.000000000","message":"run-quobyteci","commit_id":"f3b4530e73a1203aa2dc228945b51d0c05ad7a97"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"2908237a094fb9ad2b1fead0f5776cee4886546c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"63b01434_5dbc9575","updated":"2025-05-28 08:14:43.000000000","message":"run-quobyteci\n\ngerrit is resisting cinder checkouts today","commit_id":"f3b4530e73a1203aa2dc228945b51d0c05ad7a97"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"89eb10989592f110f2c51c3c50e90cabd12618f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"380a6b2c_3ecfd992","updated":"2025-07-16 20:40:36.000000000","message":"Code looks good at a quick glance ... I did notice a formatting problem that you can fix quickly, though.","commit_id":"1d5ae9814f834d6c0d5e52192c58907b140835fb"}],"cinder/cmd/manage.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"89eb10989592f110f2c51c3c50e90cabd12618f9","unresolved":true,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @args(\u0027--batch-size\u0027,"},{"line_number":209,"context_line":"          type\u003dint, metavar\u003d\u0027\u003cnumber\u003e\u0027, default\u003d1000, dest \u003d\u0027batch_size\u0027,"},{"line_number":210,"context_line":"          help\u003d\u0027If specified, delete operations will be performed in batches\u0027"},{"line_number":211,"context_line":"               \u0027of the given size. Otherwise, all deletions are executed in a\u0027"},{"line_number":212,"context_line":"               \u0027single transaction per table.\u0027)"},{"line_number":213,"context_line":"    @args(\u0027age_in_days\u0027, type\u003dint,"},{"line_number":214,"context_line":"          help\u003d\u0027Purge deleted rows older than age in days\u0027)"},{"line_number":215,"context_line":"    def purge(self, age_in_days: int, batch_size: Optional[int]) -\u003e None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"4fa268bd_b86e9ae3","line":212,"range":{"start_line":210,"start_character":16,"end_line":212,"end_character":46},"updated":"2025-07-16 20:40:36.000000000","message":"need spaces at the end of these strings or else the words will run together in the help text","commit_id":"1d5ae9814f834d6c0d5e52192c58907b140835fb"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3b2a66de3487a17770e0ef423ea1cea2e5f428ba","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @args(\u0027--batch-size\u0027,"},{"line_number":209,"context_line":"          type\u003dint, metavar\u003d\u0027\u003cnumber\u003e\u0027, default\u003d1000, dest \u003d\u0027batch_size\u0027,"},{"line_number":210,"context_line":"          help\u003d\u0027If specified, delete operations will be performed in batches\u0027"},{"line_number":211,"context_line":"               \u0027of the given size. Otherwise, all deletions are executed in a\u0027"},{"line_number":212,"context_line":"               \u0027single transaction per table.\u0027)"},{"line_number":213,"context_line":"    @args(\u0027age_in_days\u0027, type\u003dint,"},{"line_number":214,"context_line":"          help\u003d\u0027Purge deleted rows older than age in days\u0027)"},{"line_number":215,"context_line":"    def purge(self, age_in_days: int, batch_size: Optional[int]) -\u003e None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7c4d5035_954e6969","line":212,"range":{"start_line":210,"start_character":16,"end_line":212,"end_character":46},"in_reply_to":"4fa268bd_b86e9ae3","updated":"2025-10-10 11:57:40.000000000","message":"Done","commit_id":"1d5ae9814f834d6c0d5e52192c58907b140835fb"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"331b3c655d6e195b5fd2d8c65183ee961b90b2e9","unresolved":true,"context_lines":[{"line_number":8085,"context_line":"###############################"},{"line_number":8086,"context_line":""},{"line_number":8087,"context_line":""},{"line_number":8088,"context_line":"def __log_sql_statement(statement):"},{"line_number":8089,"context_line":"    from sqlalchemy.dialects import mysql"},{"line_number":8090,"context_line":"    stmt_compiled \u003d statement.compile("},{"line_number":8091,"context_line":"        dialect\u003dmysql.dialect(), compile_kwargs\u003d{\"literal_binds\": True})"}],"source_content_type":"text/x-python","patch_set":9,"id":"07e20c38_1f577778","line":8088,"updated":"2025-10-20 15:20:12.000000000","message":"I don\u0027t think we need this here - probably has a perf impact and would be better to remove.","commit_id":"292d71a43ba139e29019e6c3b75feddb4bc9dfa2"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"c3052460dafeca449212592630871e388ce851a4","unresolved":false,"context_lines":[{"line_number":8085,"context_line":"###############################"},{"line_number":8086,"context_line":""},{"line_number":8087,"context_line":""},{"line_number":8088,"context_line":"def __log_sql_statement(statement):"},{"line_number":8089,"context_line":"    from sqlalchemy.dialects import mysql"},{"line_number":8090,"context_line":"    stmt_compiled \u003d statement.compile("},{"line_number":8091,"context_line":"        dialect\u003dmysql.dialect(), compile_kwargs\u003d{\"literal_binds\": True})"}],"source_content_type":"text/x-python","patch_set":9,"id":"9e2653be_98cd7da2","line":8088,"in_reply_to":"07e20c38_1f577778","updated":"2026-01-30 20:12:39.000000000","message":"Done","commit_id":"292d71a43ba139e29019e6c3b75feddb4bc9dfa2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6b8fedabd9337274f8041470fdfc029b4489ab3","unresolved":true,"context_lines":[{"line_number":8118,"context_line":""},{"line_number":8119,"context_line":""},{"line_number":8120,"context_line":"def _purge_deleted_rows_for_table("},{"line_number":8121,"context_line":"        context, table, deleted_age, max_rows\u003dNone):"},{"line_number":8122,"context_line":"    \"\"\"Purge deleted rows from table that are older than the specified age.\"\"\""},{"line_number":8123,"context_line":""},{"line_number":8124,"context_line":"    pkey \u003d \"id\""}],"source_content_type":"text/x-python","patch_set":12,"id":"ffc73571_d62d363d","line":8121,"range":{"start_line":8121,"start_character":24,"end_line":8121,"end_character":35},"updated":"2026-02-10 19:39:21.000000000","message":"This seems to be a timestamp and not an age -- might be better to use a different name for clarity.","commit_id":"0a33feeb6af8e9e6f467dbed828a73d57289acad"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"a216845f9246383d53258297591a7c1099060cca","unresolved":true,"context_lines":[{"line_number":8118,"context_line":""},{"line_number":8119,"context_line":""},{"line_number":8120,"context_line":"def _purge_deleted_rows_for_table("},{"line_number":8121,"context_line":"        context, table, deleted_age, max_rows\u003dNone):"},{"line_number":8122,"context_line":"    \"\"\"Purge deleted rows from table that are older than the specified age.\"\"\""},{"line_number":8123,"context_line":""},{"line_number":8124,"context_line":"    pkey \u003d \"id\""}],"source_content_type":"text/x-python","patch_set":12,"id":"54d2e6bb_05400eac","line":8121,"range":{"start_line":8121,"start_character":24,"end_line":8121,"end_character":35},"in_reply_to":"ffc73571_d62d363d","updated":"2026-03-11 13:32:07.000000000","message":"The terms deleted_age and age_in_days (the second exposed to the user as a command parameter) function as a TTL and are used to determine which records are old enough to be deleted. I\u0027m concerned that changing this to \"timeout\" might lead to more confusion, as a timeout might be interpreted as an execution duration instead of how far into the past we want to filter records. If a user sees a parameter called purge_timeout or deleted_timeout, they might assume it means stopping the purge if it takes longer than X seconds.","commit_id":"0a33feeb6af8e9e6f467dbed828a73d57289acad"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6b8fedabd9337274f8041470fdfc029b4489ab3","unresolved":true,"context_lines":[{"line_number":8164,"context_line":"    metadata \u003d MetaData()"},{"line_number":8165,"context_line":"    metadata.reflect(engine)"},{"line_number":8166,"context_line":"    skipped_tables \u003d []"},{"line_number":8167,"context_line":"    deleted_age \u003d timeutils.utcnow() - dt.timedelta(days\u003dage_in_days)"},{"line_number":8168,"context_line":"    for table in reversed(metadata.sorted_tables):"},{"line_number":8169,"context_line":"        if \u0027deleted\u0027 not in table.columns.keys():"},{"line_number":8170,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":12,"id":"2d70af3b_ad823bdd","line":8167,"range":{"start_line":8167,"start_character":4,"end_line":8167,"end_character":15},"updated":"2026-02-10 19:39:21.000000000","message":"Same as above re: variable name.","commit_id":"0a33feeb6af8e9e6f467dbed828a73d57289acad"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"7a41798744c6286817f9aabf5ee3bac92a18e0a9","unresolved":true,"context_lines":[{"line_number":8206,"context_line":"            if skipped_tables:"},{"line_number":8207,"context_line":"                LOG.warning(\u0027Purge incomplete. Skipped %d table(s): %s\u0027,"},{"line_number":8208,"context_line":"                            len(skipped_tables), \u0027, \u0027.join(skipped_tables))"},{"line_number":8209,"context_line":"            raise"},{"line_number":8210,"context_line":""},{"line_number":8211,"context_line":"    if skipped_tables:"},{"line_number":8212,"context_line":"        LOG.warning(\u0027Purge incomplete. Skipped %d table(s) due to foreign key \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"fd0c56a2_8939025f","line":8209,"updated":"2026-04-08 15:33:01.000000000","message":"raise is raising DBReferenceError but manager.py is catching different error try:\n    db.purge_deleted_rows(\n        ctxt, age_in_days\u003dage_in_days, batch_size\u003dbatch_size)\nexcept db_exc.DBReferenceError:","commit_id":"0a33feeb6af8e9e6f467dbed828a73d57289acad"}]}
