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