Changeset: f5514a22cc45 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f5514a22cc45
Modified Files:
sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py
sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py
Branch: Jul2021
Log Message:
Make sure subprocess is always terminated and delete tables in a single
transaction
diffs (114 lines):
diff --git a/sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py
b/sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py
--- a/sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py
+++ b/sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py
@@ -8,11 +8,10 @@ def freeport():
sock.close()
return port
-def wait_server_to_start(port):
+def wait_server_to_start(port, mserver_process):
started = False
mserver_process.poll()
if mserver_process.returncode is not None:
- mserver_process.wait()
raise Exception("The server terminated early")
retry = 0
while retry < 3:
@@ -28,26 +27,33 @@ def wait_server_to_start(port):
if not started:
raise Exception("The server did not start?")
-prt = freeport()
-cmd = ['mserver5', '--in-memory', '--set', 'mapi_port=%d' % (prt,)]
-mserver_process = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
-wait_server_to_start(prt)
-with SQLTestCase() as mdb:
- mdb.connect(database=None, port=prt, username="monetdb",
password="monetdb")
- mdb.execute("""
- start transaction;
- create table iwontpersist (mycol int);
- insert into iwontpersist values (1);
- commit;
- """).assertSucceeded()
- mdb.execute('SELECT mycol FROM
iwontpersist;').assertDataResultMatch([(1,)])
-mserver_process.terminate()
+mserver_process1 = None
+mserver_process2 = None
-prt = freeport()
-cmd = ['mserver5', '--in-memory', '--set', 'mapi_port=%d' % (prt,)]
-mserver_process = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
-wait_server_to_start(prt)
-with SQLTestCase() as mdb:
- mdb.connect(database=None, port=prt, username="monetdb",
password="monetdb")
- mdb.execute('SELECT mycol FROM
iwontpersist;').assertFailed(err_code="42S02", err_message="SELECT: no such
table 'iwontpersist'")
-mserver_process.terminate()
+try:
+ prt1 = freeport()
+ cmd = ['mserver5', '--in-memory', '--set', 'mapi_port=%d' % (prt1,)]
+ mserver_process1 = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
+ wait_server_to_start(prt1, mserver_process1)
+ with SQLTestCase() as mdb:
+ mdb.connect(database=None, port=prt1, username="monetdb",
password="monetdb")
+ mdb.execute("""
+ start transaction;
+ create table iwontpersist (mycol int);
+ insert into iwontpersist values (1);
+ commit;
+ """).assertSucceeded()
+ mdb.execute('SELECT mycol FROM
iwontpersist;').assertDataResultMatch([(1,)])
+
+ prt2 = freeport()
+ cmd = ['mserver5', '--in-memory', '--set', 'mapi_port=%d' % (prt2,)]
+ mserver_process2 = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
+ wait_server_to_start(prt2, mserver_process2)
+ with SQLTestCase() as mdb:
+ mdb.connect(database=None, port=prt2, username="monetdb",
password="monetdb")
+ mdb.execute('SELECT mycol FROM
iwontpersist;').assertFailed(err_code="42S02", err_message="SELECT: no such
table 'iwontpersist'")
+finally:
+ if mserver_process1 is not None:
+ mserver_process1.terminate()
+ if mserver_process2 is not None:
+ mserver_process2.terminate()
diff --git a/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py
b/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py
--- a/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py
+++ b/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py
@@ -74,10 +74,12 @@ with SQLTestCase() as mdb1:
mdb2.execute("ALTER TABLE parent ADD TABLE
child2;").assertFailed(err_code="42000", err_message="ALTER TABLE: transaction
conflict detected")
mdb1.execute('commit;').assertSucceeded()
mdb2.execute('rollback;').assertSucceeded()
+ mdb1.execute('start transaction;').assertSucceeded()
mdb1.execute('ALTER TABLE parent DROP TABLE child1;').assertSucceeded()
mdb1.execute('DROP TABLE parent;').assertSucceeded()
mdb1.execute('DROP TABLE child1;').assertSucceeded()
mdb1.execute('DROP TABLE child2;').assertSucceeded()
+ mdb1.execute('commit;').assertSucceeded()
mdb1.execute('create merge table parent(a int) PARTITION BY RANGE ON
(a);').assertSucceeded()
mdb1.execute('create table child1(c int);').assertSucceeded()
@@ -88,10 +90,12 @@ with SQLTestCase() as mdb1:
mdb2.execute("ALTER TABLE parent ADD TABLE child2 AS PARTITION FROM
'0' TO '4';").assertFailed(err_code="42000", err_message="ALTER TABLE: failed
due to conflict with another transaction")
mdb1.execute('commit;').assertSucceeded()
mdb2.execute('rollback;').assertSucceeded()
+ mdb1.execute('start transaction;').assertSucceeded()
mdb1.execute('ALTER TABLE parent DROP TABLE child1;').assertSucceeded()
mdb1.execute('DROP TABLE parent;').assertSucceeded()
mdb1.execute('DROP TABLE child1;').assertSucceeded()
mdb1.execute('DROP TABLE child2;').assertSucceeded()
+ mdb1.execute('commit;').assertSucceeded()
mdb1.execute('create merge table parent1(a int) PARTITION BY RANGE ON
(a);').assertSucceeded()
mdb1.execute('create merge table parent2(a int) PARTITION BY RANGE ON
(a);').assertSucceeded()
@@ -102,10 +106,12 @@ with SQLTestCase() as mdb1:
mdb2.execute("ALTER TABLE parent2 ADD TABLE child AS PARTITION FROM
'0' TO '4';").assertFailed(err_code="42000", err_message="ALTER TABLE: failed
due to conflict with another transaction")
mdb1.execute('commit;').assertSucceeded()
mdb2.execute('rollback;').assertSucceeded()
+ mdb1.execute('start transaction;').assertSucceeded()
mdb1.execute('ALTER TABLE parent1 DROP TABLE child;').assertSucceeded()
mdb1.execute('DROP TABLE parent1;').assertSucceeded()
mdb1.execute('DROP TABLE parent2;').assertSucceeded()
mdb1.execute('DROP TABLE child;').assertSucceeded()
+ mdb1.execute('commit;').assertSucceeded()
mdb1.execute('start transaction;').assertSucceeded()
mdb2.execute('start transaction;').assertSucceeded()
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list