Changeset: 752ccffdb10c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/752ccffdb10c Modified Files: gdk/ChangeLog.Jan2022 monetdb5/modules/atoms/str.c sql/ChangeLog.Jan2022 sql/storage/objectset.c sql/storage/store.c sql/test/BugTracker-2021/Tests/concurrent-add-column.Bug-7196.SQL.py Branch: Jan2022 Log Message:
Merge with Jul2021 branch. diffs (95 lines): diff --git a/gdk/ChangeLog.Jan2022 b/gdk/ChangeLog.Jan2022 --- a/gdk/ChangeLog.Jan2022 +++ b/gdk/ChangeLog.Jan2022 @@ -1,6 +1,13 @@ # ChangeLog file for GDK # This file is updated with Maddlog +* Mon Feb 13 2023 Sjoerd Mullender <sjo...@acm.org> +- When saving a bat failed for some reason during a low-level commit, + this was logged in the log file, but the error was then subsequently + ignored, possibly leading to files that are too short or even missing. +- The write-ahead log (WAL) is now rotated a bit more efficiently by + doing multiple log files in one go (i.e. in one low-level transaction). + * Mon Jan 16 2023 Sjoerd Mullender <sjo...@acm.org> - Fixed a race condition that could lead to a bat being added to the SQL catalog but nog being made persistent, causing a subsequent restart diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c --- a/monetdb5/modules/atoms/str.c +++ b/monetdb5/modules/atoms/str.c @@ -3205,7 +3205,10 @@ str_case_hash_lock(bool upper) if (BAThash(b) != GDK_SUCCEED) throw(MAL, "str.str_case_hash_lock", GDK_EXCEPTION); MT_rwlock_rdlock(&b->thashlock); - return MAL_SUCCEED; + if (b->thash) + return MAL_SUCCEED; + MT_rwlock_rdunlock(&b->thashlock); + throw(MAL, "str.str_case_hash_lock", "Lost hash"); } void diff --git a/sql/ChangeLog.Jan2022 b/sql/ChangeLog.Jan2022 --- a/sql/ChangeLog.Jan2022 +++ b/sql/ChangeLog.Jan2022 @@ -1,6 +1,10 @@ # ChangeLog file for sql # This file is updated with Maddlog +* Mon Feb 13 2023 Sjoerd Mullender <sjo...@acm.org> +- An insert into a table from which a column was dropped in a parallel + transaction was incorrectly not flagged as a transaction conflict. + * Fri Dec 16 2022 Sjoerd Mullender <sjo...@acm.org> - Added some error checking to prevent crashes. Errors would mainly occur under memory pressure. diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c --- a/sql/storage/objectset.c +++ b/sql/storage/objectset.c @@ -135,9 +135,9 @@ find_id(objectset *os, sqlid id) return n; } } + unlock_reader(os); } - unlock_reader(os); return NULL; } diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -6073,6 +6073,8 @@ sql_trans_drop_column(sql_trans *tr, sql if (!isNew(col) && (res = sql_trans_add_dependency_change(tr, col->t->base.id, ddl))) return res; + if (!isNew(col) && isGlobal(col->t) && !isGlobalTemp(col->t) && (res = sql_trans_add_dependency(tr, col->t->base.id, dml))) + return res; if ((res = sys_drop_column(tr, col, drop_action))) return res; @@ -6667,6 +6669,10 @@ sql_trans_drop_idx(sql_trans *tr, sql_sc list_append(tr->dropped, local_id); } + if (!isNew(i) && (res = sql_trans_add_dependency_change(tr, i->t->base.id, ddl))) + return res; + if (!isNew(i) && isGlobal(i->t) && !isGlobalTemp(i->t) && (res = sql_trans_add_dependency(tr, i->t->base.id, dml))) + return res; if ((res = sys_drop_idx(tr, i, drop_action))) return res; if ((res = store_reset_sql_functions(tr, i->t->base.id))) /* reset sql functions depending on the table */ diff --git a/sql/test/BugTracker-2021/Tests/concurrent-add-column.Bug-7196.SQL.py b/sql/test/BugTracker-2021/Tests/concurrent-add-column.Bug-7196.SQL.py --- a/sql/test/BugTracker-2021/Tests/concurrent-add-column.Bug-7196.SQL.py +++ b/sql/test/BugTracker-2021/Tests/concurrent-add-column.Bug-7196.SQL.py @@ -22,7 +22,7 @@ with SQLTestCase() as mdb1: mdb1.execute('alter table test drop column data;').assertSucceeded() mdb2.execute("insert into test values (3,4);").assertSucceeded() mdb1.execute('commit;').assertSucceeded() - mdb2.execute('commit;').assertSucceeded() + mdb2.execute('commit;').assertFailed(err_code="40001", err_message="COMMIT: transaction is aborted because of concurrency conflicts, will ROLLBACK instead") mdb1.execute('select * from test;').assertSucceeded().assertDataResultMatch([(1,),(3,)]) mdb2.execute('select * from test;').assertSucceeded().assertDataResultMatch([(1,),(3,)]) _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org