Changeset: 8ff51f388618 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8ff51f388618
Modified Files:
        monetdb5/mal/mal.c
        monetdb5/mal/mal.h
        sql/backends/monet5/cquery.mal
        sql/backends/monet5/sql_basket.c
        sql/backends/monet5/sql_basket.h
        sql/backends/monet5/sql_cquery.c
        sql/backends/monet5/sql_cquery.h
Branch: trails
Log Message:

Shut down Timetrails scheduler and free the Petri-net  while mserver shuts down 
as well


diffs (232 lines):

diff --git a/monetdb5/mal/mal.c b/monetdb5/mal/mal.c
--- a/monetdb5/mal/mal.c
+++ b/monetdb5/mal/mal.c
@@ -15,6 +15,7 @@ size_t        monet_memory = 0;
 char   monet_characteristics[PATHLENGTH];
 int            mal_trace;              /* enable profile events on console */
 str     mal_session_uuid;   /* unique marker for the session */
+void   (*cq_close)(void) = NULL;
 
 #ifdef HAVE_HGE
 int have_hge;
@@ -123,6 +124,9 @@ void mserver_reset(int exit)
 {
        str err = 0;
 
+       if(cq_close) {
+               cq_close();
+       }
        GDKprepareExit();
        WLCreset();
        MCstopClients(0);
diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h
--- a/monetdb5/mal/mal.h
+++ b/monetdb5/mal/mal.h
@@ -53,6 +53,7 @@ mal_export lng                memorypool;      /* mem
 mal_export int                 memoryclaims;    /* number of threads active 
with expensive operations */
 mal_export int         mal_trace;              /* enable profile events on 
console */
 mal_export str         mal_session_uuid;       /* unique marker for the 
session */
+mal_export void                (*cq_close)(void);      /* Sorry but for now we 
need this for timetrails */
 #ifdef HAVE_HGE
 mal_export int have_hge;
 #endif
diff --git a/sql/backends/monet5/cquery.mal b/sql/backends/monet5/cquery.mal
--- a/sql/backends/monet5/cquery.mal
+++ b/sql/backends/monet5/cquery.mal
@@ -103,6 +103,3 @@ comment "Show the status of the query sc
 command prelude() :void
 address CQprelude;
 cquery.prelude();
-
-command epilogue() :void
-address CQepilogue;
diff --git a/sql/backends/monet5/sql_basket.c b/sql/backends/monet5/sql_basket.c
--- a/sql/backends/monet5/sql_basket.c
+++ b/sql/backends/monet5/sql_basket.c
@@ -792,6 +792,21 @@ wrapup:
        throw(SQL, "basket.status", MAL_MALLOC_FAIL);
 }
 
+void
+BSKTshutdown(void)
+{
+       int i;
+       if(baskets) {
+               for(i = 1 ; i < bsktTop ; i++) {
+                       BSKTclean(i);
+               }
+               GDKfree(baskets);
+               baskets = NULL;
+       }
+       bsktLimit = MAXBSKT;
+       bsktTop = 1;
+}
+
 str
 BSKTprelude(void *ret)
 {
@@ -803,14 +818,3 @@ BSKTprelude(void *ret)
                throw(MAL, "basket.prelude", MAL_MALLOC_FAIL);
        return MAL_SUCCEED;
 }
