* [Patch 3/3] tabled: use "auto" keyword
@ 2009-09-29 21:42 Pete Zaitcev
2009-09-30 22:40 ` Jeff Garzik
0 siblings, 1 reply; 2+ messages in thread
From: Pete Zaitcev @ 2009-09-29 21:42 UTC (permalink / raw)
To: Jeff Garzik; +Cc: Project Hail List
The current implementation of automatic listening ports was configured
implicitly by adding <PortFile> clause. This turned out to be a silly
idea. A special keyword for <Port> is more convenient.
This should be built after both CLD and Chunk implement "auto" keyword.
Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>
diff --git a/server/config.c b/server/config.c
index 505524c..c7a994f 100644
--- a/server/config.c
+++ b/server/config.c
@@ -75,13 +75,8 @@ static void cfg_elm_end_listen(struct config_context *cc)
return;
}
- if (cc->tmp_listen.port && cc->tmp_listen.port_file) {
- applog(LOG_ERR, "cfgfile: Listen with both Port and PortFile");
- goto err;
- }
-
- if (!cc->tmp_listen.port && !cc->tmp_listen.port_file) {
- applog(LOG_ERR, "cfgfile: Listen with no Port or PortFile");
+ if (!cc->tmp_listen.port) {
+ applog(LOG_ERR, "cfgfile: Listen with no Port");
goto err;
}
@@ -270,7 +265,8 @@ static void cfg_elm_end (GMarkupParseContext *context,
if (cc->in_listen) {
n = strtol(cc->text, NULL, 10);
- if (n > 0 && n < 65536) {
+ if ((n > 0 && n < 65536) ||
+ !strcmp(cc->text, "auto")) {
free(cc->tmp_listen.port);
cc->tmp_listen.port = cc->text;
} else {
diff --git a/server/server.c b/server/server.c
index f1c49be..d9320ec 100644
--- a/server/server.c
+++ b/server/server.c
@@ -1480,15 +1480,32 @@ static int net_open_socket(int addr_fam, int sock_type, int sock_prot,
return fd;
}
+static int net_write_port(const char *port_file,
+ const char *host, const char *port)
+{
+ FILE *portf;
+ int rc;
+
+ portf = fopen(port_file, "w");
+ if (portf == NULL) {
+ rc = errno;
+ applog(LOG_INFO, "Cannot create port file %s: %s",
+ port_file, strerror(rc));
+ return -rc;
+ }
+ fprintf(portf, "%s:%s\n", tabled_srv.ourhost, port);
+ fclose(portf);
+ return 0;
+}
+
/*
* This, annoyingly, has to have a side effect: it fills out tabled_srv.port
* so that we can later export it into CLD.
*/
-static int net_open_any(char *portfile)
+static int net_open_any(void)
{
struct sockaddr_in addr4;
struct sockaddr_in6 addr6;
- FILE *portf;
int fd4, fd6;
socklen_t addr_len;
unsigned short port;
@@ -1533,7 +1550,7 @@ static int net_open_any(char *portfile)
port = ntohs(addr4.sin_port);
}
- applog(LOG_INFO, "Listening on port %u file %s", port, portfile);
+ applog(LOG_INFO, "Listening on port %u", port);
rc = asprintf(&tabled_srv.port, "%u", port);
if (rc < 0) {
@@ -1541,17 +1558,6 @@ static int net_open_any(char *portfile)
return -ENOMEM;
}
- portf = fopen(portfile, "w");
- if (portf == NULL) {
- rc = errno;
- applog(LOG_INFO, "Cannot create port file %s: %s",
- portfile, strerror(rc));
- return -rc;
- }
- fprintf(portf, "%s:%u\n", tabled_srv.ourhost, port);
- fclose(portf);
-
- tabled_srv.state_net = ST_NET_OPEN;
return 0;
}
@@ -1623,10 +1629,24 @@ err_addr:
static int net_open(void)
{
- if (tabled_srv.port_file)
- return net_open_any(tabled_srv.port_file);
+ int rc;
+
+ if (!strcmp(tabled_srv.port, "auto"))
+ rc = net_open_any();
else
- return net_open_known(tabled_srv.port);
+ rc = net_open_known(tabled_srv.port);
+ if (rc)
+ return rc;
+
+ if (tabled_srv.port_file) {
+ rc = net_write_port(tabled_srv.port_file,
+ tabled_srv.ourhost, tabled_srv.port);
+ if (rc)
+ return rc;
+ }
+
+ tabled_srv.state_net = ST_NET_OPEN;
+ return 0;
}
static void net_listen(void)
diff --git a/test/chunkd-test.conf b/test/chunkd-test.conf
index 3785eb5..00cf024 100644
--- a/test/chunkd-test.conf
+++ b/test/chunkd-test.conf
@@ -1,6 +1,6 @@
<Listen>
- <PortFile>/dev/null</PortFile>
+ <Port>auto</Port>
</Listen>
<PID>chunkd.pid</PID>
<Path>data/chunk</Path>
diff --git a/test/start-daemon b/test/start-daemon
index 589bfe5..2761d55 100755
--- a/test/start-daemon
+++ b/test/start-daemon
@@ -17,7 +17,7 @@ then
fi
# May be different on Solaris... like /usr/libexec or such.
-cld -d data/cld -P cld.pid --port-file=cld.port -E
+cld -d data/cld -P cld.pid -p auto --port-file=cld.port -E
chunkd -C $top_srcdir/test/chunkd-test.conf -E
../server/tabled -C $top_srcdir/test/tabled-test.conf -E -D
diff --git a/test/tabled-test.conf b/test/tabled-test.conf
index 2de599c..068ed00 100644
--- a/test/tabled-test.conf
+++ b/test/tabled-test.conf
@@ -1,7 +1,10 @@
<PID>tabled.pid</PID>
<ForceHost>localhost.localdomain</ForceHost>
-<Listen><PortFile>tabled.acc</PortFile></Listen>
+<Listen>
+ <Port>auto</Port>
+ <PortFile>tabled.acc</PortFile>
+</Listen>
<TDB>data/tdb</TDB>
<TDBRepPort>18083</TDBRepPort>
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-09-30 22:40 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-29 21:42 [Patch 3/3] tabled: use "auto" keyword Pete Zaitcev
2009-09-30 22:40 ` Jeff Garzik
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.