From 4805c6b06b66912c5dc104b478d22b2c1be07542 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Tue, 21 Oct 2025 19:18:43 +0300 Subject: [PATCH] antithesis-tests: Don't fail tests on ProgrammingError The ProgrammingError exception is thrown when tables, indexes, or columns are dropped in parallel. Let's not fail the Antithesis test drivers when that happens. --- .../parallel_driver_alter_table.py | 4 ++ .../parallel_driver_create_index.py | 6 +++ .../stress-composer/parallel_driver_delete.py | 4 ++ .../parallel_driver_drop_index.py | 4 +- .../parallel_driver_drop_table.py | 11 +++-- .../stress-composer/parallel_driver_insert.py | 4 ++ .../parallel_driver_rollback.py | 4 ++ .../parallel_driver_schema_rollback.py | 49 ++++++++++++------- .../stress-composer/parallel_driver_update.py | 4 ++ 9 files changed, 67 insertions(+), 23 deletions(-) diff --git a/antithesis-tests/stress-composer/parallel_driver_alter_table.py b/antithesis-tests/stress-composer/parallel_driver_alter_table.py index be0551e41..0d151dbbb 100755 --- a/antithesis-tests/stress-composer/parallel_driver_alter_table.py +++ b/antithesis-tests/stress-composer/parallel_driver_alter_table.py @@ -126,6 +126,10 @@ try: con.commit() con_init.commit() +except turso.ProgrammingError as e: + print(f"Table/column might have been dropped in parallel: {e}") + con.rollback() + con_init.rollback() except turso.OperationalError as e: print(f"Failed to alter table: {e}") con.rollback() diff --git a/antithesis-tests/stress-composer/parallel_driver_create_index.py b/antithesis-tests/stress-composer/parallel_driver_create_index.py index e384dcb2d..2391dac4f 100755 --- a/antithesis-tests/stress-composer/parallel_driver_create_index.py +++ b/antithesis-tests/stress-composer/parallel_driver_create_index.py @@ -90,6 +90,9 @@ if create_composite: """) con_init.commit() print(f"Successfully created composite index: {index_name}") + except turso.ProgrammingError as e: + print(f"Table/column might have been dropped in parallel: {e}") + con.rollback() except turso.OperationalError as e: print(f"Failed to create composite index: {e}") con.rollback() @@ -137,6 +140,9 @@ else: """) con_init.commit() print(f"Successfully created {idx_type} index: {index_name}") + except turso.ProgrammingError as e: + print(f"Table/column might have been dropped in parallel: {e}") + con.rollback() except turso.OperationalError as e: print(f"Failed to create index: {e}") con.rollback() diff --git a/antithesis-tests/stress-composer/parallel_driver_delete.py b/antithesis-tests/stress-composer/parallel_driver_delete.py index 951cffd62..7f32e816f 100755 --- a/antithesis-tests/stress-composer/parallel_driver_delete.py +++ b/antithesis-tests/stress-composer/parallel_driver_delete.py @@ -48,6 +48,10 @@ for i in range(deletions): cur.execute(f""" DELETE FROM tbl_{selected_tbl} WHERE {where_clause} """) + except turso.ProgrammingError: + # Table/column might have been dropped in parallel - this is expected + con.rollback() + break except turso.OperationalError: con.rollback() # Re-raise other operational errors diff --git a/antithesis-tests/stress-composer/parallel_driver_drop_index.py b/antithesis-tests/stress-composer/parallel_driver_drop_index.py index 2033b4e5e..031aa0509 100755 --- a/antithesis-tests/stress-composer/parallel_driver_drop_index.py +++ b/antithesis-tests/stress-composer/parallel_driver_drop_index.py @@ -55,11 +55,13 @@ try: con_init.commit() print(f"Successfully dropped index: {index_name}") +except turso.ProgrammingError as e: + print(f"Index {index_name} already dropped in parallel: {e}") + con.rollback() except turso.OperationalError as e: print(f"Failed to drop index: {e}") con.rollback() except Exception as e: - # Handle case where index might not exist in indexes table print(f"Warning: Could not remove index from metadata: {e}") con.commit() diff --git a/antithesis-tests/stress-composer/parallel_driver_drop_table.py b/antithesis-tests/stress-composer/parallel_driver_drop_table.py index d065d7442..dea33ee42 100755 --- a/antithesis-tests/stress-composer/parallel_driver_drop_table.py +++ b/antithesis-tests/stress-composer/parallel_driver_drop_table.py @@ -31,9 +31,14 @@ except Exception as e: cur = con.cursor() -cur.execute(f"DROP TABLE tbl_{selected_tbl}") - -con.commit() +try: + cur.execute(f"DROP TABLE tbl_{selected_tbl}") + con.commit() + print(f"Successfully dropped table tbl_{selected_tbl}") +except turso.ProgrammingError as e: + # Table might have been dropped in parallel - this is expected + print(f"Table tbl_{selected_tbl} already dropped in parallel: {e}") + con.rollback() con.close() diff --git a/antithesis-tests/stress-composer/parallel_driver_insert.py b/antithesis-tests/stress-composer/parallel_driver_insert.py index 707ec58a6..50079094b 100755 --- a/antithesis-tests/stress-composer/parallel_driver_insert.py +++ b/antithesis-tests/stress-composer/parallel_driver_insert.py @@ -46,6 +46,10 @@ for i in range(insertions): INSERT INTO tbl_{selected_tbl} ({cols}) VALUES ({", ".join(values)}) """) + except turso.ProgrammingError: + # Table/column might have been dropped in parallel - this is expected + con.rollback() + break except turso.OperationalError as e: if "UNIQUE constraint failed" in str(e): # Ignore UNIQUE constraint violations diff --git a/antithesis-tests/stress-composer/parallel_driver_rollback.py b/antithesis-tests/stress-composer/parallel_driver_rollback.py index 862da43e1..30435b55b 100755 --- a/antithesis-tests/stress-composer/parallel_driver_rollback.py +++ b/antithesis-tests/stress-composer/parallel_driver_rollback.py @@ -46,6 +46,10 @@ for i in range(insertions): INSERT INTO tbl_{selected_tbl} ({cols}) VALUES ({", ".join(values)}) """) + except turso.ProgrammingError: + # Table/column might have been dropped in parallel - this is expected + con.rollback() + break except turso.OperationalError as e: if "UNIQUE constraint failed" in str(e): # Ignore UNIQUE constraint violations diff --git a/antithesis-tests/stress-composer/parallel_driver_schema_rollback.py b/antithesis-tests/stress-composer/parallel_driver_schema_rollback.py index 62ad68e96..5243ce5b8 100755 --- a/antithesis-tests/stress-composer/parallel_driver_schema_rollback.py +++ b/antithesis-tests/stress-composer/parallel_driver_schema_rollback.py @@ -35,25 +35,36 @@ except Exception as e: exit(0) cur = con.cursor() -cur.execute("SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = '" + tbl_name + "'") -result = cur.fetchone() +try: + cur.execute("SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = '" + tbl_name + "'") -if result is None: - print(f"Table {tbl_name} not found") + result = cur.fetchone() + + if result is None: + print(f"Table {tbl_name} not found") + exit(0) + else: + schema_before = result[0] + + cur.execute("BEGIN TRANSACTION") + + cur.execute("ALTER TABLE " + tbl_name + " RENAME TO " + tbl_name + "_old") + + con.rollback() + + cur = con.cursor() + cur.execute("SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = '" + tbl_name + "'") + + result_after = cur.fetchone() + if result_after is None: + print(f"Table {tbl_name} dropped in parallel after rollback") + exit(0) + + schema_after = result_after[0] + + always(schema_before == schema_after, "schema should be the same after rollback", {}) +except turso.ProgrammingError as e: + print(f"Table {tbl_name} dropped in parallel: {e}") + con.rollback() exit(0) -else: - schema_before = result[0] - -cur.execute("BEGIN TRANSACTION") - -cur.execute("ALTER TABLE " + tbl_name + " RENAME TO " + tbl_name + "_old") - -con.rollback() - -cur = con.cursor() -cur.execute("SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = '" + tbl_name + "'") - -schema_after = cur.fetchone()[0] - -always(schema_before == schema_after, "schema should be the same after rollback", {}) diff --git a/antithesis-tests/stress-composer/parallel_driver_update.py b/antithesis-tests/stress-composer/parallel_driver_update.py index 9288b7287..d4c916bdb 100755 --- a/antithesis-tests/stress-composer/parallel_driver_update.py +++ b/antithesis-tests/stress-composer/parallel_driver_update.py @@ -60,6 +60,10 @@ for i in range(updates): cur.execute(f""" UPDATE tbl_{selected_tbl} SET {set_clause} WHERE {where_clause} """) + except turso.ProgrammingError: + # Table/column might have been dropped in parallel - this is expected + con.rollback() + break except turso.OperationalError as e: if "UNIQUE constraint failed" in str(e): # Ignore UNIQUE constraint violations