Changeset: b2de397c8104 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b2de397c8104 Modified Files: sql/backends/monet5/iot/50_iot.sql sql/backends/monet5/iot/petrinet.c sql/backends/monet5/iot/petrinet.h sql/backends/monet5/iot/petrinet.mal Branch: iot Log Message:
Deregister continuous queries. diffs (112 lines): diff --git a/sql/backends/monet5/iot/50_iot.sql b/sql/backends/monet5/iot/50_iot.sql --- a/sql/backends/monet5/iot/50_iot.sql +++ b/sql/backends/monet5/iot/50_iot.sql @@ -36,6 +36,12 @@ create procedure iot.deactivate("schema" create procedure iot.deactivate() external name iot.deactivate; +create procedure iot.deregister("schema" string, name string) + external name iot.deregister; + +create procedure iot.deregister() + external name iot.deregister; + -- resume with limited the number of scheduler before next pause create procedure iot.cycles(n integer) external name iot.cycles; diff --git a/sql/backends/monet5/iot/petrinet.c b/sql/backends/monet5/iot/petrinet.c --- a/sql/backends/monet5/iot/petrinet.c +++ b/sql/backends/monet5/iot/petrinet.c @@ -160,6 +160,7 @@ PNregisterInternal(Client cntxt, MalBlkP if (i != pnettop) throw(MAL, "petrinet.register", "Duplicate definition of transition"); + memset((void*) (pnet+pnettop), 0, sizeof(PNnode)); pnet[pnettop].modname = GDKstrdup(getModuleId(sig)); pnet[pnettop].fcnname = GDKstrdup(getFunctionId(sig)); snprintf(buf,IDLENGTH,"petri_%d",pnettop); @@ -232,6 +233,46 @@ PNdeactivate(Client cntxt, MalBlkPtr mb, return PNstatus(cntxt, mb, stk, pci, PNREADY); } +/*Remove a specific continuous query from the scheduler */ +str +PNderegister(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ + str modname= NULL; + str fcnname= NULL; + int i; + + (void) cntxt; + (void) mb; + PNdump(&i); + MT_lock_set(&iotLock); + if ( pci->argc == 3){ + modname= *getArgReference_str(stk,pci,1); + fcnname= *getArgReference_str(stk,pci,2); + i = PNlocate(modname,fcnname); + if ( i == pnettop){ + MT_lock_unset(&iotLock); + throw(SQL,"iot.pause","Continuous query not found"); + } + GDKfree(pnet[i].modname); + GDKfree(pnet[i].fcnname); + for( ; i <pnettop-1;i++) + pnet[i]= pnet[i+1]; + memset((void*) (pnet+i), 0, sizeof(PNnode)); + pnettop--; + _DEBUG_PETRINET_ mnstr_printf(PNout, "#scheduler deregistered %s.%s\n", modname,fcnname); + MT_lock_unset(&iotLock); + return MAL_SUCCEED; + } + for ( i = 0; i < pnettop; i++){ + GDKfree(pnet[i].modname); + GDKfree(pnet[i].fcnname); + memset((void*) (pnet+i), 0, sizeof(PNnode)); + } + pnettop = 0; + _DEBUG_PETRINET_ mnstr_printf(PNout, "#scheduler deregistered all\n"); + MT_lock_unset(&iotLock); + return MAL_SUCCEED; +} + str PNcycles(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ _DEBUG_PETRINET_ mnstr_printf(PNout, "#scheduler cycles set \n"); diff --git a/sql/backends/monet5/iot/petrinet.h b/sql/backends/monet5/iot/petrinet.h --- a/sql/backends/monet5/iot/petrinet.h +++ b/sql/backends/monet5/iot/petrinet.h @@ -46,10 +46,10 @@ iot_export str PNregisterInternal(Client cntxt, MalBlkPtr mb); iot_export str PNregister(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +iot_export str PNderegister(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); iot_export str PNactivate(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); iot_export str PNdeactivate(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); iot_export str PNcycles(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -iot_export str PNdrop(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); iot_export str PNdump(void *ret); iot_export str PNperiod(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); diff --git a/sql/backends/monet5/iot/petrinet.mal b/sql/backends/monet5/iot/petrinet.mal --- a/sql/backends/monet5/iot/petrinet.mal +++ b/sql/backends/monet5/iot/petrinet.mal @@ -42,13 +42,13 @@ pattern step(cnt:int) address PNstep comment "Limit number of petrinet steps"; -pattern drop() -address PNdrop -comment "Remove all transitions from the Petri net controller"; +pattern iot.deregister() +address PNderegister +comment "Remove all query from the Petri-net controller"; -pattern drop(mod:str,fcn:str) -address PNdrop -comment "Remove a transitions from the Petri net controller"; +pattern iot.deregister(mod:str,fcn:str) +address PNderegister +comment "Remove a query from the Petri-net controller"; pattern period(t:int) address PNsetCycleDelay _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list