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