Changeset: fff1d84c5d64 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fff1d84c5d64
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        monetdb5/mal/mal_runtime.c
        monetdb5/mal/mal_runtime.h
        monetdb5/modules/mal/sysmon.c
        monetdb5/modules/mal/sysmon.mal
        sql/backends/monet5/sql.mal
        sql/backends/monet5/sql_upgrades.c
        sql/scripts/26_sysmon.sql
        sql/test/sys-schema/Tests/systemfunctions.stable.out
        sql/test/sys-schema/Tests/systemfunctions.stable.out.int128
Branch: sessions
Log Message:

Upgrade of the sys.queue structure


diffs (truncated from 352 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -11800,7 +11800,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "sysmon_pause", "pattern sql.sysmon_pause(tag:int):void ",      
"SYSMONpause;", ""      ]
 [ "sql",       "sysmon_pause", "pattern sql.sysmon_pause(tag:lng):void ",      
"SYSMONpause;", ""      ]
 [ "sql",       "sysmon_pause", "pattern sql.sysmon_pause(tag:sht):void ",      
"SYSMONpause;", ""      ]
-[ "sql",       "sysmon_queue", "pattern sql.sysmon_queue() (qtag:bat[:lng], 
sessionid:bat[:int], user:bat[:str], started:bat[:timestamp], 
estimate:bat[:timestamp], progress:bat[:int], status:bat[:str], tag:bat[:oid], 
query:bat[:str]) ",   "SYSMONqueue;", ""      ]
+[ "sql",       "sysmon_queue", "pattern sql.sysmon_queue() (tag:bat[:lng], 
sessionid:bat[:int], user:bat[:str], started:bat[:timestamp], status:bat[:str], 
query:bat[:str], progress:bat[:int], workers:bat[:int], memory:bat[:int]) ",    
    "SYSMONqueue;", ""      ]
 [ "sql",       "sysmon_resume",        "pattern 
sql.sysmon_resume(tag:int):void ",     "SYSMONresume;",        ""      ]
 [ "sql",       "sysmon_resume",        "pattern 
sql.sysmon_resume(tag:lng):void ",     "SYSMONresume;",        ""      ]
 [ "sql",       "sysmon_resume",        "pattern 
sql.sysmon_resume(tag:sht):void ",     "SYSMONresume;",        ""      ]
@@ -11947,7 +11947,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sysmon",    "pause",        "pattern sysmon.pause(id:int):void ",   
"SYSMONpause;", "Suspend a running query"       ]
 [ "sysmon",    "pause",        "pattern sysmon.pause(id:lng):void ",   
"SYSMONpause;", "Suspend a running query"       ]
 [ "sysmon",    "pause",        "pattern sysmon.pause(id:sht):void ",   
"SYSMONpause;", "Suspend a running query"       ]
-[ "sysmon",    "queue",        "pattern sysmon.queue() (tag:bat[:lng], 
user:bat[:str], started:bat[:timestamp], estimate:bat[:timestamp], 
progress:bat[:int], status:bat[:str], qrytag:bat[:oid], query:bat[:str]) ",  
"SYSMONqueue;", ""      ]
+[ "sysmon",    "queue",        "pattern sysmon.queue() (tag:bat[:lng], 
sessionid:bat[:int], user:bat[:str], started:bat[:timestamp], status:bat[:str], 
query:bat[:str], progress:bat[:int], workers:bat[:int], memory:bat[:int]) ",    
"SYSMONqueue;", ""      ]
 [ "sysmon",    "resume",       "pattern sysmon.resume(id:int):void ",  
"SYSMONresume;",        "Resume processing of a query " ]
 [ "sysmon",    "resume",       "pattern sysmon.resume(id:lng):void ",  
"SYSMONresume;",        "Resume processing of a query " ]
 [ "sysmon",    "resume",       "pattern sysmon.resume(id:sht):void ",  
"SYSMONresume;",        "Resume processing of a query " ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -16217,7 +16217,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "sysmon_pause", "pattern sql.sysmon_pause(tag:int):void ",      
"SYSMONpause;", ""      ]
 [ "sql",       "sysmon_pause", "pattern sql.sysmon_pause(tag:lng):void ",      
"SYSMONpause;", ""      ]
 [ "sql",       "sysmon_pause", "pattern sql.sysmon_pause(tag:sht):void ",      
"SYSMONpause;", ""      ]
-[ "sql",       "sysmon_queue", "pattern sql.sysmon_queue() (qtag:bat[:lng], 
sessionid:bat[:int], user:bat[:str], started:bat[:timestamp], 
estimate:bat[:timestamp], progress:bat[:int], status:bat[:str], tag:bat[:oid], 
query:bat[:str]) ",   "SYSMONqueue;", ""      ]
+[ "sql",       "sysmon_queue", "pattern sql.sysmon_queue() (tag:bat[:lng], 
sessionid:bat[:int], user:bat[:str], started:bat[:timestamp], status:bat[:str], 
query:bat[:str], progress:bat[:int], workers:bat[:int], memory:bat[:int]) ",    
    "SYSMONqueue;", ""      ]
 [ "sql",       "sysmon_resume",        "pattern 
sql.sysmon_resume(tag:int):void ",     "SYSMONresume;",        ""      ]
 [ "sql",       "sysmon_resume",        "pattern 
sql.sysmon_resume(tag:lng):void ",     "SYSMONresume;",        ""      ]
 [ "sql",       "sysmon_resume",        "pattern 
sql.sysmon_resume(tag:sht):void ",     "SYSMONresume;",        ""      ]
@@ -16366,7 +16366,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sysmon",    "pause",        "pattern sysmon.pause(id:int):void ",   
"SYSMONpause;", "Suspend a running query"       ]
 [ "sysmon",    "pause",        "pattern sysmon.pause(id:lng):void ",   
"SYSMONpause;", "Suspend a running query"       ]
 [ "sysmon",    "pause",        "pattern sysmon.pause(id:sht):void ",   
"SYSMONpause;", "Suspend a running query"       ]
-[ "sysmon",    "queue",        "pattern sysmon.queue() (tag:bat[:lng], 
user:bat[:str], started:bat[:timestamp], estimate:bat[:timestamp], 
progress:bat[:int], status:bat[:str], qrytag:bat[:oid], query:bat[:str]) ",  
"SYSMONqueue;", ""      ]
+[ "sysmon",    "queue",        "pattern sysmon.queue() (tag:bat[:lng], 
sessionid:bat[:int], user:bat[:str], started:bat[:timestamp], status:bat[:str], 
query:bat[:str], progress:bat[:int], workers:bat[:int], memory:bat[:int]) ",    
"SYSMONqueue;", ""      ]
 [ "sysmon",    "resume",       "pattern sysmon.resume(id:int):void ",  
"SYSMONresume;",        "Resume processing of a query " ]
 [ "sysmon",    "resume",       "pattern sysmon.resume(id:lng):void ",  
"SYSMONresume;",        "Resume processing of a query " ]
 [ "sysmon",    "resume",       "pattern sysmon.resume(id:sht):void ",  
"SYSMONresume;",        "Resume processing of a query " ]
diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -35,6 +35,7 @@ static oid qtag= 1;           // A unique query i
                QRYqueue[I].tag = 0; \
                QRYqueue[I].query = 0; \
                QRYqueue[I].status =0; \
