Changeset: a7c5d7216d0f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a7c5d7216d0f
Added Files:
        sql/test/BugTracker-2022/Tests/All
        sql/test/BugTracker-2022/Tests/SingleServer
        sql/test/BugTracker-2022/Tests/transaction-conflict.Bug-7228.test
Modified Files:
        sql/storage/store.c
Branch: Jul2021
Log Message:

Fix for bug #7228 Check for conflict on dependency changes only if dependencies 
committed after the transaction started


diffs (91 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3749,7 +3749,8 @@ transaction_check_dependencies_and_remov
                        for (; he && ok == LOG_OK; he = he->chain) {
                                sql_dependency_change *schange = 
(sql_dependency_change*) he->value;
 
-                               if (lchange->objid == schange->objid && 
lchange->type == schange->type)
+                               /* conflict only if transactions overlap */
+                               if (schange->ts >= tr->ts && lchange->objid == 
schange->objid && lchange->type == schange->type)
                                        ok = LOG_CONFLICT;
                        }
                }
@@ -3763,7 +3764,8 @@ transaction_check_dependencies_and_remov
                        for (; he && ok == LOG_OK; he = he->chain) {
                                sql_dependency_change *schange = 
(sql_dependency_change*) he->value;
 
-                               if (lchange->objid == schange->objid && 
lchange->type == schange->type)
+                               /* conflict only if transactions overlap */
+                               if (schange->ts >= tr->ts && lchange->objid == 
schange->objid && lchange->type == schange->type)
                                        ok = LOG_CONFLICT;
                        }
                }
diff --git a/sql/test/BugTracker-2022/Tests/All 
b/sql/test/BugTracker-2022/Tests/All
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2022/Tests/All
@@ -0,0 +1,1 @@
+transaction-conflict.Bug-7228
diff --git a/sql/test/BugTracker-2022/Tests/SingleServer 
b/sql/test/BugTracker-2022/Tests/SingleServer
new file mode 100644
diff --git a/sql/test/BugTracker-2022/Tests/transaction-conflict.Bug-7228.test 
b/sql/test/BugTracker-2022/Tests/transaction-conflict.Bug-7228.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2022/Tests/transaction-conflict.Bug-7228.test
@@ -0,0 +1,55 @@
+@connection(id=1, username=monetdb, password=monetdb)
+statement ok
+START TRANSACTION
+
+@connection(id=2, username=monetdb, password=monetdb)
+statement ok
+START TRANSACTION
+
+@connection(id=2)
+statement ok
+CREATE TABLE a(s string, i int, b1 bigint)
+
+@connection(id=2)
+statement ok
+COMMIT
+
+@connection(id=2)
+statement ok
+START TRANSACTION
+
+@connection(id=2)
+statement ok
+ALTER TABLE a ADD UNIQUE (s, b1)
+
+@connection(id=2)
+statement ok
+COMMIT
+
+@connection(id=2)
+statement ok
+START TRANSACTION
+
+@connection(id=2)
+statement ok
+CREATE TABLE b(i int)
+
+@connection(id=2)
+statement ok
+UPDATE a SET i = 1
+
+@connection(id=2)
+statement ok
+DROP TABLE b
+
+@connection(id=2)
+statement ok
+COMMIT
+
+@connection(id=2)
+statement ok
+DROP TABLE a
+
+@connection(id=1)
+statement ok
+ROLLBACK
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to