Changeset: 867a7bab0c61 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=867a7bab0c61 Modified Files: clients/Tests/exports.stable.out gdk/gdk_bat.c monetdb5/mal/mal.c monetdb5/mal/mal_runtime.c monetdb5/mal/mal_runtime.h sql/test/BugTracker-2014/Tests/All sql/test/BugTracker-2014/Tests/queueError.Bug-3604.stable.out sql/test/BugTracker-2015/Tests/sessions_crash.Bug-3759.stable.out sql/test/BugTracker-2020/Tests/sysqueue.stable.out tools/merovingian/daemon/snapshot.c Branch: scoping Log Message:
Merged with default diffs (truncated from 540 to 300 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -2117,6 +2117,7 @@ str diffcandRef; str differenceRef; str disconnectRef; str divRef; +void dropQRYqueue(void); str drop_constraintRef; str drop_functionRef; str drop_indexRef; diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -2100,7 +2100,7 @@ BATmode(BAT *b, bool transient) #ifdef NDEBUG /* assertions are disabled, turn failing tests into a message */ #undef assert -#define assert(test) ((void) ((test) || TRC_CRITICAL_ENDIF(BAT_, "Assertion `%s' failed\n", #test))) +#define assert(test) ((void) ((test) || (TRC_CRITICAL_ENDIF(BAT_, "Assertion `%s' failed\n", #test), 0))) #endif /* Assert that properties are set correctly. diff --git a/monetdb5/mal/mal.c b/monetdb5/mal/mal.c --- a/monetdb5/mal/mal.c +++ b/monetdb5/mal/mal.c @@ -94,6 +94,7 @@ void mserver_reset(void) GDKprepareExit(); MCstopClients(0); + dropQRYqueue(); setHeartbeat(-1); stopProfiler(0); AUTHreset(); 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 @@ -26,15 +26,15 @@ #include "mal_private.h" -QueryQueue QRYqueue; -lng qsize, qhead, qtail; +QueryQueue QRYqueue = NULL; +lng qsize = 0, qhead = 0, qtail = 0; static oid qtag= 1; // A unique query identifier void mal_runtime_reset(void) { GDKfree(QRYqueue); - QRYqueue = 0; + QRYqueue = NULL; qsize = 0; qtag= 1; qhead = 0; @@ -63,48 +63,71 @@ isaSQLquery(MalBlkPtr mb){ /* clear the next entry for a new call unless it is a running query */ static void +clearQRYqueue(int idx) +{ + QRYqueue[idx].query = 0; + QRYqueue[idx].cntxt = 0; + QRYqueue[idx].username = 0; + QRYqueue[idx].idx = 0; + QRYqueue[idx].memory = 0; + QRYqueue[idx].tag = 0; + QRYqueue[idx].status =0; + QRYqueue[idx].finished = 0; + QRYqueue[idx].start = 0; + QRYqueue[idx].stk =0; + QRYqueue[idx].mb =0; +} + +static void advanceQRYqueue(void) { - for( qhead++; qhead!= qtail; qhead++){ - if( qhead == qsize) - qhead = 0; - if(QRYqueue[qhead].status == 0 || (QRYqueue[qhead].status[0] != 'r' && QRYqueue[qhead].status[0] != 'p')) - break; - } - if( qtail == qsize) - qtail = 0; + qhead++; + if( qhead == qsize) + qhead = 0; if( qtail == qhead) qtail++; + if( qtail == qsize) + qtail = 0; /* clean out the element */ - if( QRYqueue[qhead].query){ - GDKfree(QRYqueue[qhead].query); + str s = QRYqueue[qhead].query; + if( s){ + /* don;t wipe them when they are still running, prepared, or paused */ + /* The upper layer has assured there is at least one slot available */ + if(QRYqueue[qhead].status == 0 || (QRYqueue[qhead].status[0] != 'r' && QRYqueue[qhead].status[0] != 'p')) + return advanceQRYqueue(); + GDKfree(s); GDKfree(QRYqueue[qhead].username); - QRYqueue[qhead].cntxt = 0; - QRYqueue[qhead].username = 0; - QRYqueue[qhead].idx = 0; - QRYqueue[qhead].memory = 0; - QRYqueue[qhead].tag = 0; - QRYqueue[qhead].query = 0; - QRYqueue[qhead].status =0; - QRYqueue[qhead].finished = 0; - QRYqueue[qhead].start = 0; - QRYqueue[qhead].stk =0; - QRYqueue[qhead].mb =0; + clearQRYqueue(qhead); } } void +dropQRYqueue(void) +{ + int i; + MT_lock_set(&mal_delayLock); + for(i = 0; i < qsize; i++){ + if( QRYqueue[i].query) + GDKfree(QRYqueue[i].query); + if(QRYqueue[i].username) + GDKfree(QRYqueue[i].username); + } + GDKfree(QRYqueue); + QRYqueue = NULL; + MT_lock_unset(&mal_delayLock); +} + +void runtimeProfileInit(Client cntxt, MalBlkPtr mb, MalStkPtr stk) { lng i, paused = 0; str q; QueryQueue tmp; - return; MT_lock_set(&mal_delayLock); tmp = QRYqueue; - if ( QRYqueue == 0) - QRYqueue = (QueryQueue) GDKzalloc( sizeof (struct QRYQUEUE) * (size_t) (qsize= 5)); /* for testing */ + if ( QRYqueue == NULL) + QRYqueue = (QueryQueue) GDKzalloc( sizeof (struct QRYQUEUE) * (qsize= 8)); /* for testing */ if ( QRYqueue == NULL){ addMalException(mb,"runtimeProfileInit" MAL_MALLOC_FAIL); @@ -125,16 +148,21 @@ runtimeProfileInit(Client cntxt, MalBlkP MT_lock_unset(&mal_delayLock); return; } - paused += QRYqueue[i].status[0] == 'p'; /* prepared or paused */ + if ( QRYqueue[i].status) + paused += (QRYqueue[i].status[0] == 'p' || QRYqueue[i].status[0] == 'r'); /* running, prepared or paused */ } + assert(qhead < qsize); if( qsize - paused < MAL_MAXCLIENTS){ - QRYqueue = (QueryQueue) GDKrealloc( QRYqueue, sizeof (struct QRYQUEUE) * (size_t) (qsize += MAL_MAXCLIENTS)); + qsize += MAL_MAXCLIENTS; + QRYqueue = (QueryQueue) GDKrealloc( QRYqueue, sizeof (struct QRYQUEUE) * qsize); if ( QRYqueue == NULL){ addMalException(mb,"runtimeProfileInit" MAL_MALLOC_FAIL); GDKfree(tmp); MT_lock_unset(&mal_delayLock); return; } + for(i = qsize - MAL_MAXCLIENTS; i < qsize; i++) + clearQRYqueue(i); } // add new invocation @@ -168,7 +196,6 @@ runtimeProfileFinish(Client cntxt, MalBl (void) cntxt; (void) mb; - return; MT_lock_set(&mal_delayLock); for( i=qtail; i != qhead; i++){ if ( i >= qsize){ @@ -179,8 +206,7 @@ runtimeProfileFinish(Client cntxt, MalBl // recursive call QRYqueue[i].stk = stk->up; mb->tag = stk->tag; - MT_lock_unset(&mal_delayLock); - return; + break; } QRYqueue[i].status = "finished"; QRYqueue[i].finished = time(0); @@ -189,8 +215,6 @@ runtimeProfileFinish(Client cntxt, MalBl QRYqueue[i].mb = 0; break; } - if( i == qhead) - break; } MT_lock_unset(&mal_delayLock); diff --git a/monetdb5/mal/mal_runtime.h b/monetdb5/mal/mal_runtime.h --- a/monetdb5/mal/mal_runtime.h +++ b/monetdb5/mal/mal_runtime.h @@ -53,6 +53,7 @@ mal_export void runtimeProfileInit(Clien mal_export void runtimeProfileFinish(Client cntxt, MalBlkPtr mb, MalStkPtr stk); mal_export void runtimeProfileBegin(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, RuntimeProfile prof); mal_export void runtimeProfileExit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, RuntimeProfile prof); +mal_export void dropQRYqueue(void); mal_export lng getVolume(MalStkPtr stk, InstrPtr pci, int rd); mal_export lng getBatSpace(BAT *b); diff --git a/sql/test/BugTracker-2014/Tests/All b/sql/test/BugTracker-2014/Tests/All --- a/sql/test/BugTracker-2014/Tests/All +++ b/sql/test/BugTracker-2014/Tests/All @@ -48,7 +48,7 @@ manifold.Bug-3556 duplicate_primary_keys.Bug-3474 copy_decimal_into.Bug-3596 insert_into_temp_table.Bug-3600 -queueError.Bug-3604 +# queueError.Bug-3604 too_general_errmsg.Bug-3605 querylog.Bug-3607 fk-property-assert.Bug-3612 diff --git a/sql/test/BugTracker-2014/Tests/queueError.Bug-3604.stable.out b/sql/test/BugTracker-2014/Tests/queueError.Bug-3604.stable.out --- a/sql/test/BugTracker-2014/Tests/queueError.Bug-3604.stable.out +++ b/sql/test/BugTracker-2014/Tests/queueError.Bug-3604.stable.out @@ -56,7 +56,74 @@ stdout of test 'queueError.Bug-3604` in % .%1, .%1, .%1 # table_name % username, status, query # name % clob, clob, clob # type -% 7, 8, 50 # length +% 7, 8, 139 # length +[ "monetdb", "finished", "rollback;" ] +[ "monetdb", "finished", "set time zone interval \\'+02:00\\' hour to minute\n;" ] +[ "monetdb", "finished", "select locate(\\'@\\',\\'joeuser@mydatabase@test\\', 1) as string_position;" ] +[ "monetdb", "finished", "select locate(\\'@\\',\\'joeuser@mydatabase@test\\', 2) as string_position;" ] +[ "monetdb", "finished", "select locate(\\'@\\',\\'joeuser@mydatabase@test\\', 2) as string_position;" ] +[ "monetdb", "finished", "select locate(\\'@\\',\\'joeuser@mydatabase@test\\', 4) as string_position;" ] +[ "monetdb", "finished", "select locate(\\'@\\',\\'joeuser@mydatabase@test\\', 8) as string_position;" ] +[ "monetdb", "finished", "select locate(\\'@\\',\\'joeuser@mydatabase@test\\', 8) as string_position;" ] +[ "monetdb", "finished", "select locate(\\'@\\',\\'joeuser@mydatabase@test\\', -1) as string_position;" ] +[ "monetdb", "finished", "select locate(\\'@\\',\\'joeuser@mydatabase@test\\', -2) as string_position;" ] +[ "monetdb", "finished", "select locate(\\'@\\',\\'joeuser@mydatabase@test\\', -2) as string_position;" ] +[ "monetdb", "finished", "select locate(\\'@\\',\\'joeuser@mydatabase@test\\', -4) as string_position;" ] +[ "monetdb", "finished", "set time zone interval \\'+02:00\\' hour to minute\n;" ] +[ "monetdb", "finished", "start transaction;" ] +[ "monetdb", "finished", "create table simple_table(\"id\" integer);" ] +[ "monetdb", "finished", "insert into simple_table values (1),(2),(3),(4),(5);" ] +[ "monetdb", "finished", "select count(*) as val from simple_table order by val desc;" ] +[ "monetdb", "finished", "select count(*) as val from simple_table order by val desc limit 5;" ] +[ "monetdb", "finished", "select count(*) as val from simple_table having 1 > 0 order by val desc limit 5;" ] +[ "monetdb", "finished", "rollback;" ] +[ "monetdb", "finished", "set time zone interval \\'+02:00\\' hour to minute\n;" ] +[ "monetdb", "finished", "start transaction;" ] +[ "monetdb", "finished", "create table float8_tbl(f1 double);" ] +[ "monetdb", "finished", "insert into float8_tbl(f1) values (\\' -34.84\\');" ] +[ "monetdb", "finished", "select sign(f1) as sign_f1 from float8_tbl f;" ] +[ "monetdb", "finished", "insert into float8_tbl(f1) values (\\'1.2345678901234e+200\\');" ] +[ "monetdb", "finished", "select sign(f1) as sign_f1 from float8_tbl f;" ] +[ "monetdb", "finished", "rollback;" ] +[ "monetdb", "finished", "set time zone interval \\'+02:00\\' hour to minute\n;" ] +[ "monetdb", "finished", "create table foo_nil_2dec (t timestamp,v decimal(18,9));" ] +[ "monetdb", "finished", "insert into foo_nil_2dec values (timestamp \\'2014-10-05\\',42);" ] +[ "monetdb", "finished", "insert into foo_nil_2dec values (timestamp \\'2014-10-05\\',43);" ] +[ "monetdb", "finished", "select (t-(select timestamp \\'1970-1-1\\')),v from foo_nil_2dec union all select (t-(select timestamp \\'1970-1-1\\')),null from foo_nil_2dec;" ] +[ "monetdb", "finished", "drop table foo_nil_2dec;" ] +[ "monetdb", "finished", "set time zone interval \\'+02:00\\' hour to minute\n;" ] +[ "monetdb", "finished", "set optimizer=\\'sequential_pipe\\';" ] +[ "monetdb", "finished", "set time zone interval \\'+02:00\\' hour to minute\n;" ] +[ "monetdb", "finished", "create table x ( a clob, b clob, c timestamp);" ] +[ "monetdb", "finished", "alter table x add primary key (a,b,c);" ] +[ "monetdb", "finished", "create table y ( a clob, b clob, c timestamp);" ] +[ "monetdb", "finished", "insert into y values (\\'FIAM\\',\\'HHZ\\', \\'2010-04-25T14:00:00.000\\');" ] +[ "monetdb", "finished", "insert into x (select * from y);" ] +[ "monetdb", "finished", "insert into x values (\\'FIAM\\',\\'HHZ\\', \\'2010-04-25T14:00:00.000\\');" ] +[ "monetdb", "finished", "insert into x (select * from y);" ] +[ "monetdb", "finished", "select * from x;" ] +[ "monetdb", "finished", "drop table x;" ] +[ "monetdb", "finished", "drop table y;" ] +[ "monetdb", "finished", "set time zone interval \\'+02:00\\' hour to minute\n;" ] +[ "monetdb", "finished", "create table load_decimals ( n string, d decimal(10,2));" ] +[ "monetdb", "finished", "copy 3 records into load_decimals from stdin using delimiters \\',\\',E\\'\\\\n\\';" ] +[ "monetdb", "finished", "select * from load_decimals;" ] +[ "monetdb", "finished", "drop table load_decimals;" ] +[ "monetdb", "finished", "set time zone interval \\'+02:00\\' hour to minute\n;" ] +[ "monetdb", "finished", "start transaction;" ] +[ "monetdb", "finished", "create temp table foo (f1 string, f2 text, f3 varchar(12345678));" ] +[ "monetdb", "finished", "insert into foo values(\\'aa1\\',\\'bb1\\',\\'cc1\\');" ] +[ "monetdb", "finished", "select * from foo;" ] +[ "monetdb", "finished", "insert into foo values(\\'aa1\\',\\'bb1\\',\\'cc1\\');" ] +[ "monetdb", "finished", "select * from foo;" ] +[ "monetdb", "finished", "insert into foo values(\\'aa1\\',\\'bb1\\',\\'cc1\\');" ] +[ "monetdb", "finished", "select * from foo;" ] +[ "monetdb", "finished", "update foo set f1 = \\'abc\\';" ] +[ "monetdb", "finished", "select * from foo;" ] +[ "monetdb", "finished", "delete from foo where f2 = \\'bb2\\';" ] +[ "monetdb", "finished", "select * from foo;" ] _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list