Changeset: 457d5b6012d4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=457d5b6012d4
Modified Files:
sql/backends/monet5/iot/Makefile.am
sql/backends/monet5/iot/Tests/iot04.sql
sql/backends/monet5/iot/Tests/iot14.sql
sql/backends/monet5/iot/petrinet.c
Branch: iot
Log Message:
More defense and debugging
diffs (165 lines):
diff --git a/sql/backends/monet5/iot/Makefile.am
b/sql/backends/monet5/iot/Makefile.am
--- a/sql/backends/monet5/iot/Makefile.am
+++ b/sql/backends/monet5/iot/Makefile.am
@@ -15,7 +15,7 @@ uninstall-local-50_iot.mal:
iot.o iot.lo: iot.c ../sql_optimizer.h ../sql_gencode.h
../../../../monetdb5/optimizer/opt_prelude.h
../../../../monetdb5/optimizer/opt_support.h
../../../../monetdb5/optimizer/../mal/mal.h
../../../../monetdb5/optimizer/../mal/mal_function.h
../../../../monetdb5/optimizer/../mal/mal_scenario.h
../../../../monetdb5/optimizer/../mal/mal_builder.h
../../../../monetdb5/optimizer/opt_pipes.h
../../../../monetdb5/optimizer/opt_iot.h basket.h
../../../../monetdb5/mal/../../gdk/gdk.h ../../../../monetdb5/mal/mal.h
../../../../monetdb5/mal/mal_interpreter.h ../sql.h iot.h
../../../../monetdb5/mal/mal_resolve.h ../../../../monetdb5/mal/mal_profiler.h
../../../../monetdb5/mal/mal_client.h ../sql_scenario.h petrinet.h
petrinet.o petrinet.lo: petrinet.c iot.h
../../../../monetdb5/mal/../../gdk/gdk.h ../../../../monetdb5/mal/mal.h
../../../../monetdb5/mal/mal_interpreter.h
../../../../monetdb5/mal/mal_resolve.h ../../../../monetdb5/mal/mal_profiler.h
../../../../monetdb5/mal/mal_client.h ../sql.h ../sql_scenario.h petrinet.h
basket.h ../../../../monetdb5/mal/mal_builder.h
../../../../monetdb5/optimizer/opt_support.h
../../../../monetdb5/optimizer/../mal/mal.h
../../../../monetdb5/optimizer/../mal/mal_function.h
../../../../monetdb5/optimizer/../mal/mal_scenario.h
../../../../monetdb5/optimizer/../mal/mal_builder.h
../../../../monetdb5/optimizer/opt_prelude.h
-basket.o basket.lo: basket.c ../../../../gdk/gdk.h iot.h
../../../../monetdb5/mal/../../gdk/gdk.h ../../../../monetdb5/mal/mal.h
../../../../monetdb5/mal/mal_interpreter.h
../../../../monetdb5/mal/mal_resolve.h ../../../../monetdb5/mal/mal_profiler.h
../../../../monetdb5/mal/mal_client.h ../sql.h ../sql_scenario.h basket.h
../../../../monetdb5/mal/mal_instruction.h ../../../../monetdb5/mal/mal_type.h
../../../../monetdb5/mal/mal_stack.h ../../../../monetdb5/mal/mal_namespace.h
../../../../monetdb5/mal/mal_errors.h ../../../../monetdb5/mal/mal_exception.h
../../../../monetdb5/mal/mal_builder.h
../../../../monetdb5/optimizer/opt_support.h
../../../../monetdb5/optimizer/../mal/mal.h
../../../../monetdb5/optimizer/../mal/mal_function.h
../../../../monetdb5/optimizer/../mal/mal_scenario.h
../../../../monetdb5/optimizer/../mal/mal_builder.h
../../../../monetdb5/optimizer/opt_prelude.h
+basket.o basket.lo: basket.c ../../../../gdk/gdk.h iot.h
../../../../monetdb5/mal/../../gdk/gdk.h ../../../../monetdb5/mal/mal.h
../../../../monetdb5/mal/mal_interpreter.h
../../../../monetdb5/mal/mal_resolve.h ../../../../monetdb5/mal/mal_profiler.h
../../../../monetdb5/mal/mal_client.h ../sql.h ../sql_scenario.h basket.h
petrinet.h ../../../../monetdb5/mal/mal_instruction.h
../../../../monetdb5/mal/mal_type.h ../../../../monetdb5/mal/mal_stack.h
../../../../monetdb5/mal/mal_namespace.h ../../../../monetdb5/mal/mal_errors.h
../../../../monetdb5/mal/mal_exception.h ../../../../monetdb5/mal/mal_builder.h
../../../../monetdb5/optimizer/opt_support.h
../../../../monetdb5/optimizer/../mal/mal.h
../../../../monetdb5/optimizer/../mal/mal_function.h
../../../../monetdb5/optimizer/../mal/mal_scenario.h
../../../../monetdb5/optimizer/../mal/mal_builder.h
../../../../monetdb5/optimizer/opt_prelude.h
install-exec-local-basket.mal: basket.mal
-mkdir -p $(DESTDIR)$(libdir)/monetdb5
-$(RM) $(DESTDIR)$(libdir)/monetdb5/basket.mal
@@ -55,7 +55,7 @@ lib_iot_la_LIBADD = ../../../../monetdb5
$(do)install-iotLTLIBRARIES :
lib_iot_la-iot.lo: iot.c ../sql_optimizer.h ../sql_gencode.h
../../../../monetdb5/optimizer/opt_prelude.h
../../../../monetdb5/optimizer/opt_support.h
../../../../monetdb5/optimizer/../mal/mal.h
../../../../monetdb5/optimizer/../mal/mal_function.h
../../../../monetdb5/optimizer/../mal/mal_scenario.h
../../../../monetdb5/optimizer/../mal/mal_builder.h
../../../../monetdb5/optimizer/opt_pipes.h
../../../../monetdb5/optimizer/opt_iot.h basket.h
../../../../monetdb5/mal/../../gdk/gdk.h ../../../../monetdb5/mal/mal.h
../../../../monetdb5/mal/mal_interpreter.h ../sql.h iot.h
../../../../monetdb5/mal/mal_resolve.h ../../../../monetdb5/mal/mal_profiler.h
../../../../monetdb5/mal/mal_client.h ../sql_scenario.h petrinet.h
$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES)
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iot_la_CFLAGS) $(CFLAGS)
$(iot_CFLAGS) -c -o lib_iot_la-iot.lo `test -f 'iot.c' || echo
'$(srcdir)/'`iot.c
-lib_iot_la-basket.lo: basket.c ../../../../gdk/gdk.h iot.h
../../../../monetdb5/mal/../../gdk/gdk.h ../../../../monetdb5/mal/mal.h
../../../../monetdb5/mal/mal_interpreter.h
../../../../monetdb5/mal/mal_resolve.h ../../../../monetdb5/mal/mal_profiler.h
../../../../monetdb5/mal/mal_client.h ../sql.h ../sql_scenario.h basket.h
../../../../monetdb5/mal/mal_instruction.h ../../../../monetdb5/mal/mal_type.h
../../../../monetdb5/mal/mal_stack.h ../../../../monetdb5/mal/mal_namespace.h
../../../../monetdb5/mal/mal_errors.h ../../../../monetdb5/mal/mal_exception.h
../../../../monetdb5/mal/mal_builder.h
../../../../monetdb5/optimizer/opt_support.h
../../../../monetdb5/optimizer/../mal/mal.h
../../../../monetdb5/optimizer/../mal/mal_function.h
../../../../monetdb5/optimizer/../mal/mal_scenario.h
../../../../monetdb5/optimizer/../mal/mal_builder.h
../../../../monetdb5/optimizer/opt_prelude.h
+lib_iot_la-basket.lo: basket.c ../../../../gdk/gdk.h iot.h
../../../../monetdb5/mal/../../gdk/gdk.h ../../../../monetdb5/mal/mal.h
../../../../monetdb5/mal/mal_interpreter.h
../../../../monetdb5/mal/mal_resolve.h ../../../../monetdb5/mal/mal_profiler.h
../../../../monetdb5/mal/mal_client.h ../sql.h ../sql_scenario.h basket.h
petrinet.h ../../../../monetdb5/mal/mal_instruction.h
../../../../monetdb5/mal/mal_type.h ../../../../monetdb5/mal/mal_stack.h
../../../../monetdb5/mal/mal_namespace.h ../../../../monetdb5/mal/mal_errors.h
../../../../monetdb5/mal/mal_exception.h ../../../../monetdb5/mal/mal_builder.h
../../../../monetdb5/optimizer/opt_support.h
../../../../monetdb5/optimizer/../mal/mal.h
../../../../monetdb5/optimizer/../mal/mal_function.h
../../../../monetdb5/optimizer/../mal/mal_scenario.h
../../../../monetdb5/optimizer/../mal/mal_builder.h
../../../../monetdb5/optimizer/opt_prelude.h
$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES)
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iot_la_CFLAGS) $(CFLAGS)
$(basket_CFLAGS) -c -o lib_iot_la-basket.lo `test -f 'basket.c' || echo
'$(srcdir)/'`basket.c
lib_iot_la-petrinet.lo: petrinet.c iot.h
../../../../monetdb5/mal/../../gdk/gdk.h ../../../../monetdb5/mal/mal.h
../../../../monetdb5/mal/mal_interpreter.h
../../../../monetdb5/mal/mal_resolve.h ../../../../monetdb5/mal/mal_profiler.h
../../../../monetdb5/mal/mal_client.h ../sql.h ../sql_scenario.h petrinet.h
basket.h ../../../../monetdb5/mal/mal_builder.h
../../../../monetdb5/optimizer/opt_support.h
../../../../monetdb5/optimizer/../mal/mal.h
../../../../monetdb5/optimizer/../mal/mal_function.h
../../../../monetdb5/optimizer/../mal/mal_scenario.h
../../../../monetdb5/optimizer/../mal/mal_builder.h
../../../../monetdb5/optimizer/opt_prelude.h
$(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES)
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_iot_la_CFLAGS) $(CFLAGS)
$(petrinet_CFLAGS) -c -o lib_iot_la-petrinet.lo `test -f 'petrinet.c' || echo
'$(srcdir)/'`petrinet.c
diff --git a/sql/backends/monet5/iot/Tests/iot04.sql
b/sql/backends/monet5/iot/Tests/iot04.sql
--- a/sql/backends/monet5/iot/Tests/iot04.sql
+++ b/sql/backends/monet5/iot/Tests/iot04.sql
@@ -28,6 +28,7 @@ select * from stmp;
call iot.cycles('iot','cq00',2);
call iot.resume();
-- wait for 1 cycle in the scheduler
+call iot.wait(3);
select 'RESULT';
select * from result;
diff --git a/sql/backends/monet5/iot/Tests/iot14.sql
b/sql/backends/monet5/iot/Tests/iot14.sql
--- a/sql/backends/monet5/iot/Tests/iot14.sql
+++ b/sql/backends/monet5/iot/Tests/iot14.sql
@@ -31,7 +31,7 @@ insert into sdel values('2005-09-23 12:3
select * from sdel;
call iot.resume();
-call iot.wait(2);
+call iot.cycles('iot','sdel',1);
select * from sdel;
drop procedure sdel00;
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
@@ -209,12 +209,14 @@ PNregisterInternal(Client cntxt, MalBlkP
pnet[pnettop].mb = nmb;
pnet[pnettop].stk = prepareMALstack(nmb, nmb->vsize);
- pnet[pnettop].client = MCinitClient(0,0,0);
- if ( pnet[pnettop].client == NULL)
- throw(MAL,"petrinet.register","Failed to create client record
for continous query");
- msg = SQLinitClient(pnet[pnettop].client);
- if( msg)
- return msg;
+ if(pnet[pnettop].client == 0){
+ pnet[pnettop].client = MCinitClient(0,0,0);
+ if ( pnet[pnettop].client == NULL)
+ throw(MAL,"petrinet.register","Failed to create client
record for continous query");
+ msg = SQLinitClient(pnet[pnettop].client);
+ if( msg)
+ return msg;
+ }
pnet[pnettop].status = PNWAIT;
pnet[pnettop].limit = -1; // unbounded invocations
@@ -245,7 +247,7 @@ PNstatus( Client cntxt, MalBlkPtr mb, Ma
i = PNlocate(modname,fcnname);
if ( i == pnettop){
MT_lock_unset(&iotLock);
- throw(SQL,"iot.pause","Continuous query not found");
+ throw(SQL,"iot.pause","Continuous query %s.%s not
found",modname,fcnname);
}
pnet[i].status = newstatus;
_DEBUG_PETRINET_ mnstr_printf(GDKout, "#scheduler status %s.%s
%s\n", modname,fcnname, statusname[newstatus]);
@@ -278,7 +280,7 @@ PNwait(Client cntxt, MalBlkPtr mb, MalSt
int steps= *(int*) getArgReference(stk,pci,1);
(void) mb;
- _DEBUG_PETRINET_ mnstr_printf(cntxt->fdout, "#scheduler wait cycle %d
steps %d\n",old,steps);
+ _DEBUG_PETRINET_ mnstr_printf(cntxt->fdout, "#scheduler wait steps
%d\n",steps -old);
while(pnstatus == PNRUNNING && PNcycle < old + steps)
MT_sleep_ms(20);
return MAL_SUCCEED;
@@ -311,13 +313,14 @@ PNderegisterInternal(int i){
MT_lock_set(&iotLock);
GDKfree(pnet[i].modname);
GDKfree(pnet[i].fcnname);
- MCcloseClient(pnet[i].client);
+ //MCcloseClient(pnet[i].client);
memset((void*) (pnet+i), 0, sizeof(PNnode));
for( ; i<pnettop-1; i++)
pnet[i] = pnet[i+1];
pnettop--;
MT_lock_unset(&iotLock);
}
+
str
PNderegister(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){
str modname= NULL;
@@ -352,7 +355,7 @@ PNcycles(Client cntxt, MalBlkPtr mb, Mal
int limit= *getArgReference_int(stk,pci,3);
int i = PNlocate(modname,fcnname);
- _DEBUG_PETRINET_ mnstr_printf(GDKout, "#scheduler set limit \n");
+ _DEBUG_PETRINET_ mnstr_printf(GDKout, "#scheduler set cycle limit %s.%s
%d \n",modname,fcnname,limit);
(void) cntxt;
(void) mb;
if( i != pnettop)
@@ -516,15 +519,15 @@ PNscheduler(void *dummy)
int force = 0;
pnet[i].enabled = 1;
- // check for a hardbeat set on the query
+ // check for a heartbeat set on the query
+ // It ensures that it can be executed regardless other
conditions
if (pnet[i].heartbeat) {
(void) MTIMEunix_epoch(&ts);
(void) MTIMEtimestamp_add(&tn, &pnet[i].seen,
&pnet[i].heartbeat);
- if (tn.days < ts.days || (tn.days == ts.days &&
tn.msecs < ts.msecs)) {
- pnet[i].enabled = 0;
- PNcycle--; // it does not count as a
valid cycle.
+ if ( !(tn.days < ts.days || (tn.days == ts.days
&& tn.msecs < ts.msecs)) ){
+ force =1;
break;
- } else force = 1;
+ }
}
/* consider baskets that are properly filled */
// check if all input baskets are available and
non-empty
@@ -540,7 +543,6 @@ PNscheduler(void *dummy)
(void) MTIMEtimestamp_add(&tn,
&baskets[idx].seen, &baskets[idx].heartbeat);
if (tn.days < ts.days || (tn.days ==
ts.days && tn.msecs < ts.msecs)) {
pnet[i].enabled = 0;
- PNcycle--; // it does not count
as a valid cycle.
break;
}
} else
@@ -581,6 +583,7 @@ PNscheduler(void *dummy)
pntasks += pnet[i].enabled;
}
analysis = GDKusec() - now;
+ _DEBUG_PETRINET_ mnstr_printf(GDKout, "#Transition enabled %d
\n", k);
/* Execute each enabled transformation */
/* Tricky part is here a single stream used by multiple
transitions */
@@ -617,7 +620,7 @@ PNscheduler(void *dummy)
/* after one sweep all threads should be released */
for (m = 0; m < k; m++)
if(pnet[enabled[m]].tid){
- _DEBUG_PETRINET_ mnstr_printf(GDKout, "#Terminate query
thread %s \n", pnet[enabled[m]].fcnname);
+ _DEBUG_PETRINET_ mnstr_printf(GDKout, "#Terminate query
thread %s limit %d \n", pnet[enabled[m]].fcnname, pnet[enabled[m]].limit);
MT_join_thread(pnet[enabled[m]].tid);
pnet[enabled[m]].limit--;
if( pnet[enabled[m]].limit == 0)
@@ -632,6 +635,7 @@ PNscheduler(void *dummy)
}
}
+ _DEBUG_PETRINET_ mnstr_printf(GDKout, "#petrinet.scheduler stopped\n");
MCcloseClient(cntxt);
pnstatus = PNINIT;
(void) dummy;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list