Changeset: 160567eeb3fb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=160567eeb3fb
Modified Files:
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_client.h
        monetdb5/mal/mal_runtime.c
        monetdb5/modules/mal/clients.c
        monetdb5/modules/mal/clients.h
        monetdb5/modules/mal/clients.mal
        sql/backends/monet5/sql.mal
        sql/backends/monet5/sql_upgrades.c
        sql/scripts/22_clients.sql
Branch: default
Log Message:

Second round. Only show session profile and login/idle times
Workers and memory claim is part of the currently active query.


diffs (truncated from 657 to 300 lines):

diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -242,7 +242,7 @@ MCinitClientRecord(Client c, oid user, b
        c->usermodule = c->curmodule = 0;
 
        c->father = NULL;
-       c->login = c->lastcmd = time(0);
+       c->idle  = c->login = c->lastcmd = time(0);
        c->session = GDKusec();
        strncpy(c->optimizer, "default_pipe", IDLENGTH);
        c->workerlimit = 0;
@@ -366,6 +366,8 @@ MCforkClient(Client father)
                son->bak = NULL;
                son->yycur = 0;
                son->father = father;
+               son->login = father->login;
+               son->idle = father->idle;
                son->scenario = father->scenario;
                strcpy(father->optimizer, son->optimizer);
                son->workerlimit = father->workerlimit;
@@ -437,7 +439,7 @@ MCfreeClient(Client c)
                freeModule(c->usermodule);
        c->usermodule = c->curmodule = 0;
        c->father = 0;
-       c->login = c->lastcmd = 0;
+       c->idle = c->login = c->lastcmd = 0;
        strncpy(c->optimizer, "default_pipe", IDLENGTH);
        c->workerlimit = 0;
        c->memorylimit = 0;
diff --git a/monetdb5/mal/mal_client.h b/monetdb5/mal/mal_client.h
--- a/monetdb5/mal/mal_client.h
+++ b/monetdb5/mal/mal_client.h
@@ -71,17 +71,17 @@ typedef struct CLIENT {
        lng     querytimeout;           /* query abort after x usec, 0 = no 
limit*/
        lng         sessiontimeout;             /* session abort after x usec, 
0 = no limit */
 
+       time_t  login;          /* Time when this session started */
+       lng     session;        /* usec since start of server */
+       time_t  idle;           /* Time when the session became idle */  
+
        /*
         * For program debugging and performance trace we keep the actual 
resource claims.
         */
+       time_t  lastcmd;                /* set when query is received */
        int             workers;                /* Actual number of concurrent 
workers */
        lng             memoryclaim;    /* Actual memory claim highwater mark */
 
-       time_t      login;  
-       time_t      lastcmd;    /* set when input is received */
-       lng             session;        /* usec since start of server */
-
-
        /* The user can request a TRACE SQL statement, calling for collecting 
the events locally */
        BAT *profticks;                         
        BAT *profstmt;
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
@@ -27,7 +27,7 @@
 QueryQueue QRYqueue;
 lng qtop;
 static lng qsize;
-static oid qtag= 1;
+static oid qtag= 1;            // A unique query identifier
 
 #define QRYreset(I)\
                if (QRYqueue[I].query) GDKfree(QRYqueue[I].query);\
@@ -139,6 +139,10 @@ runtimeProfileFinish(Client cntxt, MalBl
 
        qtop = j;
        QRYqueue[qtop].query = NULL; /* sentinel for SYSMONqueue() */
+       cntxt->idle = time(0);
+       cntxt->lastcmd = 0;
+       cntxt->workers = 0;
+       cntxt->memoryclaim = 0;
        MT_lock_unset(&mal_delayLock);
 }
 
diff --git a/monetdb5/modules/mal/clients.c b/monetdb5/modules/mal/clients.c
--- a/monetdb5/modules/mal/clients.c
+++ b/monetdb5/modules/mal/clients.c
@@ -235,6 +235,79 @@ CLTstop(Client cntxt, MalBlkPtr mb, MalS
 }
 
 str
+CLTsetoptimizer(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+    int idx;
+       str opt;
+
+    (void) mb;
+       if( pci->argc == 3){
+       idx = *getArgReference_sht(stk,pci,1);
+       opt = *getArgReference_str(stk,pci,2);
+       } else {
+               idx = cntxt->idx;
+               opt = *getArgReference_str(stk,pci,1);
+       }
+
+       if( idx < 0 || idx > MAL_MAXCLIENTS)
+               throw(MAL,"setoptimizer","Illegal session id");
+       if (mal_clients[idx].mode == FREECLIENT)
+               throw(MAL,"setoptimizer","Session not active anymore ");
+    if (cntxt->user == mal_clients[idx].user || cntxt->user == MAL_ADMIN){
+        strncpy(mal_clients[idx].optimizer, opt, IDLENGTH);
+       }
+    return MAL_SUCCEED;
+}
+
+str
+CLTsetworkerlimit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+    int idx, limit;
+
+    (void) mb;
+       if(pci->argc == 3){
+               idx = *getArgReference_sht(stk,pci,1);
+               limit = *getArgReference_int(stk,pci,2);
+       } else {
+               idx = cntxt->idx;
+               limit = *getArgReference_int(stk,pci,1);
+       }
+
+       if( idx < 0 || idx > MAL_MAXCLIENTS)
+               throw(MAL,"setworkerlimit","Illegal session id");
+       if (mal_clients[idx].mode == FREECLIENT)
+               throw(MAL,"setworkerlimit","Session not active anymore ");
+    if (cntxt->user == mal_clients[idx].user || cntxt->user == MAL_ADMIN){
+        mal_clients[idx].workerlimit = limit; 
+       }
+    return MAL_SUCCEED;
+}
+
+str
+CLTsetmemorylimit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+    int idx, limit;
+
+    (void) mb;
+       if(pci->argc == 3){
+               idx = *getArgReference_sht(stk,pci,1);
+               limit = *getArgReference_int(stk,pci,2);
+       } else{
+               idx = cntxt->idx;
+               limit = *getArgReference_int(stk,pci,1);
+       }
+
+       if( idx < 0 || idx > MAL_MAXCLIENTS)
+               throw(MAL,"setmemorylimit","Illegal session id");
+       if (mal_clients[idx].mode == FREECLIENT)
+               throw(MAL,"setmemorylimit","Session not active anymore ");
+    if (cntxt->user == mal_clients[idx].user || cntxt->user == MAL_ADMIN){
+        mal_clients[idx].memorylimit = limit; 
+       }
+    return MAL_SUCCEED;
+}
+
+str
 CLTstopSession(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
     int idx;
@@ -286,51 +359,31 @@ CLTwakeup(void *ret, int *id)
 
 /* set session time out based in seconds */
 str
-CLTsetSessionTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{
-       lng sto;
-       (void) mb;
-       sto=  *getArgReference_lng(stk,pci,1);
-       if( sto < 0)
-               throw(MAL,"timeout","Session time out should be >= 0");
-       cntxt->sessiontimeout = sto * 1000 * 1000;
-    return MAL_SUCCEED;
-}
-
-/* Set the current query timeout in seconds */
-str
-CLTsetTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{
-       lng qto;
-       (void) mb;
-       qto=  *getArgReference_lng(stk,pci,1);
-       if( qto < 0)
-               throw(MAL,"timeout","Query time out should be >= 0");
-       cntxt->querytimeout = qto * 1000 * 1000;
-    return MAL_SUCCEED;
-}
-
-str
 CLTqueryTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        lng qto;
        int idx = -1;
        (void) cntxt;
        (void) mb;
-       switch( getArgType(mb,pci,1)){
-       case TYPE_bte:
-               idx = *getArgReference_bte(stk,pci,1);
-               break;
-       case TYPE_sht:
-               idx = *getArgReference_sht(stk,pci,1);
-               break;
-       case TYPE_int:
-               idx = *getArgReference_int(stk,pci,1);
-               break;
-       default:
-               throw(MAL,"sessionTimeout","Unexpected index type");
+       if ( pci->argc == 3){
+               switch( getArgType(mb,pci,1)){
+               case TYPE_bte:
+                       idx = *getArgReference_bte(stk,pci,1);
+                       break;
+               case TYPE_sht:
+                       idx = *getArgReference_sht(stk,pci,1);
+                       break;
+               case TYPE_int:
+                       idx = *getArgReference_int(stk,pci,1);
+                       break;
+               default:
+                       throw(MAL,"sessionTimeout","Unexpected index type");
+               }
+               qto=  *getArgReference_lng(stk,pci,2);
+       } else {
+               idx = cntxt->idx;
+               qto=  *getArgReference_lng(stk,pci,1);
        }
-       qto=  *getArgReference_lng(stk,pci,2);
        if( qto < 0)
                throw(MAL,"timeout","Query time out should be >= 0");
        mal_clients[idx].querytimeout = qto * 1000 * 1000;
@@ -343,57 +396,66 @@ CLTsessionTimeout(Client cntxt, MalBlkPt
 {
        lng sto = -1;
        int idx = -1;
+       int i = 1;
+
        (void) cntxt;
-       (void) mb;
-       switch( getArgType(mb,pci,1)){
+       if( pci->argc == 3){
+               switch( getArgType(mb,pci,i)){
+               case TYPE_bte:
+                       idx = *getArgReference_bte(stk,pci,i);
+                       break;
+               case TYPE_sht:
+                       idx = *getArgReference_sht(stk,pci,i);
+                       break;
+               case TYPE_int:
+                       idx = *getArgReference_int(stk,pci,i);
+                       break;
+               default:
+                       throw(MAL,"sessionTimeout","Unexpected index type");
+               }
+               i++;
+       } 
+       switch( getArgType(mb,pci,i)){
        case TYPE_bte:
-               idx = *getArgReference_bte(stk,pci,1);
+               sto = *getArgReference_bte(stk,pci,i);
                break;
        case TYPE_sht:
-               idx = *getArgReference_sht(stk,pci,1);
+               sto = *getArgReference_sht(stk,pci,i);
                break;
        case TYPE_int:
-               idx = *getArgReference_int(stk,pci,1);
+               sto = *getArgReference_int(stk,pci,i);
+               break;
+       case TYPE_lng:
+               sto = *getArgReference_lng(stk,pci,i);
                break;
        default:
                throw(MAL,"sessionTimeout","Unexpected index type");
        }
-       switch( getArgType(mb,pci,2)){
-       case TYPE_bte:
-               sto = *getArgReference_bte(stk,pci,2);
-               break;
-       case TYPE_sht:
-               sto = *getArgReference_sht(stk,pci,2);
-               break;
-       case TYPE_int:
-               sto = *getArgReference_int(stk,pci,2);
-               break;
-       case TYPE_lng:
-               sto = *getArgReference_lng(stk,pci,2);
-               break;
-       default:
-               throw(MAL,"sessionTimeout","Unexpected index type");
-       }
-       sto=  *getArgReference_lng(stk,pci,2);
        if( sto < 0)
-               throw(MAL,"timeout","Query time out should be >= 0");
+               throw(MAL,"sessiontimeout","Query time out should be >= 0");
        if( idx < 0 || idx > MAL_MAXCLIENTS)
-               throw(MAL,"timeout","Illegal session id");
+               throw(MAL,"sessiontimeout","Illegal session id");
        if (mal_clients[idx].mode == FREECLIENT)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to