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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list