Changeset: c0cd9b00e365 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c0cd9b00e365
Added Files:
sql/test/mergetables/Tests/transaction-conflict.py
Modified Files:
sql/test/mergetables/Tests/All
Branch: Nov2019
Log Message:
New bug, merge table children list is not cleaned properly after a transaction
rollback
diffs (91 lines):
diff --git a/sql/test/mergetables/Tests/All b/sql/test/mergetables/Tests/All
--- a/sql/test/mergetables/Tests/All
+++ b/sql/test/mergetables/Tests/All
@@ -19,6 +19,7 @@ KNOWNFAIL?singlekeyconstraint
part-elim
mergedropcascade
addtable
+HAVE_PYMONETDB?transaction-conflict
mergedb_create
HAVE_NETCDF&HAVE_SAMTOOLS?mergedb.Bug-6820
diff --git a/sql/test/mergetables/Tests/transaction-conflict.py
b/sql/test/mergetables/Tests/transaction-conflict.py
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/transaction-conflict.py
@@ -0,0 +1,75 @@
+import os
+import sys
+import threading
+import pymonetdb
+
+try:
+ from MonetDBtesting import process
+except ImportError:
+ import process
+
+"""
+Attempt to modify a merge table in a conflicting transaction. After the
rollback, the table's contents must be cleaned
+"""
+
+class MergeTableWriter(threading.Thread):
+ def __init__(self, barrier1, barrier2):
+ self._wconn = pymonetdb.connect(port = int(os.getenv('MAPIPORT',
'50000')), database = os.getenv('TSTDB', 'demo'), hostname =
os.getenv('MAPIHOST', 'localhost'), autocommit=True)
+ self._wcursor = self._wconn.cursor()
+ self._barrier1 = barrier1
+ self._barrier2 = barrier2
+ threading.Thread.__init__(self)
+
+ def run(self):
+ i = 0
+ while i < 3:
+ self._wcursor.execute('START TRANSACTION;')
+ barrier1.wait()
+ self._wcursor.execute('ALTER TABLE "mt" ADD TABLE "part";')
+ self._wcursor.execute('ALTER TABLE "mt" DROP TABLE "part";')
+ barrier2.wait()
+ self._wcursor.execute('ROLLBACK;')
+ i += 1
+
+server = process.server(stdin=process.PIPE, stdout=process.PIPE,
stderr=process.PIPE)
+conn = pymonetdb.connect(port = int(os.getenv('MAPIPORT', '50000')), database
= os.getenv('TSTDB', 'demo'), hostname = os.getenv('MAPIHOST', 'localhost'),
autocommit=True)
+cursor = conn.cursor()
+barrier1 = threading.Barrier(2)
+barrier2 = threading.Barrier(2)
+
+cursor.execute("""
+START TRANSACTION;
+DROP TABLE IF EXISTS "mt";
+DROP TABLE IF EXISTS "part";
+DROP TABLE IF EXISTS "dummy";
+CREATE MERGE TABLE "mt"("col1" int);
+CREATE TABLE "part"("col1" int);
+COMMIT;
+""")
+
+mtwriter = MergeTableWriter(barrier1, barrier2)
+mtwriter.start()
+
+i = 0
+while i < 3:
+ barrier1.wait()
+ cursor.execute('CREATE TABLE "dummy"(col1 int);')
+ cursor.execute('DROP TABLE "dummy";')
+ barrier2.wait()
+ barrier1.reset()
+ barrier2.reset()
+ i += 1
+
+mtwriter.join()
+
+cursor.execute("""
+START TRANSACTION;
+DROP TABLE "mt";
+DROP TABLE "part";
+DROP TABLE "dummy";
+COMMIT;
+""")
+
+sout, serr = server.communicate()
+sys.stdout.write(sout)
+sys.stderr.write(serr)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list