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