Changeset: 73891dff281c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/73891dff281c
Modified Files:
monetdb5/mal/mal.c
monetdb5/mal/mal_client.c
monetdb5/mal/mal_private.h
sql/backends/monet5/sql_scenario.c
Branch: Dec2023
Log Message:
Move client context printing to SQL layer.
We can now print whether a context has an open transaction.
We also print the name of the client thread responsible for the context.
diffs (135 lines):
diff --git a/monetdb5/mal/mal.c b/monetdb5/mal/mal.c
--- a/monetdb5/mal/mal.c
+++ b/monetdb5/mal/mal.c
@@ -53,12 +53,6 @@ mal_version(void)
return MONETDB5_VERSION;
}
-static void
-MALprintinfo(void)
-{
- MCprintinfo();
-}
-
/*
* Initialization of the MAL context
*/
@@ -99,8 +93,6 @@ mal_init(char *modules[], bool embedded,
return -1;
initNamespace();
- GDKprintinforegister(MALprintinfo);
-
err = malBootstrap(modules, embedded, initpasswd);
if (err !=MAL_SUCCEED) {
mal_client_reset();
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
@@ -587,36 +587,3 @@ MCvalid(Client tc)
MT_lock_unset(&mal_contextLock);
return 0;
}
-
-void
-MCprintinfo(void)
-{
- int nrun = 0, nfinish = 0, nblock = 0;
-
- MT_lock_set(&mal_contextLock);
- for (Client c = mal_clients; c < mal_clients + MAL_MAXCLIENTS; c++) {
- switch (c->mode) {
- case RUNCLIENT:
- /* running */
- nrun++;
- if (c->idle)
- printf("client %d, user %s, using %"PRIu64"
bytes of transient space, idle since %s", c->idx, c->username, (uint64_t)
ATOMIC_GET(&c->qryctx.datasize), ctime(&c->idle));
- else
- printf("client %d, user %s, using %"PRIu64"
bytes of transient space\n", c->idx, c->username, (uint64_t)
ATOMIC_GET(&c->qryctx.datasize));
- break;
- case FINISHCLIENT:
- /* finishing */
- nfinish++;
- break;
- case BLOCKCLIENT:
- /* blocked */
- nblock++;
- break;
- case FREECLIENT:
- break;
- }
- }
- MT_lock_unset(&mal_contextLock);
- printf("%d active clients, %d finishing clients, %d blocked clients\n",
- nrun, nfinish, nblock);
-}
diff --git a/monetdb5/mal/mal_private.h b/monetdb5/mal/mal_private.h
--- a/monetdb5/mal/mal_private.h
+++ b/monetdb5/mal/mal_private.h
@@ -80,6 +80,3 @@ void mal_runtime_reset(void)
char *dupError(const char *err)
__attribute__((__visibility__("hidden"), __returns_nonnull__));
-
-void MCprintinfo(void)
- __attribute__((__visibility__("hidden")));
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -87,10 +87,55 @@ static MT_Lock sql_contextLock = MT_LOCK
static str SQLinit(Client c, const char *initpasswd);
static str master_password = NULL;
+#include "mal.h"
+#include "mal_client.h"
+
+static void
+CLIENTprintinfo(void)
+{
+ int nrun = 0, nfinish = 0, nblock = 0;
+ char buf[32];
+ char tbuf[64];
+ struct tm tm;
+
+ MT_lock_set(&mal_contextLock);
+ for (Client c = mal_clients; c < mal_clients + MAL_MAXCLIENTS; c++) {
+ switch (c->mode) {
+ case RUNCLIENT:
+ /* running */
+ nrun++;
+ if (c->qryctx.maxmem)
+ snprintf(buf, sizeof(buf), " (max %"PRIu64")",
(uint64_t) c->qryctx.maxmem);
+ else
+ buf[0] = 0;
+ if (c->idle) {
+ localtime_r(&c->idle, &tm);
+ strftime(tbuf, sizeof(tbuf), ", idle since %F
%H:%M:%S%z", &tm);
+ } else
+ tbuf[0] = 0;
+ printf("client %d, user %s, thread %s, using %"PRIu64"
bytes of transient space%s%s%s\n", c->idx, c->username, c->mythread ?
c->mythread : "?", (uint64_t) ATOMIC_GET(&c->qryctx.datasize), buf, tbuf,
c->sqlcontext && ((backend *) c->sqlcontext)->mvc && ((backend *)
c->sqlcontext)->mvc->session && ((backend *) c->sqlcontext)->mvc->session->tr
&& ((backend *) c->sqlcontext)->mvc->session->tr->active ? ", active
transaction" : "");
+ break;
+ case FINISHCLIENT:
+ /* finishing */
+ nfinish++;
+ break;
+ case BLOCKCLIENT:
+ /* blocked */
+ nblock++;
+ break;
+ case FREECLIENT:
+ break;
+ }
+ }
+ MT_lock_unset(&mal_contextLock);
+ printf("%d active clients, %d finishing clients, %d blocked clients;
max: %d\n",
+ nrun, nfinish, nblock, MAL_MAXCLIENTS);
+}
+
static void
SQLprintinfo(void)
{
- /* we need to start printing SQL info here... */
+ CLIENTprintinfo();
store_printinfo(SQLstore);
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]