Changeset: 912d82b6a114 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/912d82b6a114 Branch: binresultset Log Message:
merged with default diffs (189 lines): diff --git a/monetdb5/mal/mal_dataflow.c b/monetdb5/mal/mal_dataflow.c --- a/monetdb5/mal/mal_dataflow.c +++ b/monetdb5/mal/mal_dataflow.c @@ -236,7 +236,6 @@ static FlowEvent q_dequeue(Queue *q, Client cntxt) { FlowEvent r = NULL, s = NULL; - //int i; assert(q); MT_sema_down(&q->s); diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c --- a/monetdb5/mal/mal_runtime.c +++ b/monetdb5/mal/mal_runtime.c @@ -281,7 +281,10 @@ runtimeProfileFinish(Client cntxt, MalBl MT_lock_set(&mal_delayLock); for (i = 0; i < qsize; i++) { if (QRYqueue[i].stk == stk) { - QRYqueue[i].status = "finished"; + if (QRYqueue[i].status[0] == 's') + QRYqueue[i].status = "aborted"; + else + QRYqueue[i].status = "finished"; QRYqueue[i].finished = time(0); QRYqueue[i].workers = (int) ATOMIC_GET(&mb->workers); /* give the MB upperbound by addition of 1 MB */ diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h --- a/sql/storage/sql_storage.h +++ b/sql/storage/sql_storage.h @@ -480,11 +480,6 @@ typedef struct sqlstore { int catalog_version; /* software version of the catalog */ sql_catalog *cat; /* the catalog of persistent tables (what to do with tmp tables ?) */ sql_schema *tmp; /* keep pointer to default (empty) tmp schema */ - MT_Lock lock; /* lock protecting concurrent writes (not reads, ie use rcu) */ - MT_Lock commit; /* protect transactions, only single commit (one wal writer) */ - MT_Lock flush; /* flush lock protecting concurrent writes (not reads, ie use rcu) */ - MT_Lock table_locks[NR_TABLE_LOCKS]; /* protecting concurrent writes to tables (storage) */ - MT_Lock column_locks[NR_COLUMN_LOCKS]; /* protecting concurrent writes to columns (storage) */ list *active; /* list of running transactions */ ATOMIC_TYPE nr_active; /* count number of transactions */ @@ -513,6 +508,12 @@ typedef struct sqlstore { table_functions table_api; logger_functions logger_api; void *logger; /* space to keep logging structure of storage backend */ + + MT_Lock lock; /* lock protecting concurrent writes (not reads, ie use rcu) */ + MT_Lock commit; /* protect transactions, only single commit (one wal writer) */ + MT_Lock flush; /* flush lock protecting concurrent writes (not reads, ie use rcu) */ + MT_Lock table_locks[NR_TABLE_LOCKS]; /* protecting concurrent writes to tables (storage) */ + MT_Lock column_locks[NR_COLUMN_LOCKS]; /* protecting concurrent writes to columns (storage) */ } sqlstore; typedef enum sql_dependency_change_type { diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -1763,6 +1763,7 @@ bootstrap_create_schema(sql_trans *tr, c } else { base_init(NULL, &s->base, id, true, name); } + s->base.new = store->first; s->auth_id = auth_id; s->owner = owner; s->system = TRUE; diff --git a/sql/test/sysmon/Tests/sys_pause_resume_stop.SQL.py b/sql/test/sysmon/Tests/sys_pause_resume_stop.SQL.py --- a/sql/test/sysmon/Tests/sys_pause_resume_stop.SQL.py +++ b/sql/test/sysmon/Tests/sys_pause_resume_stop.SQL.py @@ -10,8 +10,10 @@ db = os.getenv('TSTDB') init = ''' create schema s1; create user u1 with password \'u1\' name \'u1\' schema s1; + create user u2 with password \'u2\' name \'u2\' schema s1; create or replace function sleep(msecs int) returns int external name alarm.sleep; grant execute on function sleep(int) to u1; + grant execute on function sleep(int) to u2; ''' p_proced = ''' @@ -45,11 +47,19 @@ u1_qry = ''' select sleep(2000); ''' -status = ''' - select status from queue(\'ALL\') where query like \'select sleep%\'; +st_paused = ''' + select status from queue(\'u1\') where query like \'select sleep%\' and status = \'paused\'; ''' -def execute_qry(): +st_aborted = ''' + select status from queue(\'u2\') where query like \'select sleep%\'; + ''' + +st_aborted2 = ''' + select status from queue() where query like \'select sleep%\'; + ''' +# and status = \'aborted\'; +def execute_qry_1(): with SQLTestCase() as client: client.connect(username = 'u1', password = 'u1') try: @@ -58,35 +68,44 @@ def execute_qry(): print(e) exit(1) -with SQLTestCase() as mdb: - mdb.connect(username="monetdb", password="monetdb") - mdb.execute(init).assertSucceeded() - mdb.execute(p_proced).assertSucceeded() - mdb.execute(r_proced).assertSucceeded() - mdb.execute(s_proced).assertSucceeded() +def execute_qry_2(): + with SQLTestCase() as client: + client.connect(username = 'u2', password = 'u2') + try: + client.execute(u1_qry) + client.execute(st_aborted2).assertSucceeded().assertDataResultMatch([('aborted',)]) + except OperationalError as e: + print(e) + exit(1) - client_proc1 = mp.Process(target=execute_qry) - client_proc1.start() +if __name__ == '__main__': + with SQLTestCase() as mdb: + mdb.connect(username="monetdb", password="monetdb") + mdb.execute(init).assertSucceeded() + mdb.execute(p_proced).assertSucceeded() + mdb.execute(r_proced).assertSucceeded() + mdb.execute(s_proced).assertSucceeded() - time.sleep(1) - mdb.execute('call pause_sleep();').assertSucceeded() - mdb.execute(status).assertSucceeded().assertDataResultMatch([('paused',)]) - mdb.execute('call resume_sleep();').assertSucceeded() + client_proc1 = mp.Process(target=execute_qry_1) + client_proc1.start() - client_proc1.join() - - client_proc2 = mp.Process(target=execute_qry) - client_proc2.start() - - time.sleep(1) - mdb.execute('call stop_sleep();').assertSucceeded() - mdb.execute(status).assertSucceeded().assertDataResultMatch([('finished',)]) + time.sleep(1) + mdb.execute('call pause_sleep();').assertSucceeded() + mdb.execute(st_paused).assertSucceeded().assertDataResultMatch([('paused',)]) + mdb.execute('call resume_sleep();').assertSucceeded() + client_proc1.join() - client_proc2.join() + client_proc2 = mp.Process(target=execute_qry_2) + client_proc2.start() + time.sleep(1) + mdb.execute('call stop_sleep();').assertSucceeded() + mdb.execute(st_aborted).assertSucceeded().assertDataResultMatch([('stopping',)]) + client_proc2.join() - mdb.execute('drop function sleep;').assertSucceeded() - mdb.execute('drop procedure pause_sleep;').assertSucceeded() - mdb.execute('drop procedure resume_sleep;').assertSucceeded() - mdb.execute('drop procedure stop_sleep;').assertSucceeded() - mdb.execute('drop user u1;').assertSucceeded() - mdb.execute('drop schema s1;').assertSucceeded() + mdb.execute('drop function sleep;').assertSucceeded() + mdb.execute('drop procedure pause_sleep;').assertSucceeded() + mdb.execute('drop procedure resume_sleep;').assertSucceeded() + mdb.execute('drop procedure stop_sleep;').assertSucceeded() + mdb.execute('drop user u1;').assertSucceeded() + mdb.execute('drop user u2;').assertSucceeded() + mdb.execute('drop schema s1;').assertSucceeded() diff --git a/sql/test/sysmon/Tests/sys_queue_multisessions.SQL.py b/sql/test/sysmon/Tests/sys_queue_multisessions.SQL.py --- a/sql/test/sysmon/Tests/sys_queue_multisessions.SQL.py +++ b/sql/test/sysmon/Tests/sys_queue_multisessions.SQL.py @@ -42,7 +42,7 @@ with SQLTestCase() as mdb: mdb.execute('select username, sessionid from sys.queue(\'ALL\') group by username, sessionid order by sessionid;')\ .assertSucceeded().assertDataResultMatch([('monetdb', 0), ('u1', 1), ('u2', 2)]) - mdb.execute('drop user u1').assertSucceeded() - mdb.execute('drop user u2').assertSucceeded() - mdb.execute('drop role r1').assertSucceeded() - mdb.execute('drop schema s1').assertSucceeded() + mdb.execute('drop user u1;').assertSucceeded() + mdb.execute('drop user u2;').assertSucceeded() + mdb.execute('drop role r1;').assertSucceeded() + mdb.execute('drop schema s1;').assertSucceeded() _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org