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

Reply via email to