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

Reply via email to