Update of /cvsroot/monetdb/sql/src/backends/monet5/merovingian
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv27720

Modified Files:
        merovingian.c merovingian_connections.c 
        merovingian_controlrunner.c 
Log Message:
setup a separate log channel for control commands, so we don't have to 
constantly tell the message originates from a control signal

U merovingian_controlrunner.c
Index: merovingian_controlrunner.c
===================================================================
RCS file: 
/cvsroot/monetdb/sql/src/backends/monet5/merovingian/merovingian_controlrunner.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- merovingian_controlrunner.c 9 Sep 2009 11:03:18 -0000       1.5
+++ merovingian_controlrunner.c 9 Sep 2009 11:48:25 -0000       1.6
@@ -81,8 +81,8 @@
                                                continue;
                                        }
                                        /* hmmm error ... give up */
-                                       Mfprintf(stderr, "error reading from 
control channel: %s\n",
-                                                       strerror(errno));
+                                       Mfprintf(_mero_ctlerr, "error reading 
from control "
+                                                       "channel: %s\n", 
strerror(errno));
                                        break;
                                } else {
                                        buf[pos] = '\0';
@@ -93,8 +93,8 @@
                        p = strchr(q, '\n');
                        if (p == NULL) {
                                /* skip, must be garbage */
-                               Mfprintf(stderr, "skipping garbage on control 
channel: %s\n",
-                                               buf);
+                               Mfprintf(_mero_ctlerr, "skipping garbage on 
control "
+                                               "channel: %s\n", buf);
                                pos = 0;
                                continue;
                        }
@@ -107,15 +107,14 @@
 
                        /* format is simple: database<space>command */
                        if ((p = strchr(q, ' ')) == NULL) {
-                               Mfprintf(stderr, "malformed control signal: 
%s\n", q);
+                               Mfprintf(_mero_ctlerr, "malformed control 
signal: %s\n", q);
                        } else {
                                *p++ = '\0';
                                if (strcmp(p, "start") == 0) {
                                        err e;
-                                       Mfprintf(stdout, "starting database 
'%s' "
-                                                       "due to control 
signal\n", q);
+                                       Mfprintf(_mero_ctlout, "starting 
database '%s'\n", q);
                                        if ((e = forkMserver(q, &stats, 1)) != 
NO_ERR) {
-                                               Mfprintf(stderr, "failed to 
fork mserver: %s\n",
+                                               Mfprintf(_mero_ctlerr, "failed 
to fork mserver: %s\n",
                                                                getErrMsg(e));
                                                len = snprintf(buf2, 
sizeof(buf2),
                                                                "starting '%s' 
failed: %s\n",
@@ -141,12 +140,12 @@
                                        while (dp != NULL) {
                                                if (strcmp(dp->dbname, q) == 0) 
{
                                                        if (strcmp(p, "stop") 
== 0) {
-                                                               
Mfprintf(stdout, "stopping database '%s' "
-                                                                               
"due to control signal\n", q);
+                                                               
Mfprintf(_mero_ctlout, "stopping "
+                                                                               
"database '%s'\n", q);
                                                                
terminateProcess(dp);
                                                        } else {
-                                                               
Mfprintf(stdout, "killing database '%s' "
-                                                                               
"due to control signal\n", q);
+                                                               
Mfprintf(_mero_ctlout, "killing "
+                                                                               
"database '%s'\n", q);
                                                                kill(dp->pid, 
SIGKILL);
                                                        }
                                                        len = snprintf(buf2, 
sizeof(buf2), "OK\n");
@@ -156,7 +155,7 @@
                                                dp = dp->next;
                                        }
                                        if (dp == NULL) {
-                                               Mfprintf(stderr, "received 
control stop signal for "
+                                               Mfprintf(_mero_ctlerr, 
"received stop signal for "
                                                                "database not 
under merovingian control: %s\n",
                                                                q);
                                                len = snprintf(buf2, 
sizeof(buf2),
@@ -167,30 +166,33 @@
                                } else if (strcmp(p, "create") == 0) {
                                        err e = db_create(q);
                                        if (e != NO_ERR) {
-                                               Mfprintf(stderr, "failed to 
create "
+                                               Mfprintf(_mero_ctlerr, "failed 
to create "
                                                                "database '%s': 
%s\n", q, getErrMsg(e));
                                                len = snprintf(buf2, 
sizeof(buf2),
                                                                "%s\n", 
getErrMsg(e));
                                                send(msgsock, buf2, len, 0);
-                                               freeErr(e);
+                                               free(e);
                                        } else {
-                                               Mfprintf(stdout, "created 
database '%s'\n", q);
+                                               Mfprintf(_mero_ctlout, "created 
database '%s'\n", q);
                                                len = snprintf(buf2, 
sizeof(buf2), "OK\n");
                                                send(msgsock, buf2, len, 0);
                                        }
                                } else if (strcmp(p, "destroy") == 0) {
                                        err e = db_destroy(q);
                                        if (e != NO_ERR) {
-                                               Mfprintf(stderr, "failed to 
destroy "
+                                               Mfprintf(_mero_ctlerr, "failed 
to destroy "
                                                                "database '%s': 
%s\n", q, getErrMsg(e));
                                                len = snprintf(buf2, 
sizeof(buf2),
                                                                "%s\n", 
getErrMsg(e));
                                                send(msgsock, buf2, len, 0);
-                                               freeErr(e);
+                                               free(e);
                                        } else {
-                                               /* FIXME: immediately 
deregister with neighbour
-                                                * discovery service */
-                                               Mfprintf(stdout, "destroyed 
database '%s'\n", q);
+                                               /* we can leave without tag, 
will remove all */
+                                               snprintf(buf2, sizeof(buf2),
+                                                               "LEAV %s 
mapi:monetdb://%s:%hu/",
+                                                               q, 
_mero_hostname, _mero_port);
+                                               broadcast(buf2);
+                                               Mfprintf(_mero_ctlout, 
"destroyed database '%s'\n", q);
                                                len = snprintf(buf2, 
sizeof(buf2), "OK\n");
                                                send(msgsock, buf2, len, 0);
                                        }
@@ -208,8 +210,8 @@
                                                                "discovery 
service is globally disabled, "
                                                                "enable it 
first\n");
                                                send(msgsock, buf2, len, 0);
-                                               Mfprintf(stderr, "share: cannot 
perform client share "
-                                                               "request: 
discovery service is globally "
+                                               Mfprintf(_mero_ctlerr, "share: 
cannot perform client "
+                                                               "share request: 
discovery service is globally "
                                                                "disabled in 
%s\n", _mero_conffile);
                                                continue;
                                        }
@@ -218,7 +220,8 @@
                                                len = snprintf(buf2, 
sizeof(buf2),
                                                                "internal 
error, please review the logs\n");
                                                send(msgsock, buf2, len, 0);
-                                               Mfprintf(stderr, "share: 
SABAOTHgetStatus: %s\n", e);
+                                               Mfprintf(_mero_ctlerr, "share: 
SABAOTHgetStatus: "
+                                                               "%s\n", e);
                                                freeErr(e);
                                                continue;
                                        }
@@ -240,7 +243,7 @@
                                                                        *value, 
(int)(value - p), p);
                                                        send(msgsock, buf2, 
len, 0);
                                                        buf2[len] = '\0';
-                                                       Mfprintf(stderr, "set: 
%s\n", buf2);
+                                                       Mfprintf(_mero_ctlerr, 
"set: %s\n", buf2);
                                                        value = NULL;
                                                        continue;
                                                }
@@ -258,7 +261,8 @@
                                                                /* we can leave 
without tag, will remove all */
                                                                snprintf(buf2, 
sizeof(buf2),
                                                                                
"LEAV %s mapi:monetdb://%s:%hu/",
-                                                                               
stats->dbname, _mero_hostname, _mero_port);
+                                                                               
stats->dbname, _mero_hostname,
+                                                                               
_mero_port);
                                                                broadcast(buf2);
                                                        }
                                                        if (kv->val != NULL) {
@@ -297,12 +301,15 @@
                                                                        
_mero_port, _mero_discoveryttl + 60);
                                                        broadcast(buf2);
                                                        writeProps(props, 
stats->path);
+                                                       Mfprintf(_mero_ctlout, 
"shared database '%s' "
+                                                                       "as 
'%s%s'\n", stats->dbname,
+                                                                       
stats->dbname, p);
                                                        break;
                                                }
                                                stats = stats->next;
                                        }
                                        if (stats == NULL) {
-                                               Mfprintf(stderr, "received 
control share signal for "
+                                               Mfprintf(_mero_ctlerr, 
"received share signal for "
                                                                "database not 
under merovingian control: %s\n",
                                                                q);
                                                len = snprintf(buf2, 
sizeof(buf2),
@@ -335,11 +342,13 @@
 
                                        
pthread_mutex_unlock(&_mero_remotedb_lock);
 
+                                       Mfprintf(_mero_ctlout, "served 
neighbour list\n");
+
                                        /* because this command is multi line, 
you can't
                                         * combine it, disconnect the client */
                                        break;
                                } else {
-                                       Mfprintf(stderr, "unknown control 
command: %s\n", p);
+                                       Mfprintf(_mero_ctlerr, "unknown control 
command: %s\n", p);
                                        len = snprintf(buf2, sizeof(buf2),
                                                        "unknown command: 
%s\n", p);
                                        send(msgsock, buf2, len, 0);

U merovingian.c
Index: merovingian.c
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/merovingian/merovingian.c,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -d -r1.58 -r1.59
--- merovingian.c       4 Sep 2009 12:40:44 -0000       1.58
+++ merovingian.c       9 Sep 2009 11:48:25 -0000       1.59
@@ -155,6 +155,10 @@
 static FILE *_mero_discout = NULL;
 /* stream to the stderr for the neighbour discovery service */
 static FILE *_mero_discerr = NULL;
+/* stream to the stdout for the control runner */
+static FILE *_mero_ctlout = NULL;
+/* stream to the stderr for the control runner */
+static FILE *_mero_ctlerr = NULL;
 /* broadcast socket for announcements */
 static int _mero_broadcastsock;
 /* broadcast address/port */
@@ -746,6 +750,26 @@
        d->dbname = "discovery";
        d->next = NULL;
 
+       /* separate entry for the control runner */
+       d = d->next = alloca(sizeof(struct _dpair));
+       if (pipe(pfd) == -1) {
+               Mfprintf(stderr, "unable to create pipe: %s\n",
+                               strerror(errno));
+               MERO_EXIT(1);
+       }
+       d->out = pfd[0];
+       _mero_ctlout = fdopen(pfd[1], "a");
+       if (pipe(pfd) == -1) {
+               Mfprintf(stderr, "unable to create pipe: %s\n",
+                               strerror(errno));
+               MERO_EXIT(1);
+       }
+       d->err = pfd[0];
+       _mero_ctlerr = fdopen(pfd[1], "a");
+       d->pid = getpid();
+       d->dbname = "control";
+       d->next = NULL;
+
        /* figure out our hostname */
        gethostname(_mero_hostname, 128);
 

U merovingian_connections.c
Index: merovingian_connections.c
===================================================================
RCS file: 
/cvsroot/monetdb/sql/src/backends/monet5/merovingian/merovingian_connections.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- merovingian_connections.c   19 Aug 2009 13:53:05 -0000      1.1
+++ merovingian_connections.c   9 Sep 2009 11:48:25 -0000       1.2
@@ -92,7 +92,7 @@
        char host[512];
 
        if (port == 0) {
-               Mfprintf(stdout, "neighbour discovery service disabled "
+               Mfprintf(_mero_discout, "neighbour discovery service disabled "
                                "by configuration\n");
                *ret = -1;
                return(NO_ERR);
@@ -163,7 +163,7 @@
        /* keep queue of 5 */
        listen(sock, 5);
 
-       Mfprintf(stdout, "handling commands over UNIX socket %s\n", path);
+       Mfprintf(_mero_ctlout, "handling commands over UNIX socket %s\n", path);
 
        *ret = sock;
        return(NO_ERR);


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to