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

Reply via email to