Changeset: df1bf5fe47bb for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/df1bf5fe47bb Modified Files: tools/merovingian/ChangeLog tools/merovingian/daemon/client.c tools/merovingian/daemon/connections.c tools/merovingian/daemon/controlrunner.c tools/merovingian/daemon/discoveryrunner.c tools/merovingian/daemon/forkmserver.c tools/merovingian/daemon/handlers.c tools/merovingian/daemon/merovingian.c tools/merovingian/daemon/merovingian.h tools/merovingian/daemon/monetdbd.1.in tools/merovingian/daemon/multiplex-funnel.c tools/merovingian/daemon/proxy.c tools/merovingian/utils/utils.c tools/merovingian/utils/utils.h Branch: default Log Message:
Added "loglevel" property for monetdbd logging (to merovingian.log). The loglevel can be set to: error or warning or information or debug. The loglevel property can be changed dynamically via command: monetdbd set loglevel=warning /path/to/dbfarm Default the loglevel is set to: information When loglevel is error, only errors are logged. When loglevel is warning, errors and warnings are logged. When loglevel is information, errors and warnings and information messages are logged. When loglevel is debug, all messages are logged. diffs (truncated from 2285 to 300 lines): diff --git a/tools/merovingian/ChangeLog b/tools/merovingian/ChangeLog --- a/tools/merovingian/ChangeLog +++ b/tools/merovingian/ChangeLog @@ -1,6 +1,17 @@ # ChangeLog file for sql/src/backends/monet5/merovingian # This file is updated with mchangelog +* Thu Mar 17 2022 Martin van Dinther <martin.van.dint...@monetdbsolutions.com> +- Added "loglevel" property for monetdbd logging (to merovingian.log). + The loglevel can be set to: error or warning or information or debug. + The loglevel property can be changed dynamically via command: + monetdbd set loglevel=warning /path/to/dbfarm + Default the loglevel is set to: information + When loglevel is error, only errors are logged. + When loglevel is warning, errors and warnings are logged. + When loglevel is information, errors and warnings and information messages + are logged. When loglevel is debug, all messages are logged. + * Fri Feb 18 2022 Sjoerd Mullender <sjo...@acm.org> - There is now a loadmodules property that can be used to add --loadmodule arguments to the mserver5 command line. See the monetdb and mserver5 diff --git a/tools/merovingian/daemon/client.c b/tools/merovingian/daemon/client.c --- a/tools/merovingian/daemon/client.c +++ b/tools/merovingian/daemon/client.c @@ -55,7 +55,6 @@ struct clientdata { static void * handleClient(void *data) - { stream *fdin, *fout; char buf[8096]; @@ -101,7 +100,7 @@ handleClient(void *data) if (isusock) { snprintf(host, sizeof(host), "(local)"); } else if (getpeername(sock, (struct sockaddr *) &saddr, &saddrlen) == -1) { - Mfprintf(stderr, "couldn't get peername of client: %s\n", strerror(errno)); + Mlevelfprintf(ERROR, stderr, "couldn't get peername of client: %s\n", strerror(errno)); snprintf(host, sizeof(host), "(unknown)"); } else { char ghost[512]; @@ -278,7 +277,7 @@ handleClient(void *data) mnstr_printf(fout, "!monetdbd: no such database '%s', please create it first\n", database); } else { mnstr_printf(fout, "!monetdbd: internal error while starting mserver '%s'%s\n", e, strstr(e, "logfile")?"":", please refer to the logs"); - Mfprintf(_mero_ctlerr, "!monetdbd: an internal error has occurred '%s'\n",e); + Mlevelfprintf(ERROR, _mero_ctlerr, "!monetdbd: an internal error has occurred '%s'\n",e); } mnstr_flush(fout, MNSTR_FLUSH_DATA); close_stream(fout); @@ -302,10 +301,10 @@ handleClient(void *data) /* collect possible redirects */ for (stat = top; stat != NULL; stat = stat->next) { if (stat->conns == NULL || stat->conns->val == NULL) { - Mfprintf(stdout, "dropping database without available " + Mlevelfprintf(ERROR, stdout, "dropping database without available " "connections: '%s'\n", stat->dbname); } else if (r == 24) { - Mfprintf(stdout, "dropping database connection because of " + Mlevelfprintf(ERROR, stdout, "dropping database connection because of " "too many already: %s\n", stat->conns->val); } else { redirs[r++] = *stat; @@ -371,11 +370,10 @@ handleClient(void *data) close_stream(fout); close_stream(fdin); } else { - /* Jan2022: disabled logging of next info message to reduce merovingian.log size: - Mfprintf(stdout, "proxying client %s for database '%s' to " + Mlevelfprintf(DEBUG, stdout, "proxying client %s for database '%s' to " "%s?database=%s\n", host, database, redirs[0].conns->val, redirs[0].dbname); - */ + /* merovingian is in control, only consider the first redirect */ mnstr_printf(fout, "^mapi:merovingian://proxy?database=%s\n", redirs[0].dbname); @@ -394,10 +392,10 @@ handleClient(void *data) mnstr_read_block(fdin, buf, 8095, 1); /* eat away client response */ mnstr_printf(fout, "!monetdbd: an internal error has occurred '%s', refer to the logs for details, please try again later\n",e); mnstr_flush(fout, MNSTR_FLUSH_DATA); - Mfprintf(_mero_ctlerr, "!monetdbd: an internal error has occurred '%s'\n",e); + Mlevelfprintf(ERROR, _mero_ctlerr, "!monetdbd: an internal error has occurred '%s'\n",e); close_stream(fout); close_stream(fdin); - Mfprintf(stdout, "starting a proxy failed: %s\n", e); + Mlevelfprintf(ERROR, stdout, "starting a proxy failed: %s\n", e); msab_freeStatus(&top); self->dead = true; return(e); @@ -463,7 +461,7 @@ acceptConnections(int socks[3]) *threadp = p->next; free(p); if (e != NO_ERR) { - Mfprintf(stderr, "client error: %s\n", + Mlevelfprintf(ERROR, stderr, "client error: %s\n", getErrMsg((char *) e)); freeErr(e); } @@ -589,12 +587,12 @@ acceptConnections(int socks[3]) case '1': /* filedescriptor, no way */ closesocket(sock); - Mfprintf(stderr, "client error: fd passing not supported\n"); + Mlevelfprintf(ERROR, stderr, "client error: fd passing not supported\n"); continue; default: /* some unknown state */ closesocket(sock); - Mfprintf(stderr, "client error: unknown initial byte\n"); + Mlevelfprintf(ERROR, stderr, "client error: unknown initial byte\n"); continue; } } @@ -609,7 +607,7 @@ acceptConnections(int socks[3]) if (p) free(p); closesocket(sock); - Mfprintf(stderr, "cannot allocate memory\n"); + Mlevelfprintf(ERROR, stderr, "cannot allocate memory\n"); continue; } data->sock = sock; diff --git a/tools/merovingian/daemon/connections.c b/tools/merovingian/daemon/connections.c --- a/tools/merovingian/daemon/connections.c +++ b/tools/merovingian/daemon/connections.c @@ -96,13 +96,13 @@ openConnectionIP(int *socks, bool udp, c } #if !defined(SOCK_CLOEXEC) && defined(HAVE_FCNTL) if (fcntl(sock, F_SETFD, FD_CLOEXEC) < 0) - Mfprintf(log, "fcntl FD_CLOEXEC: %s", strerror(e)); + Mlevelfprintf(ERROR, log, "fcntl FD_CLOEXEC: %s", strerror(e)); #endif if (rp->ai_family == AF_INET6 && setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (const char *) &(int){0}, sizeof(int)) == -1) - Mfprintf(log, "setsockopt IPV6_V6ONLY: %s", strerror(e)); + Mlevelfprintf(ERROR, log, "setsockopt IPV6_V6ONLY: %s", strerror(e)); if (!udp) { if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, @@ -114,12 +114,12 @@ openConnectionIP(int *socks, bool udp, c #ifdef SO_EXCLUSIVEADDRUSE if (setsockopt(sock, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (const char *) &on, sizeof on) < 0) - Mfprintf(log, "setsockopt SO_EXCLUSIVEADDRUSE: %s", strerror(e)); + Mlevelfprintf(ERROR, log, "setsockopt SO_EXCLUSIVEADDRUSE: %s", strerror(e)); #endif #ifdef SO_EXCLBIND if (setsockopt(sock, SOL_SOCKET, SO_EXCLBIND, (const char *) &on, sizeof on) < 0) - Mfprintf(log, "setsockopt SO_EXCLBIND: %s", strerror(e)); + Mlevelfprintf(ERROR, log, "setsockopt SO_EXCLBIND: %s", strerror(e)); #endif } @@ -148,9 +148,9 @@ openConnectionIP(int *socks, bool udp, c snprintf(sport, sizeof(sport), "%hu", port); } if (udp) - Mfprintf(log, "listening for UDP messages on %s:%s\n", host, sport); + Mlevelfprintf(INFORMATION, log, "listening for UDP messages on %s:%s\n", host, sport); else - Mfprintf(log, "accepting connections on TCP socket %s:%s\n", host, sport); + Mlevelfprintf(INFORMATION, log, "accepting connections on TCP socket %s:%s\n", host, sport); socks[nsock++] = sock; break; /* working */ } @@ -215,13 +215,13 @@ openConnectionUNIX(int *ret, const char umask(omask); /* keep queue of 5 */ - if(listen(sock, 5) == -1) { + if (listen(sock, 5) == -1) { closesocket(sock); return(newErr("setting UNIX stream socket at %s to listen failed: %s", path, strerror(errno))); } - Mfprintf(log, "accepting connections on UNIX domain socket %s\n", path); + Mlevelfprintf(INFORMATION, log, "accepting connections on UNIX domain socket %s\n", path); *ret = sock; return(NO_ERR); diff --git a/tools/merovingian/daemon/controlrunner.c b/tools/merovingian/daemon/controlrunner.c --- a/tools/merovingian/daemon/controlrunner.c +++ b/tools/merovingian/daemon/controlrunner.c @@ -163,7 +163,7 @@ control_authorise( if (getConfNum(_mero_props, "control") == 0 || getConfVal(_mero_props, "passphrase") == NULL) { - Mfprintf(_mero_ctlout, "%s: remote control disabled\n", host); + Mlevelfprintf(INFORMATION, _mero_ctlout, "%s: remote control disabled\n", host); mnstr_printf(fout, "!access denied\n"); mnstr_flush(fout, MNSTR_FLUSH_DATA); return 0; @@ -172,14 +172,14 @@ control_authorise( pwd = mcrypt_hashPassword(algo, getConfVal(_mero_props, "passphrase"), chal); if (!pwd) { - Mfprintf(_mero_ctlout, "%s: Allocation failure during authentication\n", host); + Mlevelfprintf(ERROR, _mero_ctlout, "%s: Allocation failure during authentication\n", host); mnstr_printf(fout, "!allocation failure\n"); mnstr_flush(fout, MNSTR_FLUSH_DATA); return 0; } if (strcmp(pwd, passwd) != 0) { free(pwd); - Mfprintf(_mero_ctlout, "%s: permission denied " + Mlevelfprintf(ERROR, _mero_ctlout, "%s: permission denied " "(bad passphrase)\n", host); mnstr_printf(fout, "!access denied\n"); mnstr_flush(fout, MNSTR_FLUSH_DATA); @@ -257,11 +257,11 @@ static void ctl_handle_client( continue; } /* hmmm error ... give up */ - Mfprintf(_mero_ctlerr, "%s: error reading from control " + Mlevelfprintf(ERROR, _mero_ctlerr, "%s: error reading from control " "channel: %s\n", origin, strerror(errno)); break; } else if (pos == -2) { - Mfprintf(_mero_ctlerr, "%s: time-out reading from " + Mlevelfprintf(ERROR, _mero_ctlerr, "%s: time-out reading from " "control channel, disconnecting client\n", origin); break; } else { @@ -273,7 +273,7 @@ static void ctl_handle_client( p = strchr(q, '\n'); if (p == NULL) { /* skip, must be garbage */ - Mfprintf(_mero_ctlerr, "%s: skipping garbage on control " + Mlevelfprintf(WARNING, _mero_ctlerr, "%s: skipping garbage on control " "channel: %s\n", origin, buf); pos = 0; continue; @@ -287,7 +287,7 @@ static void ctl_handle_client( /* format is simple: database<space>command */ if ((p = strchr(q, ' ')) == NULL) { - Mfprintf(_mero_ctlerr, "%s: malformed control signal: %s\n", + Mlevelfprintf(ERROR, _mero_ctlerr, "%s: malformed control signal: %s\n", origin, q); } else { *p++ = '\0'; @@ -300,13 +300,13 @@ static void ctl_handle_client( len = snprintf(buf2, sizeof(buf2), "internal error, please review the logs\n"); send_client("!"); - Mfprintf(_mero_ctlerr, "%s: start: msab_getStatus: " + Mlevelfprintf(ERROR, _mero_ctlerr, "%s: start: msab_getStatus: " "%s\n", origin, e); freeErr(e); continue; } else { if (stats == NULL) { - Mfprintf(_mero_ctlerr, "%s: received start signal " + Mlevelfprintf(ERROR, _mero_ctlerr, "%s: received start signal " "for database not under merovingian " "control: %s\n", origin, q); len = snprintf(buf2, sizeof(buf2), @@ -316,7 +316,7 @@ static void ctl_handle_client( } if (stats->state == SABdbRunning) { - Mfprintf(_mero_ctlerr, "%s: received start signal " + Mlevelfprintf(ERROR, _mero_ctlerr, "%s: received start signal " "for already running database: %s\n", origin, q); len = snprintf(buf2, sizeof(buf2), @@ -329,7 +329,7 @@ static void ctl_handle_client( msab_freeStatus(&stats); } if ((e = forkMserver(q, &stats, true)) != NO_ERR) { - Mfprintf(_mero_ctlerr, "%s: failed to fork mserver: " + Mlevelfprintf(ERROR, _mero_ctlerr, "%s: failed to fork mserver: " "%s\n", origin, getErrMsg(e)); len = snprintf(buf2, sizeof(buf2), "starting '%s' failed: %s\n", @@ -340,7 +340,7 @@ static void ctl_handle_client( } else { len = snprintf(buf2, sizeof(buf2), "OK\n"); send_client("="); - Mfprintf(_mero_ctlout, "%s: started '%s'\n", + Mlevelfprintf(INFORMATION, _mero_ctlout, "%s: started '%s'\n", origin, q); } @@ -378,7 +378,7 @@ static void ctl_handle_client( len = snprintf(buf2, sizeof(buf2), "internal error, please review the logs\n"); send_client("!"); - Mfprintf(_mero_ctlerr, "%s: start: msab_getStatus: " + Mlevelfprintf(ERROR, _mero_ctlerr, "%s: start: msab_getStatus: " "%s\n", origin, e); freeErr(e); continue; @@ -391,7 +391,7 @@ static void ctl_handle_client( } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org