-
-str
-BSKTshutdown(void)
-{
-       if(baskets)
-               GDKfree(baskets);
-       baskets = NULL;
-       bsktLimit = MAXBSKT;
-       bsktTop = 1;
-       return MAL_SUCCEED;
-}
diff --git a/sql/backends/monet5/sql_basket.h b/sql/backends/monet5/sql_basket.h
--- a/sql/backends/monet5/sql_basket.h
+++ b/sql/backends/monet5/sql_basket.h
@@ -74,6 +74,6 @@ sql5_export str BSKTlock(Client cntxt, M
 sql5_export str BSKTunlock(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 
 sql5_export str BSKTdump(void *ret);
+sql5_export void BSKTshutdown(void);
 sql5_export str BSKTprelude(void *ret);
-sql5_export str BSKTshutdown(void);
 #endif
diff --git a/sql/backends/monet5/sql_cquery.c b/sql/backends/monet5/sql_cquery.c
--- a/sql/backends/monet5/sql_cquery.c
+++ b/sql/backends/monet5/sql_cquery.c
@@ -50,11 +50,15 @@
 #include "mal_builder.h"
 #include "opt_prelude.h"
 
+extern void (*cq_close)(void);
+
 static str statusname[7] = { "init", "register", "readytorun", "running", 
"waiting", "paused", "stopping"};
 
 static str CQstartScheduler(void);
 static int CQinit;
-static int pnstatus;
+static int pnstatus = CQINIT;
+static int cycleDelay = 200; /* be careful, it affects response/throughput 
timings */
+static MT_Lock ttrLock;
 
 static BAT *CQ_id_tick = 0;
 static BAT *CQ_id_mod = 0;
@@ -66,10 +70,6 @@ static BAT *CQ_id_stmt = 0;
 CQnode *pnet;
 int pnetLimit, pnettop;
 
-static int pnstatus = CQINIT;
-static int cycleDelay = 200; /* be careful, it affects response/throughput 
timings */
-MT_Lock ttrLock;
-
 #define SET_HEARTBEATS(X) (X != NO_HEARTBEAT) ? X * 1000 : NO_HEARTBEAT /* 
minimal 1 ms */
 
 #define ALL_ROOT_CHECK(cntxt, malcal, name)                                    
                       \
@@ -687,10 +687,8 @@ CQregister(Client cntxt, MalBlkPtr mb, M
                msg = createException(SQL,"cquery.register","Cannot find 
procedure %s.%s.\n",
                getModuleId(sig), getFunctionId(sig));
                goto unlock;
-       } else
-               msg = CQanalysis(cntxt, s->def, pnettop);
-       if( msg != MAL_SUCCEED) {
-               CQfree(pnettop); // restore the entry
+       }
+       if((msg = CQanalysis(cntxt, s->def, pnettop)) != MAL_SUCCEED) {
                goto unlock;
        }
        if(heartbeats != NO_HEARTBEAT) {
@@ -803,7 +801,7 @@ CQresumeInternal(Client cntxt, MalBlkPtr
 
        MT_lock_set(&ttrLock);
 
-       if(CQlocateMb(mb, &idx, &mb2str, "cquery.resume") != MAL_SUCCEED) {
+       if((msg = CQlocateMb(mb, &idx, &mb2str, "cquery.resume")) != 
MAL_SUCCEED) {
                goto unlock;
        }
        if( idx == pnettop) {
@@ -927,7 +925,7 @@ CQpauseInternal(MalBlkPtr mb)
        str msg = MAL_SUCCEED, mb2str = NULL;
 
        MT_lock_set(&ttrLock);
-       if(CQlocateMb(mb, &idx, &mb2str, "cquery.pause") != MAL_SUCCEED) {
+       if((msg = CQlocateMb(mb, &idx, &mb2str, "cquery.pause")) != 
MAL_SUCCEED) {
                goto finish;
        }
        if( idx == pnettop) {
@@ -1123,7 +1121,7 @@ CQderegisterInternal(MalBlkPtr mb)
        str msg = MAL_SUCCEED, mb2str = NULL;
 
        MT_lock_set(&ttrLock);
-       if(CQlocateMb(mb, &idx, &mb2str, "cquery.deregister") != MAL_SUCCEED) {
+       if((msg = CQlocateMb(mb, &idx, &mb2str, "cquery.deregister")) != 
MAL_SUCCEED) {
                goto finish;
        }
        if(idx == pnettop) {
@@ -1521,10 +1519,22 @@ CQstartScheduler(void)
                //MCcloseClient(cntxt); check this
                throw(MAL, "cquery.startScheduler", "Could not initialize 
client thread in CQscheduler");
        }
-       (void) pid;
        return MAL_SUCCEED;
 }
 
+void
+CQreset(void)
+{
+       if(pnet) {
+               CQderegisterAll(NULL, NULL, NULL, NULL); //stop all continuous 
queries
+               GDKfree(pnet);
+       }
+       pnet = NULL;
+       MT_lock_destroy(&ttrLock);
+       (void) BSKTshutdown(); //this must be last!!
+       cq_close = NULL; //avoid a second call!
+}
+
 str
 CQprelude(void *ret)
 {
@@ -1535,21 +1545,7 @@ CQprelude(void *ret)
        pnettop = 0;
        if(pnet == NULL)
                throw(MAL, "cquery.prelude", MAL_MALLOC_FAIL);
+       cq_close = CQreset;
        printf("# MonetDB/Timetrails module loaded\n");
        return MAL_SUCCEED;
 }
-
-str
-CQepilogue(void *ret)
-{
-       (void) ret;
-       CQderegisterAll(NULL, NULL, NULL, NULL); //stop all continuous queries
-       if(pnet)
-               GDKfree(pnet);
-       pnet = NULL;
-       pnetLimit = MAXBSKT;
-       pnettop = 1;
-       MT_lock_destroy(&ttrLock);
-       (void) BSKTshutdown(); //this must be last!!
-       return MAL_SUCCEED;
-}
diff --git a/sql/backends/monet5/sql_cquery.h b/sql/backends/monet5/sql_cquery.h
--- a/sql/backends/monet5/sql_cquery.h
+++ b/sql/backends/monet5/sql_cquery.h
@@ -63,7 +63,6 @@ typedef struct {
 
 sql5_export CQnode *pnet;
 sql5_export int pnetLimit, pnettop;
-sql5_export MT_Lock ttrLock;
 
 sql5_export int CQlocateExternal(str modname, str fcnname);
 //sql5_export int CQlocateBasketExternal(str schname, str tblname);
@@ -85,7 +84,8 @@ sql5_export str CQerror(Client cntxt, Ma
 sql5_export str CQshow(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str CQstatus(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str CQlog(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
+
 sql5_export str CQdump(void *ret);
+sql5_export void CQreset(void);
 sql5_export str CQprelude(void *ret);
-sql5_export str CQepilogue(void *ret);
 #endif
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to