Changeset: d0507a2686e6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d0507a2686e6
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk_batop.c
monetdb5/mal/mal_client.c
monetdb5/mal/mal_client.h
monetdb5/mal/mal_errors.h
monetdb5/mal/mal_interpreter.c
monetdb5/modules/mal/clients.c
monetdb5/modules/mal/clients.mal
monetdb5/modules/mal/mat.c
sql/backends/monet5/sql.mx
sql/scripts/22_clients.sql
sql/test/Tests/systemfunctions.stable.out
sql/test/Tests/systemfunctions_nogeom.stable.out
Branch: mutation
Log Message:
merge with default
diffs (295 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1546,6 +1546,7 @@ str MATHunary_ISNAN(bit *res, dbl *a);
str MATdummy(int *ret, str *grp);
str MAThasMoreElements(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
str MATinfo(int *ret, str *grp, str *elm);
+str MATmergepack(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
str MATnewIterator(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
str MATpack(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
str MATpack2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
@@ -3131,7 +3132,7 @@ str topn_maxRef;
str topn_minRef;
int toriginProp;
void trimMalBlk(MalBlkPtr mb);
-void trimMalVariables(MalBlkPtr mb);
+void trimMalVariables(MalBlkPtr mb, MalStkPtr stk);
void trimMalVariables_(MalBlkPtr mb, bit *used, MalStkPtr glb);
int tubProp;
str tuniqueRef;
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -2242,10 +2242,10 @@ BATmergecand(BAT *a, BAT *b)
assert(b->htype == TYPE_void);
assert(ATOMtype(a->htype) == TYPE_oid);
assert(ATOMtype(b->htype) == TYPE_oid);
- assert(a->tsorted);
- assert(b->tsorted);
- assert(a->tkey);
- assert(b->tkey);
+ assert(BATcount(a) <= 1 || a->tsorted);
+ assert(BATcount(b) <= 1 || b->tsorted);
+ assert(BATcount(a) <= 1 || a->tkey);
+ assert(BATcount(b) <= 1 || b->tkey);
assert(a->T->nonil);
assert(b->T->nonil);
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
@@ -227,6 +227,7 @@ MCinitClientRecord(Client c, oid user, b
c->father = NULL;
c->login = c->lastcmd = time(0);
+ c->session = GDKusec();
c->qtimeout = 0;
c->stimeout = 0;
c->stage = 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
@@ -94,8 +94,9 @@ typedef struct CLIENT {
time_t login;
time_t lastcmd; /* set when input is received */
- lng qtimeout; /* query abort after x milliseconds */
- lng stimeout; /* session abort after x milliseconds */
+ lng session; /* usec since start of server */
+ lng qtimeout; /* query abort after x usec*/
+ lng stimeout; /* session abort after x usec */
/*
* Communication channels for the interconnect are stored here.
* It is perfectly legal to have a client without input stream.
diff --git a/monetdb5/mal/mal_errors.h b/monetdb5/mal/mal_errors.h
--- a/monetdb5/mal/mal_errors.h
+++ b/monetdb5/mal/mal_errors.h
@@ -100,6 +100,7 @@
#define RUNTIME_OBJECT_UNDEFINED "Object not found"
#define RUNTIME_UNKNOWN_INSTRUCTION "Instruction type not supported"
#define RUNTIME_QRY_TIMEOUT "Query aborted due to timeout"
+#define RUNTIME_SESSION_TIMEOUT "Query aborted due to session timeout"
#define OPERATION_FAILED "operation failed"
#define BOX_CLOSED "Box is not open"
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -381,7 +381,7 @@ str runMAL(Client cntxt, MalBlkPtr mb, M
garbageCollector(cntxt, mb, stk, env != stk);
if (stk && stk != env)
GDKfree(stk);
- if (cntxt->qtimeout && GDKms() > cntxt->qtimeout)
+ if (cntxt->qtimeout && GDKusec()- mb->starttime > cntxt->qtimeout)
throw(MAL, "mal.interpreter", RUNTIME_QRY_TIMEOUT);
return ret;
}
@@ -473,7 +473,7 @@ callMAL(Client cntxt, MalBlkPtr mb, MalS
throw(MAL, "mal.interpreter", RUNTIME_UNKNOWN_INSTRUCTION);
}
MT_sema_up(&mal_parallelism,"callMAL");
- if (cntxt->qtimeout && GDKms() > cntxt->qtimeout)
+ if (cntxt->qtimeout && GDKusec()- mb->starttime > cntxt->qtimeout)
throw(MAL, "mal.interpreter", RUNTIME_QRY_TIMEOUT);
return ret;
}
@@ -519,6 +519,8 @@ str runMALsequence(Client cntxt, MalBlkP
runtimeProfileInit(cntxt, mb, stk);
runtimeProfileBegin(cntxt, mb, stk, 0, &runtimeProfileFunction,
1);
mb->starttime = GDKusec();
+ if (cntxt->stimeout && cntxt->session && GDKusec()-
cntxt->session > cntxt->stimeout)
+ throw(MAL, "mal.interpreter", RUNTIME_SESSION_TIMEOUT);
}
stkpc = startpc;
exceptionVar = -1;
@@ -711,7 +713,7 @@ str runMALsequence(Client cntxt, MalBlkP
runtimeProfileFinish(cntxt, mb);
if (pcicaller && garbageControl(getInstrPtr(mb,
0)))
garbageCollector(cntxt, mb, stk, TRUE);
- if (cntxt->qtimeout && GDKms() >
cntxt->qtimeout){
+ if (cntxt->qtimeout && GDKusec()- mb->starttime
> cntxt->qtimeout){
ret= createException(MAL,
"mal.interpreter", RUNTIME_QRY_TIMEOUT);
break;
}
@@ -726,7 +728,7 @@ str runMALsequence(Client cntxt, MalBlkP
w= instruction2str(mb, 0, pci, FALSE);
ret = createScriptException(mb, stkpc, MAL,
NULL, "unkown operation:%s",w);
GDKfree(w);
- if (cntxt->qtimeout && GDKms() >
cntxt->qtimeout){
+ if (cntxt->qtimeout && GDKusec()- mb->starttime
> cntxt->qtimeout){
ret= createException(MAL,
"mal.interpreter", RUNTIME_QRY_TIMEOUT);
break;
}
@@ -862,7 +864,7 @@ str runMALsequence(Client cntxt, MalBlkP
if (exceptionVar == -1) {
runtimeProfileExit(cntxt, mb, stk, pci,
&runtimeProfile);
runtimeProfileFinish(cntxt, mb);
- if (cntxt->qtimeout && GDKms() >
cntxt->qtimeout)
+ if (cntxt->qtimeout && GDKusec()-
mb->starttime > cntxt->qtimeout)
ret= createException(MAL,
"mal.interpreter", RUNTIME_QRY_TIMEOUT);
stkpc = mb->stop;
continue;
@@ -909,7 +911,7 @@ str runMALsequence(Client cntxt, MalBlkP
}
}
if (stkpc == mb->stop) {
- if (cntxt->qtimeout && GDKms() >
cntxt->qtimeout){
+ if (cntxt->qtimeout && GDKusec()-
mb->starttime > cntxt->qtimeout){
ret= createException(MAL,
"mal.interpreter", RUNTIME_QRY_TIMEOUT);
stkpc = mb->stop;
}
@@ -1132,7 +1134,7 @@ str runMALsequence(Client cntxt, MalBlkP
default:
stkpc++;
}
- if (cntxt->qtimeout && GDKms() > cntxt->qtimeout){
+ if (cntxt->qtimeout && GDKusec()- mb->starttime >
cntxt->qtimeout){
ret= createException(MAL, "mal.interpreter",
RUNTIME_QRY_TIMEOUT);
stkpc= mb->stop;
}
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
@@ -359,14 +359,18 @@ CLTsuspend(Client cntxt, MalBlkPtr mb, M
return MCsuspendClient(*id);
}
+//set time out based on seconds
str
CLTsetTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- lng qto= *(lng *) getArgReference(stk,pci,1);
- lng sto= *(lng *) getArgReference(stk,pci,2);
+ lng qto,sto;
(void) mb;
- cntxt->qtimeout = qto;
- cntxt->stimeout = sto;
+ qto= *(lng *) getArgReference(stk,pci,1);
+ cntxt->qtimeout = qto * 1000 * 1000;
+ if ( pci->argc == 3){
+ sto= *(lng *) getArgReference(stk,pci,2);
+ cntxt->stimeout = sto * 1000 * 1000;
+ }
return MAL_SUCCEED;
}
str
diff --git a/monetdb5/modules/mal/clients.mal b/monetdb5/modules/mal/clients.mal
--- a/monetdb5/modules/mal/clients.mal
+++ b/monetdb5/modules/mal/clients.mal
@@ -71,9 +71,13 @@ command wakeup(id:int):void
address CLTwakeup
comment "Wakeup a client process";
+pattern settimeout(n:lng):void
+address CLTsettimeout
+comment "Abort a query after n seconds.";
+
pattern setTimeout(q:lng,s:lng):void
address CLTsetTimeout
-comment "Abort a query after q milliseconds (q=0 means run undisturbed).
+comment "Abort a query after q seconds (q=0 means run undisturbed).
The session timeout aborts the connection after spending too
many seconds on query processing.";
diff --git a/monetdb5/modules/mal/mat.c b/monetdb5/modules/mal/mat.c
--- a/monetdb5/modules/mal/mat.c
+++ b/monetdb5/modules/mal/mat.c
@@ -461,7 +461,7 @@ MATmergepack(Client cntxt, MalBlkPtr mb,
bn = BATnew(TYPE_void, TYPE_oid, cap);
if (bn == NULL)
throw(MAL, "mat.pack", MAL_MALLOC_FAIL);
-
+ BATsettrivprop(bn);
for (i = 1; i < p->argc; i++) {
b = BATdescriptor(stk->stk[getArg(p,i)].val.ival);
if( b ){
@@ -473,7 +473,6 @@ MATmergepack(Client cntxt, MalBlkPtr mb,
}
assert(!bn->H->nil || !bn->H->nonil);
assert(!bn->T->nil || !bn->T->nonil);
- BATsettrivprop(bn);
BBPkeepref(*ret = bn->batCacheid);
return MAL_SUCCEED;
}
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -477,7 +477,15 @@ comment "return table of users with sql
pattern password(user:str) :str
address db_password_wrap
-comment "return password hash of user";
+comment "Return password hash of user";
+
+pattern settimeout(s:lng):void
+address CLTsetTimeout
+comment "Abort query after s seconds";
+
+pattern settimeout(s:lng,t:lng):void
+address CLTsetTimeout
+comment "Abort query after s and session after t seconds";
pattern dump_cache()(query:bat[:oid,:str],count:bat[:oid,:int])
address dump_cache
diff --git a/sql/scripts/22_clients.sql b/sql/scripts/22_clients.sql
--- a/sql/scripts/22_clients.sql
+++ b/sql/scripts/22_clients.sql
@@ -14,6 +14,12 @@
-- Copyright August 2008-2013 MonetDB B.V.
-- All Rights Reserved.
-create function password_hash (username string)
+create function sys.password_hash (username string)
returns string
external name sql.password;
+
+-- control the query time out
+create procedure sys.settimeout("query" bigint)
+ external name sql.settimeout;
+create procedure sys.settimeout("query" bigint, "session" bigint)
+ external name sql.settimeout;
diff --git a/sql/test/Tests/systemfunctions.stable.out
b/sql/test/Tests/systemfunctions.stable.out
--- a/sql/test/Tests/systemfunctions.stable.out
+++ b/sql/test/Tests/systemfunctions.stable.out
@@ -349,7 +349,7 @@ Ready.
[ "sys", "overlaps", 0, "boolean", "create function
overlaps(a geometry, b geometry) returns boolean external name
geom.\"Overlaps\";" ]
[ "sys", "overlaps", 1, "geometry", "" ]
[ "sys", "overlaps", 2, "geometry", "" ]
-[ "sys", "password_hash", 0, "clob", "-- The contents of
this file are subject to the MonetDB Public License\n-- Version 1.1 (the
\"License\"); you may not use this file except in\n-- compliance with the
License. You may obtain a copy of the License at\n--
http://www.monetdb.org/Legal/MonetDBLicense\n--\n-- Software distributed under
the License is distributed on an \"AS IS\"\n-- basis, WITHOUT WARRANTY OF ANY
KIND, either express or implied. See the\n-- License for the specific language
governing rights and limitations\n-- under the License.\n--\n-- The Original
Code is the MonetDB Database System.\n--\n-- The Initial Developer of the
Original Code is CWI.\n-- Copyright August 2008-2013 MonetDB B.V.\n-- All
Rights Reserved.\n\ncreate function password_hash (username string) \n\treturns
string \n\texternal name sql.password;" ]
+[ "sys", "password_hash", 0, "clob", "-- The contents of
this file are subject to the MonetDB Public License\n-- Version 1.1 (the
\"License\"); you may not use this file except in\n-- compliance with the
License. You may obtain a copy of the License at\n--
http://www.monetdb.org/Legal/MonetDBLicense\n--\n-- Software distributed under
the License is distributed on an \"AS IS\"\n-- basis, WITHOUT WARRANTY OF ANY
KIND, either express or implied. See the\n-- License for the specific language
governing rights and limitations\n-- under the License.\n--\n-- The Original
Code is the MonetDB Database System.\n--\n-- The Initial Developer of the
Original Code is CWI.\n-- Copyright August 2008-2013 MonetDB B.V.\n-- All
Rights Reserved.\n\ncreate function sys.password_hash (username string)
\n\treturns string \n\texternal name sql.password;" ]
[ "sys", "password_hash", 1, "clob", "" ]
[ "sys", "pause", 0, "int", "-- operations to manipulate
the state of havoc queries\ncreate procedure sys.pause(tag int)\nexternal name
sql.sysmon_pause;" ]
[ "sys", "pause", 0, "bigint", "create procedure
sys.pause(tag bigint)\nexternal name sql.sysmon_pause;" ]
@@ -386,6 +386,9 @@ Ready.
[ "sys", "setmasklen", 0, "inet", "create function \"setmasklen\"
(p inet, mask int) returns inet\n\texternal name inet.\"setmasklen\";" ]
[ "sys", "setmasklen", 1, "inet", "" ]
[ "sys", "setmasklen", 2, "int", "" ]
+[ "sys", "settimeout", 0, "bigint", "-- control the query
time out \ncreate procedure sys.settimeout(\"query\" bigint)\n\texternal name
sql.settimeout;" ]
+[ "sys", "settimeout", 0, "bigint", "create procedure
sys.settimeout(\"query\" bigint, \"session\" bigint)\n\texternal name
sql.settimeout;" ]
+[ "sys", "settimeout", 1, "bigint", "" ]
[ "sys", "shrink", 0, "clob", "-- The contents of this file
are subject to the MonetDB Public License\n-- Version 1.1 (the \"License\");
you may not use this file except in\n-- compliance with the License. You may
obtain a copy of the License at\n--
http://www.monetdb.org/Legal/MonetDBLicense\n--\n-- Software distributed under
the License is distributed on an \"AS IS\"\n-- basis, WITHOUT WARRANTY OF ANY
KIND, either express or implied. See the\n-- License for the specific language
governing rights and limitations\n-- under the License.\n--\n-- The Original
Code is the MonetDB Database System.\n--\n-- The Initial Developer of the
Original Code is CWI.\n-- Copyright August 2008-2013 MonetDB B.V.\n-- All
Rights Reserved.\n\n-- Vacuum a relational table should be done with care.\n--
For, the oid's are used in join-indices.\n\n-- Vacuum of tables may improve IO
performance and disk footprint.\n-- The foreign key constraints should be
dropped before\n-- and re-established after the cluste
r operation.\n\ncreate procedure shrink(sys string, tab string)\n\texternal
name sql.shrink;" ]
[ "sys", "shrink", 1, "clob", "" ]
[ "sys", "srid", 0, "int", "create function srid(g geometry)
returns integer external name geom.\"SRID\";" ]
diff --git a/sql/test/Tests/systemfunctions_nogeom.stable.out
b/sql/test/Tests/systemfunctions_nogeom.stable.out
--- a/sql/test/Tests/systemfunctions_nogeom.stable.out
+++ b/sql/test/Tests/systemfunctions_nogeom.stable.out
@@ -256,7 +256,7 @@ Ready.
[ "sys", "newurl", 3, "clob", "" ]
[ "sys", "optimizer_stats", 0, "table", "-- The
contents of this file are subject to the MonetDB Public License\n-- Version 1.1
(the \"License\"); you may not use this file except in\n-- compliance with the
License. You may obtain a copy of the License at\n--
http://www.monetdb.org/Legal/MonetDBLicense\n--\n-- Software distributed under
the License is distributed on an \"AS IS\"\n-- basis, WITHOUT WARRANTY OF ANY
KIND, either express or implied. See the\n-- License for the specific language
governing rights and limitations\n-- under the License.\n--\n-- The Original
Code is the MonetDB Database System.\n--\n-- The Initial Developer of the
Original Code is CWI.\n-- Copyright August 2008-2013 MonetDB B.V.\n-- All
Rights Reserved.\n\n-- show the optimizer statistics maintained by the SQL
frontend\ncreate function sys.optimizer_stats () \n\treturns table (rewrite
string, count int) \n\texternal name sql.dump_opt_stats;" ]
[ "sys", "optimizers", 0, "table", "-- MONETDB KERNEL
SECTION\n-- optimizer pipe catalog\ncreate function sys.optimizers ()
\n\treturns table (name string, def string, status string)\n\texternal name
sql.optimizers;" ]
-[ "sys", "password_hash", 0, "clob", "-- The contents of
this file are subject to the MonetDB Public License\n-- Version 1.1 (the
\"License\"); you may not use this file except in\n-- compliance with the
License. You may obtain a copy of the License at\n--
http://www.monetdb.org/Legal/MonetDBLicense\n--\n-- Software distributed under
the License is distributed on an \"AS IS\"\n-- basis, WITHOUT WARRANTY OF ANY
KIND, either express or implied. See the\n-- License for the specific language
governing rights and limitations\n-- under the License.\n--\n-- The Original
Code is the MonetDB Database System.\n--\n-- The Initial Developer of the
Original Code is CWI.\n-- Copyright August 2008-2013 MonetDB B.V.\n-- All
Rights Reserved.\n\ncreate function password_hash (username string) \n\treturns
string \n\texternal name sql.password;" ]
+[ "sys", "password_hash", 0, "clob", "-- The contents of
this file are subject to the MonetDB Public License\n-- Version 1.1 (the
\"License\"); you may not use this file except in\n-- compliance with the
License. You may obtain a copy of the License at\n--
http://www.monetdb.org/Legal/MonetDBLicense\n--\n-- Software distributed under
the License is distributed on an \"AS IS\"\n-- basis, WITHOUT WARRANTY OF ANY
KIND, either express or implied. See the\n-- License for the specific language
governing rights and limitations\n-- under the License.\n--\n-- The Original
Code is the MonetDB Database System.\n--\n-- The Initial Developer of the
Original Code is CWI.\n-- Copyright August 2008-2013 MonetDB B.V.\n-- All
Rights Reserved.\n\ncreate function sys.password_hash (username string)
\n\treturns string \n\texternal name sql.password;" ]
[ "sys", "password_hash", 1, "clob", "" ]
[ "sys", "pause", 0, "int", "-- operations to manipulate
the state of havoc queries\ncreate procedure sys.pause(tag int)\nexternal name
sql.sysmon_pause;" ]
[ "sys", "pause", 0, "bigint", "create procedure
sys.pause(tag bigint)\nexternal name sql.sysmon_pause;" ]
@@ -277,6 +277,9 @@ Ready.
[ "sys", "setmasklen", 0, "inet", "create function \"setmasklen\"
(p inet, mask int) returns inet\n\texternal name inet.\"setmasklen\";" ]
[ "sys", "setmasklen", 1, "inet", "" ]
[ "sys", "setmasklen", 2, "int", "" ]
+[ "sys", "settimeout", 0, "bigint", "-- control the query
time out \ncreate procedure sys.settimeout(\"query\" bigint)\n\texternal name
sql.settimeout;" ]
+[ "sys", "settimeout", 0, "bigint", "create procedure
sys.settimeout(\"query\" bigint, \"session\" bigint)\n\texternal name
sql.settimeout;" ]
+[ "sys", "settimeout", 1, "bigint", "" ]
[ "sys", "shrink", 0, "clob", "-- The contents of this file
are subject to the MonetDB Public License\n-- Version 1.1 (the \"License\");
you may not use this file except in\n-- compliance with the License. You may
obtain a copy of the License at\n--
http://www.monetdb.org/Legal/MonetDBLicense\n--\n-- Software distributed under
the License is distributed on an \"AS IS\"\n-- basis, WITHOUT WARRANTY OF ANY
KIND, either express or implied. See the\n-- License for the specific language
governing rights and limitations\n-- under the License.\n--\n-- The Original
Code is the MonetDB Database System.\n--\n-- The Initial Developer of the
Original Code is CWI.\n-- Copyright August 2008-2013 MonetDB B.V.\n-- All
Rights Reserved.\n\n-- Vacuum a relational table should be done with care.\n--
For, the oid's are used in join-indices.\n\n-- Vacuum of tables may improve IO
performance and disk footprint.\n-- The foreign key constraints should be
dropped before\n-- and re-established after the cluste
r operation.\n\ncreate procedure shrink(sys string, tab string)\n\texternal
name sql.shrink;" ]
[ "sys", "shrink", 1, "clob", "" ]
[ "sys", "stddev_pop", 0, "double", "create aggregate
stddev_pop(val tinyint) returns double\n\texternal name \"aggr\".\"stdevp\";" ]
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list