Changeset: 128ffa7e3973 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=128ffa7e3973
Modified Files:
monetdb5/modules/mal/sysmon.c
sql/backends/monet5/sql_upgrades.c
sql/scripts/26_sysmon.sql
sql/test/Users/Tests/sessioncontrol.stable.err
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.32bit
sql/test/emptydb/Tests/check.stable.out.int128
Branch: linear-hashing
Log Message:
Grant sys.pause, sys.resume and sys.stop to the public. Users can manipulate
their own queries
diffs (truncated from 326 to 300 lines):
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
@@ -129,7 +129,9 @@ SYSMONqueue(Client cntxt, MalBlkPtr mb,
str
SYSMONpause(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{ lng i, tag = 0;
+{
+ bool set = false;
+ lng tag = 0;
(void) mb;
(void) stk;
(void) pci;
@@ -143,24 +145,29 @@ SYSMONpause(Client cntxt, MalBlkPtr mb,
case TYPE_hge:
/* Does this happen?
* If so, what do we have TODO ? */
- throw(MAL, "SYSMONpause", "type hge not handled, yet");
+ throw(MAL, "SYSMONpause", SQLSTATE(42000) "type hge not
handled, yet");
#endif
default:
- throw(MAL, "SYSMONpause", "Pause requires integer");
+ throw(MAL, "SYSMONpause", SQLSTATE(42000) "Pause requires
integer");
}
+ if (tag < 1)
+ throw(MAL, "SYSMONpause", SQLSTATE(42000) "Tag must be
positive");
MT_lock_set(&mal_delayLock);
- for ( i = 0; QRYqueue[i].tag; i++)
+ for (lng i = 0; QRYqueue[i].tag; i++)
if( (lng) QRYqueue[i].tag == tag && (QRYqueue[i].cntxt->user ==
cntxt->user || cntxt->user == MAL_ADMIN)){
QRYqueue[i].stk->status = 'p';
QRYqueue[i].status = "paused";
+ set = true;
}
MT_lock_unset(&mal_delayLock);
- return MAL_SUCCEED;
+ return set ? MAL_SUCCEED : createException(MAL, "SYSMONpause",
SQLSTATE(42000) "Tag " LLFMT " unknown", tag);
}
str
SYSMONresume(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{ lng i,tag = 0;
+{
+ bool set = false;
+ lng tag = 0;
(void) mb;
(void) stk;
(void) pci;
@@ -174,24 +181,29 @@ SYSMONresume(Client cntxt, MalBlkPtr mb,
case TYPE_hge:
/* Does this happen?
* If so, what do we have TODO ? */
- throw(MAL, "SYSMONresume", "type hge not handled, yet");
+ throw(MAL, "SYSMONresume", SQLSTATE(42000) "type hge not
handled, yet");
#endif
default:
- throw(MAL, "SYSMONresume", "Resume requires integer");
+ throw(MAL, "SYSMONresume", SQLSTATE(42000) "Resume requires
integer");
}
+ if (tag < 1)
+ throw(MAL, "SYSMONresume", SQLSTATE(42000) "Tag must be
positive");
MT_lock_set(&mal_delayLock);
- for ( i = 0; QRYqueue[i].tag; i++)
+ for (lng i = 0; QRYqueue[i].tag; i++)
if( (lng)QRYqueue[i].tag == tag && (QRYqueue[i].cntxt->user ==
cntxt->user || cntxt->user == MAL_ADMIN)){
QRYqueue[i].stk->status = 0;
QRYqueue[i].status = "running";
+ set = true;
}
MT_lock_unset(&mal_delayLock);
- return MAL_SUCCEED;
+ return set ? MAL_SUCCEED : createException(MAL, "SYSMONresume",
SQLSTATE(42000) "Tag " LLFMT " unknown", tag);
}
str
SYSMONstop(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{ lng i,tag = 0;
+{
+ bool set = false;
+ lng tag = 0;
(void) mb;
(void) stk;
(void) pci;
@@ -205,17 +217,20 @@ SYSMONstop(Client cntxt, MalBlkPtr mb, M
case TYPE_hge:
/* Does this happen?
* If so, what do we have TODO ? */
- throw(MAL, "SYSMONstop", "type hge not handled, yet");
+ throw(MAL, "SYSMONstop", SQLSTATE(42000) "type hge not handled,
yet");
#endif
default:
- throw(MAL, "SYSMONstop", "Stop requires integer");
+ throw(MAL, "SYSMONstop", SQLSTATE(42000) "Stop requires
integer");
}
+ if (tag < 1)
+ throw(MAL, "SYSMONstop", SQLSTATE(42000) "Tag must be
positive");
MT_lock_set(&mal_delayLock);
- for ( i = 0; QRYqueue[i].tag; i++)
+ for (lng i = 0; QRYqueue[i].tag; i++)
if( (lng) QRYqueue[i].tag == tag && (QRYqueue[i].cntxt->user ==
cntxt->user || cntxt->user == MAL_ADMIN)){
QRYqueue[i].stk->status = 'q';
QRYqueue[i].status = "stopping";
+ set = true;
}
MT_lock_unset(&mal_delayLock);
- return MAL_SUCCEED;
+ return set ? MAL_SUCCEED : createException(MAL, "SYSMONstop",
SQLSTATE(42000) "Tag " LLFMT " unknown", tag);
}
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
@@ -2542,18 +2542,44 @@ sql_update_linear_hashing(Client c, mvc
"grant select on sys.queue to public;\n"
"create procedure sys.pause(tag tinyint)\n"
- "external name sql.sysmon_pause;\n"
+ " external name sql.sysmon_pause;\n"
+ "grant execute on procedure sys.pause(tinyint) to
public;\n"
"create procedure sys.resume(tag tinyint)\n"
- "external name sql.sysmon_resume;\n"
+ " external name sql.sysmon_resume;\n"
+ "grant execute on procedure sys.resume(tinyint) to
public;\n"
"create procedure sys.stop(tag tinyint)\n"
"external name sql.sysmon_stop;\n"
+ "grant execute on procedure sys.stop(tinyint) to
public;\n"
"create procedure sys.pause(tag smallint)\n"
- "external name sql.sysmon_pause;\n"
+ " external name sql.sysmon_pause;\n"
+ "grant execute on procedure sys.pause(smallint) to
public;\n"
"create procedure sys.resume(tag smallint)\n"
- "external name sql.sysmon_resume;\n"
+ " external name sql.sysmon_resume;\n"
+ "grant execute on procedure sys.resume(smallint) to
public;\n"
"create procedure sys.stop(tag smallint)\n"
- "external name sql.sysmon_stop;\n");
+ " external name sql.sysmon_stop;\n"
+ "grant execute on procedure sys.stop(smallint) to
public;\n"
+
+ "create procedure sys.pause(tag int)\n"
+ " external name sql.sysmon_pause;\n"
+ "grant execute on procedure sys.pause(int) to public;\n"
+ "create procedure sys.resume(tag int)\n"
+ " external name sql.sysmon_resume;\n"
+ "grant execute on procedure sys.resume(int) to
public;\n"
+ "create procedure sys.stop(tag int)\n"
+ " external name sql.sysmon_stop;\n"
+ "grant execute on procedure sys.stop(int) to public;\n"
+
+ "create procedure sys.pause(tag bigint)\n"
+ " external name sql.sysmon_pause;\n"
+ "grant execute on procedure sys.pause(bigint) to
public;\n"
+ "create procedure sys.resume(tag bigint)\n"
+ " external name sql.sysmon_resume;\n"
+ "grant execute on procedure sys.resume(bigint) to
public;\n"
+ "create procedure sys.stop(tag bigint)\n"
+ " external name sql.sysmon_stop;\n"
+ "grant execute on procedure sys.stop(bigint) 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
@@ -28,28 +28,40 @@ grant select on sys.queue to public;
-- operations to manipulate the state of havoc queries
create procedure sys.pause(tag tinyint)
external name sql.sysmon_pause;
+grant execute on procedure sys.pause(tinyint) to public;
create procedure sys.resume(tag tinyint)
external name sql.sysmon_resume;
+grant execute on procedure sys.resume(tinyint) to public;
create procedure sys.stop(tag tinyint)
external name sql.sysmon_stop;
+grant execute on procedure sys.stop(tinyint) to public;
create procedure sys.pause(tag smallint)
external name sql.sysmon_pause;
+grant execute on procedure sys.pause(smallint) to public;
create procedure sys.resume(tag smallint)
external name sql.sysmon_resume;
+grant execute on procedure sys.resume(smallint) to public;
create procedure sys.stop(tag smallint)
external name sql.sysmon_stop;
+grant execute on procedure sys.stop(smallint) to public;
create procedure sys.pause(tag int)
external name sql.sysmon_pause;
+grant execute on procedure sys.pause(int) to public;
create procedure sys.resume(tag int)
external name sql.sysmon_resume;
+grant execute on procedure sys.resume(int) to public;
create procedure sys.stop(tag int)
external name sql.sysmon_stop;
+grant execute on procedure sys.stop(int) to public;
create procedure sys.pause(tag bigint)
external name sql.sysmon_pause;
+grant execute on procedure sys.pause(bigint) to public;
create procedure sys.resume(tag bigint)
external name sql.sysmon_resume;
+grant execute on procedure sys.resume(bigint) to public;
create procedure sys.stop(tag bigint)
external name sql.sysmon_stop;
+grant execute on procedure sys.stop(bigint) to public;
diff --git a/sql/test/Users/Tests/sessioncontrol.stable.err
b/sql/test/Users/Tests/sessioncontrol.stable.err
--- a/sql/test/Users/Tests/sessioncontrol.stable.err
+++ b/sql/test/Users/Tests/sessioncontrol.stable.err
@@ -34,7 +34,7 @@ QUERY = call setquerytimeout(-1);
ERROR = !Query timeout should be >= 0
MAPI = (monetdb) /var/tmp/mtest-61463/.s.monetdb.39827
QUERY = call setworkerlimit( -1);
-ERROR = !At least one worker needed
+ERROR = !The number of workers cannot be negative
# 18:15:20 >
# 18:15:20 > "Done."
diff --git a/sql/test/emptydb/Tests/check.stable.out
b/sql/test/emptydb/Tests/check.stable.out
--- a/sql/test/emptydb/Tests/check.stable.out
+++ b/sql/test/emptydb/Tests/check.stable.out
@@ -5021,6 +5021,10 @@ drop function pcre_replace(string, strin
[ "newurl", "public", "EXECUTE", "monetdb", 0 ]
[ "number", "public", "EXECUTE", "monetdb", 0 ]
[ "output", "public", "EXECUTE", "monetdb", 0 ]
+[ "pause", "public", "EXECUTE", "monetdb", 0 ]
+[ "pause", "public", "EXECUTE", "monetdb", 0 ]
+[ "pause", "public", "EXECUTE", "monetdb", 0 ]
+[ "pause", "public", "EXECUTE", "monetdb", 0 ]
[ "prepared_statements", "public", "EXECUTE", "monetdb",
0 ]
[ "prepared_statements_args", "public", "EXECUTE", "monetdb",
0 ]
[ "quantile", "public", "EXECUTE", "monetdb", 0 ]
@@ -5045,6 +5049,10 @@ drop function pcre_replace(string, strin
[ "queue", "public", "EXECUTE", "monetdb", 0 ]
[ "radians", "public", "EXECUTE", "monetdb", 0 ]
[ "rejects", "public", "EXECUTE", "monetdb", 0 ]
+[ "resume", "public", "EXECUTE", "monetdb", 0 ]
+[ "resume", "public", "EXECUTE", "monetdb", 0 ]
+[ "resume", "public", "EXECUTE", "monetdb", 0 ]
+[ "resume", "public", "EXECUTE", "monetdb", 0 ]
[ "reverse_qual", "public", "EXECUTE", "monetdb", 0
]
[ "reverse_seq", "public", "EXECUTE", "monetdb", 0
]
[ "right_shift", "public", "EXECUTE", "monetdb", 0
]
@@ -5199,6 +5207,10 @@ drop function pcre_replace(string, strin
[ "stddev_samp", "public", "EXECUTE", "monetdb", 0
]
[ "stddev_samp", "public", "EXECUTE", "monetdb", 0
]
[ "stddev_samp", "public", "EXECUTE", "monetdb", 0
]
+[ "stop", "public", "EXECUTE", "monetdb", 0 ]
+[ "stop", "public", "EXECUTE", "monetdb", 0 ]
+[ "stop", "public", "EXECUTE", "monetdb", 0 ]
+[ "stop", "public", "EXECUTE", "monetdb", 0 ]
[ "str_to_date", "public", "EXECUTE", "monetdb", 0
]
[ "str_to_time", "public", "EXECUTE", "monetdb", 0
]
[ "str_to_timestamp", "public", "EXECUTE", "monetdb", 0
]
diff --git a/sql/test/emptydb/Tests/check.stable.out.32bit
b/sql/test/emptydb/Tests/check.stable.out.32bit
--- a/sql/test/emptydb/Tests/check.stable.out.32bit
+++ b/sql/test/emptydb/Tests/check.stable.out.32bit
@@ -5004,6 +5004,10 @@ drop function pcre_replace(string, strin
[ "newurl", "public", "EXECUTE", "monetdb", 0 ]
[ "number", "public", "EXECUTE", "monetdb", 0 ]
[ "output", "public", "EXECUTE", "monetdb", 0 ]
+[ "pause", "public", "EXECUTE", "monetdb", 0 ]
+[ "pause", "public", "EXECUTE", "monetdb", 0 ]
+[ "pause", "public", "EXECUTE", "monetdb", 0 ]
+[ "pause", "public", "EXECUTE", "monetdb", 0 ]
[ "prepared_statements", "public", "EXECUTE", "monetdb",
0 ]
[ "prepared_statements_args", "public", "EXECUTE", "monetdb",
0 ]
[ "quantile", "public", "EXECUTE", "monetdb", 0 ]
@@ -5028,6 +5032,10 @@ drop function pcre_replace(string, strin
[ "queue", "public", "EXECUTE", "monetdb", 0 ]
[ "radians", "public", "EXECUTE", "monetdb", 0 ]
[ "rejects", "public", "EXECUTE", "monetdb", 0 ]
+[ "resume", "public", "EXECUTE", "monetdb", 0 ]
+[ "resume", "public", "EXECUTE", "monetdb", 0 ]
+[ "resume", "public", "EXECUTE", "monetdb", 0 ]
+[ "resume", "public", "EXECUTE", "monetdb", 0 ]
[ "reverse_qual", "public", "EXECUTE", "monetdb", 0
]
[ "reverse_seq", "public", "EXECUTE", "monetdb", 0
]
[ "right_shift", "public", "EXECUTE", "monetdb", 0
]
@@ -5182,6 +5190,10 @@ drop function pcre_replace(string, strin
[ "stddev_samp", "public", "EXECUTE", "monetdb", 0
]
[ "stddev_samp", "public", "EXECUTE", "monetdb", 0
]
[ "stddev_samp", "public", "EXECUTE", "monetdb", 0
]
+[ "stop", "public", "EXECUTE", "monetdb", 0 ]
+[ "stop", "public", "EXECUTE", "monetdb", 0 ]
+[ "stop", "public", "EXECUTE", "monetdb", 0 ]
+[ "stop", "public", "EXECUTE", "monetdb", 0 ]
[ "str_to_date", "public", "EXECUTE", "monetdb", 0
]
[ "str_to_time", "public", "EXECUTE", "monetdb", 0
]
[ "str_to_timestamp", "public", "EXECUTE", "monetdb", 0
]
diff --git a/sql/test/emptydb/Tests/check.stable.out.int128
b/sql/test/emptydb/Tests/check.stable.out.int128
--- a/sql/test/emptydb/Tests/check.stable.out.int128
+++ b/sql/test/emptydb/Tests/check.stable.out.int128
@@ -5245,6 +5245,10 @@ drop function pcre_replace(string, strin
[ "newurl", "public", "EXECUTE", "monetdb", 0 ]
[ "number", "public", "EXECUTE", "monetdb", 0 ]
[ "output", "public", "EXECUTE", "monetdb", 0 ]
+[ "pause", "public", "EXECUTE", "monetdb", 0 ]
+[ "pause", "public", "EXECUTE", "monetdb", 0 ]
+[ "pause", "public", "EXECUTE", "monetdb", 0 ]
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list