+               QRYqueue[I].progress =0; \
                QRYqueue[I].stk =0; \
                QRYqueue[I].mb =0; \
 
@@ -142,7 +143,7 @@ runtimeProfileFinish(Client cntxt, MalBl
        cntxt->idle = time(0);
        cntxt->lastcmd = 0;
        QRYqueue[qtop].workers = 0;
-       QRYqueue[qtop].memoryclaim = 0;
+       QRYqueue[qtop].memory= 0;
        MT_lock_unset(&mal_delayLock);
 }
 
diff --git a/monetdb5/mal/mal_runtime.h b/monetdb5/mal/mal_runtime.h
--- a/monetdb5/mal/mal_runtime.h
+++ b/monetdb5/mal/mal_runtime.h
@@ -32,8 +32,9 @@ typedef struct QRYQUEUE{
        str query;
        str status;
        time_t start;
+       int             progress;               /* percentage of MAL 
instructions handled */
        int             workers;                /* Actual number of concurrent 
workers */
-       lng             memoryclaim;    /* Actual memory claim highwater mark */
+       lng             memory; /* Actual memory claim highwater mark */
        lng runtime;
 } *QueryQueue;
 mal_export lng qtop;
diff --git a/monetdb5/modules/mal/sysmon.c b/monetdb5/modules/mal/sysmon.c
--- a/monetdb5/modules/mal/sysmon.c
+++ b/monetdb5/modules/mal/sysmon.c
@@ -19,19 +19,17 @@
 str
 SYSMONqueue(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-       BAT *tag, *sessionid, *user, *query, *estimate, *started, *progress, 
*activity, *oids;
+       BAT *tag, *sessionid, *user, *started, *status, *query, *progress, 
*workers, *memory;
        bat *t = getArgReference_bat(stk,pci,0);
-       bat *d = getArgReference_bat(stk,pci,1);
+       bat *s = getArgReference_bat(stk,pci,1);
        bat *u = getArgReference_bat(stk,pci,2);
-       bat *s = getArgReference_bat(stk,pci,3);
-       bat *e = getArgReference_bat(stk,pci,4);
-       bat *p = getArgReference_bat(stk,pci,5);
-       bat *a = getArgReference_bat(stk,pci,6);
-       bat *o = getArgReference_bat(stk,pci,7);
-       bat *q = getArgReference_bat(stk,pci,8);
-       time_t now;
-       lng i;
-       int prog;
+       bat *sd = getArgReference_bat(stk,pci,3);
+       bat *ss = getArgReference_bat(stk,pci,4);
+       bat *q = getArgReference_bat(stk,pci,5);
+       bat *p = getArgReference_bat(stk,pci,6);
+       bat *w = getArgReference_bat(stk,pci,7);
+       bat *m = getArgReference_bat(stk,pci,8);
+       lng i, qtag;
        str usr;
        timestamp tsn;
        str msg = MAL_SUCCEED;
@@ -39,37 +37,32 @@ SYSMONqueue(Client cntxt, MalBlkPtr mb, 
        (void) cntxt;
        (void) mb;
        tag = COLnew(0, TYPE_lng, 256, TRANSIENT);
-       sessionid = COLnew(0, TYPE_int, 256, TRANSIENT);
+       sessionid = COLnew(2, TYPE_int, 256, TRANSIENT);
        user = COLnew(0, TYPE_str, 256, TRANSIENT);
        started = COLnew(0, TYPE_timestamp, 256, TRANSIENT);
-       estimate = COLnew(0, TYPE_timestamp, 256, TRANSIENT);
+       status = COLnew(0, TYPE_str, 256, TRANSIENT);
+       query = COLnew(0, TYPE_str, 256, TRANSIENT);
        progress = COLnew(0, TYPE_int, 256, TRANSIENT);
-       activity = COLnew(0, TYPE_str, 256, TRANSIENT);
-       oids = COLnew(0, TYPE_oid, 256, TRANSIENT);
-       query = COLnew(0, TYPE_str, 256, TRANSIENT);
-       if ( tag == NULL || sessionid == NULL || user == NULL || query == NULL 
|| started == NULL || estimate == NULL || progress == NULL || activity == NULL 
|| oids == NULL){
+       workers = COLnew(0, TYPE_int, 256, TRANSIENT);
+       memory = COLnew(0, TYPE_int, 256, TRANSIENT);
+       if ( tag == NULL || sessionid == NULL || user == NULL || query == NULL 
|| started == NULL || progress == NULL || workers == NULL || memory == NULL){
                BBPreclaim(tag);
                BBPreclaim(sessionid);
                BBPreclaim(user);
+               BBPreclaim(started);
+               BBPreclaim(status);
                BBPreclaim(query);
-               BBPreclaim(activity);
-               BBPreclaim(started);
-               BBPreclaim(estimate);
                BBPreclaim(progress);
-               BBPreclaim(oids);
+               BBPreclaim(workers);
+               BBPreclaim(memory);
                throw(MAL, "SYSMONqueue", SQLSTATE(HY001) MAL_MALLOC_FAIL);
        }
 
        MT_lock_set(&mal_delayLock);
        for ( i = 0; i< qtop; i++)
        if( QRYqueue[i].query && (QRYqueue[i].cntxt->user == MAL_ADMIN || 
QRYqueue[i].cntxt->user == cntxt->user)) {
-               now= time(0);
-               if ( (now-QRYqueue[i].start) > QRYqueue[i].runtime)
-                       prog =QRYqueue[i].runtime > 0 ? 100: int_nil;
-               else
-                       // calculate progress based on past observations
-                       prog = (int) ((now- QRYqueue[i].start) / 
(QRYqueue[i].runtime/100.0));
-               if (BUNappend(tag, &(lng){QRYqueue[i].tag}, false) != 
GDK_SUCCEED)
+               qtag= QRYqueue[i].tag;
+               if (BUNappend(tag, &qtag, false) != GDK_SUCCEED)
                        goto bailout;
                msg = AUTHgetUsername(&usr, QRYqueue[i].cntxt);
                if (msg != MAL_SUCCEED)
@@ -86,7 +79,7 @@ SYSMONqueue(Client cntxt, MalBlkPtr mb, 
                }
                GDKfree(usr);
                if (BUNappend(query, QRYqueue[i].query, false) != GDK_SUCCEED ||
-                       BUNappend(activity, QRYqueue[i].status, false) != 
GDK_SUCCEED)
+                       BUNappend(status, QRYqueue[i].status, false) != 
GDK_SUCCEED)
                        goto bailout;
 
                /* convert number of seconds into a timestamp */
@@ -97,33 +90,21 @@ SYSMONqueue(Client cntxt, MalBlkPtr mb, 
                }
                if (BUNappend(started, &tsn, false) != GDK_SUCCEED)
                        goto bailout;
-
-               if ( QRYqueue[i].mb->runtime == 0) {
-                       if (BUNappend(estimate, &timestamp_nil, false) != 
GDK_SUCCEED)
-                               goto bailout;
-               } else {
-                       tsn = timestamp_add_usec(tsn, 1000 * 
QRYqueue[i].mb->runtime);
-                       if (is_timestamp_nil(tsn)) {
-                               msg = createException(MAL, "SYSMONqueue", 
SQLSTATE(22003) "cannot convert time");
-                               goto bailout;
-                       }
-                       if (BUNappend(estimate, &tsn, false) != GDK_SUCCEED)
-                               goto bailout;
-               }
-               if (BUNappend(oids, &QRYqueue[i].mb->tag, false) != GDK_SUCCEED 
||
-                       BUNappend(progress, &prog, false) != GDK_SUCCEED)
+               if (BUNappend(progress, &QRYqueue[i].progress, false) != 
GDK_SUCCEED ||
+                   BUNappend(workers, &QRYqueue[i].workers, false) != 
GDK_SUCCEED ||
+                       BUNappend(memory, &QRYqueue[i].memory, false) != 
GDK_SUCCEED)
                        goto bailout;
        }
        MT_lock_unset(&mal_delayLock);
        BBPkeepref( *t =tag->batCacheid);
-       BBPkeepref( *d =sessionid->batCacheid);
+       BBPkeepref( *s =sessionid->batCacheid);
        BBPkeepref( *u =user->batCacheid);
-       BBPkeepref( *s =started->batCacheid);
-       BBPkeepref( *e = estimate->batCacheid);
-       BBPkeepref( *a =activity->batCacheid);
+       BBPkeepref( *sd =started->batCacheid);
+       BBPkeepref( *ss =status->batCacheid);
+       BBPkeepref( *q =query->batCacheid);
        BBPkeepref( *p =progress->batCacheid);
-       BBPkeepref( *o =oids->batCacheid);
-       BBPkeepref( *q =query->batCacheid);
+       BBPkeepref( *w =workers->batCacheid);
+       BBPkeepref( *m =memory->batCacheid);
        return MAL_SUCCEED;
 
   bailout:
@@ -131,12 +112,12 @@ SYSMONqueue(Client cntxt, MalBlkPtr mb, 
        BBPunfix(tag->batCacheid);
        BBPunfix(sessionid->batCacheid);
        BBPunfix(user->batCacheid);
+       BBPunfix(started->batCacheid);
+       BBPunfix(status->batCacheid);
        BBPunfix(query->batCacheid);
-       BBPunfix(activity->batCacheid);
-       BBPunfix(started->batCacheid);
-       BBPunfix(estimate->batCacheid);
        BBPunfix(progress->batCacheid);
-       BBPunfix(oids->batCacheid);
+       BBPunfix(workers->batCacheid);
+       BBPunfix(memory->batCacheid);
        return msg ? msg : createException(MAL, "SYSMONqueue", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
 }
 
diff --git a/monetdb5/modules/mal/sysmon.mal b/monetdb5/modules/mal/sysmon.mal
--- a/monetdb5/modules/mal/sysmon.mal
+++ b/monetdb5/modules/mal/sysmon.mal
@@ -36,5 +36,6 @@ pattern stop(id:lng)
 address SYSMONstop
 comment "Stop a single query a.s.a.p.";
 
-pattern queue()(tag:bat[:lng], 
user:bat[:str],started:bat[:timestamp],estimate:bat[:timestamp],progress:bat[:int],
 status:bat[:str], qrytag:bat[:oid],query:bat[:str])
+pattern queue()(tag:bat[:lng], sessionid:bat[:int], user:bat[:str], 
started:bat[:timestamp],
+status:bat[:str], query:bat[:str], progress:bat[:int], workers:bat[:int], 
memory:bat[:int])
 address SYSMONqueue;
diff --git a/sql/backends/monet5/sql.mal b/sql/backends/monet5/sql.mal
--- a/sql/backends/monet5/sql.mal
+++ b/sql/backends/monet5/sql.mal
@@ -657,7 +657,8 @@ command querylog_disable()
 address QLOGdisable;
 
 
-pattern sysmon_queue()(qtag:bat[:lng], sessionid:bat[:int], 
user:bat[:str],started:bat[:timestamp],estimate:bat[:timestamp],progress:bat[:int],
 status:bat[:str], tag:bat[:oid], query:bat[:str])
+pattern sysmon_queue()(tag:bat[:lng], sessionid:bat[:int], user:bat[:str], 
started:bat[:timestamp], 
+status:bat[:str], query:bat[:str], progress:bat[:int], workers:bat[:int], 
memory:bat[:int])
 address SYSMONqueue;
 
 pattern sysmon_pause(tag:sht)
diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -2337,6 +2337,22 @@ sql_update_default(Client c, mvc *sql, c
                        "external name sql.setworkerlimit;\n"
                        "create procedure sys.setmemorylimit(\"sessionid\" int, 
\"limit\" int)\n"
        );
+       pos += snprintf(buf + pos, bufsize - pos,
+                       "drop function sys.queue();\n"
+                       "create function sys.queue()\n"
+                       "returns table(\n"
+                       "tag bigint,\n"
+                       "sessionid int,\n"
+               "\"user\" string,\n"
+               "started timestamp,\n"
+               "status string,  -- paused, running\n"
+               "query string,\n"
+                       "progress int,   -- percentage of MAL instructions 
handled\n"
+                       "workers int,\n"
+                       "memory int)\n"
+                       "external name sql.sysmon_queue;\n"
+                       "grant execute on function sys.queue to public;\n"
+       );
 
        pos += snprintf(buf + pos, bufsize - pos,
                        "update sys.functions set system = true where schema_id 
= (select id from sys.schemas where name = 'sys')"
diff --git a/sql/scripts/26_sysmon.sql b/sql/scripts/26_sysmon.sql
--- a/sql/scripts/26_sysmon.sql
+++ b/sql/scripts/26_sysmon.sql
@@ -9,15 +9,15 @@
 -- show status of all active SQL queries.
 create function sys.queue()
 returns table(
-       qtag bigint,
+       tag bigint,
        sessionid int,
        "user" string,
        started timestamp,
-       estimate timestamp,
-       progress int,
-       status string,
-       tag oid,
-       query string
+       status string,  -- paused, running
+       query string,
+       progress int,   -- percentage of MAL instructions handled
+       workers int,
+       memory int
 )
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to