Changeset: 432b5e56aa65 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=432b5e56aa65
Modified Files:
        tools/merovingian/ChangeLog
        tools/merovingian/daemon/connections.c
        tools/merovingian/daemon/merovingian.c
Branch: default
Log Message:

discoveryport: remove

Remove discoveryport, allow discovery to be enabled or disabled, but
"share" the same port number with connections.  This is necessary for
multi-cloud settings where multiple merovingian networks are connected
through gateway nodes.  (future)

migration code from Aug2011: if discoveryport is 0, set discovery to
false


diffs (182 lines):

diff --git a/tools/merovingian/ChangeLog b/tools/merovingian/ChangeLog
--- a/tools/merovingian/ChangeLog
+++ b/tools/merovingian/ChangeLog
@@ -1,3 +1,8 @@
 # ChangeLog file for sql/src/backends/monet5/merovingian
 # This file is updated with mchangelog
 
+* Fri Aug 19 2011 Fabian Groffen <[email protected]>
+- The monetdbd discoveryport option has been removed in favour of a
+  boolean discovery option.  On upgrade, when discoveryport was set to
+  a non-zero value, discovery is set to true, or false otherwise.
+
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
@@ -112,13 +112,6 @@ openConnectionUDP(int *ret, unsigned sho
        char sport[10];
        char host[512];
 
-       if (port == 0) {
-               Mfprintf(_mero_discout, "neighbour discovery service disabled "
-                               "by configuration\n");
-               *ret = -1;
-               return(NO_ERR);
-       }
-
        memset(&hints, 0, sizeof(struct addrinfo));
        hints.ai_family = AF_INET;      /* Allow IPv4 only (broadcasting) */
        hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */
diff --git a/tools/merovingian/daemon/merovingian.c 
b/tools/merovingian/daemon/merovingian.c
--- a/tools/merovingian/daemon/merovingian.c
+++ b/tools/merovingian/daemon/merovingian.c
@@ -420,6 +420,44 @@ autoUpgradePassphraseMar2011Apr2011(conf
        return(0);
 }
 
+/**
+ * Explicitly pulled out functionality that is just implemented to
+ * obtain an automatic upgrade path.
+ *
+ * Starting from the Jan2012? release, the discoveryport setting has
+ * disappeared.  Instead, a boolean discovery is available to enable or
+ * disable the service.  It always uses the same port as the connections
+ * are on.
+ *
+ * This function sets discovery to true if discoveryport is set to a
+ * non-zero positive value in port range, false otherwise.
+ *
+ * Returns 0 if discoveryport is not set (and upgrade probably already
+ * took place).
+ */
+static char
+autoUpgradeDiscoveryPortAug2011Jan2012(confkeyval *mckv)
+{
+       confkeyval *kv;
+       confkeyval ckv[] = {
+               {"discoveryport", NULL, 0,     INT},
+               { NULL,           NULL, 0, INVALID}
+       };
+
+       readProps(ckv, ".");
+
+       kv = findConfKey(ckv, "discoveryport");
+       if (kv->val == NULL)
+               return 0;
+
+       if (kv->ival <= 0 || kv->ival > 65535) {
+               kv = findConfKey(mckv, "discovery");
+               setConfVal(kv, "false");
+       }
+
+       return 1;
+}
+
 int
 main(int argc, char *argv[])
 {
@@ -446,7 +484,6 @@ main(int argc, char *argv[])
        int csock = -1;
        int socku = -1;
        unsigned short port = 0;
-       unsigned short discoveryport = 0;
        unsigned short controlport = 0;
        struct stat sb;
        FILE *oerr = NULL;
@@ -460,10 +497,10 @@ main(int argc, char *argv[])
                {"sockdir",       strdup("/tmp"),          0,                  
STR},
                {"port",          strdup(MERO_PORT),       atoi(MERO_PORT),    
INT},
                {"controlport",   strdup(CONTROL_PORT),    atoi(CONTROL_PORT), 
INT},
-               {"discoveryport", strdup(MERO_PORT),       atoi(MERO_PORT),    
INT},
 
                {"exittimeout",   strdup("60"),            60,                 
INT},
                {"forward",       strdup("proxy"),         0,                  
OTHER},
+               {"discovery",     strdup("true"),          1,                  
BOOLEAN},
                {"discoveryttl",  strdup("600"),           600,                
INT},
 
                {"passphrase",    NULL,                    0,                  
STR},
@@ -668,6 +705,23 @@ main(int argc, char *argv[])
        readProps(ckv, ".");
        _mero_props = ckv;
 
+       /* upgrades to conf-file in place */
+       kv = findConfKey(_mero_props, "passphrase");
+       if (kv->val == NULL || strlen(kv->val) == 0) {
+               if (!autoUpgradePassphraseMar2011Apr2011(_mero_props)) {
+                       char phrase[128];
+                       Mfprintf(stderr, "control passphrase unset or has 
zero-length, "
+                                       "generating one\n");
+                       generateSalt(phrase, sizeof(phrase));
+                       setConfVal(kv, phrase);
+               }
+               writeProps(_mero_props, ".");
+       }
+
+       if (autoUpgradeDiscoveryPortAug2011Jan2012(_mero_props) != 0)
+               writeProps(_mero_props, ".");
+       /* end upgrades to conf-file in place */
+
        kv = findConfKey(_mero_props, "pidfile");
        pidfilename = kv->val;
 
@@ -681,18 +735,6 @@ main(int argc, char *argv[])
                writeProps(_mero_props, ".");
        }
 
-       kv = findConfKey(_mero_props, "passphrase");
-       if (kv->val == NULL || strlen(kv->val) == 0) {
-               if (!autoUpgradePassphraseMar2011Apr2011(_mero_props)) {
-                       char phrase[128];
-                       Mfprintf(stderr, "control passphrase unset or has 
zero-length, "
-                                       "generating one\n");
-                       generateSalt(phrase, sizeof(phrase));
-                       setConfVal(kv, phrase);
-               }
-               writeProps(_mero_props, ".");
-       }
-
        kv = findConfKey(_mero_props, "port");
        if (kv->ival <= 0 || kv->ival > 65535) {
                Mfprintf(stderr, "invalid port number: %s, defaulting to %s\n",
@@ -701,14 +743,6 @@ main(int argc, char *argv[])
                writeProps(_mero_props, ".");
        }
        port = (unsigned short)kv->ival;
-       kv = findConfKey(_mero_props, "discoveryport");
-       if (kv->ival < 0 || kv->ival > 65535) {
-               Mfprintf(stderr, "invalid discovery port number: %s, defaulting 
to %s\n",
-                               kv->val, MERO_PORT);
-               setConfVal(kv, MERO_PORT);
-               writeProps(_mero_props, ".");
-       }
-       discoveryport = (unsigned int)kv->ival;
        kv = findConfKey(_mero_props, "controlport");
        if (kv->ival <= 0 || kv->ival > 65535) {
                Mfprintf(stderr, "invalid control port number: %s, defaulting 
to %s\n",
@@ -899,7 +933,7 @@ main(int argc, char *argv[])
        if (
                        (e = openConnectionTCP(&sock, port, stdout)) == NO_ERR 
&&
                        (e = openConnectionUNIX(&socku, mapi_usock, 0, stdout)) 
== NO_ERR &&
-                       (e = openConnectionUDP(&usock, discoveryport)) == 
NO_ERR &&
+                       (discovery == 1 && (e = openConnectionUDP(&usock, 
port)) == NO_ERR) &&
                        (e = openConnectionUNIX(&unsock, control_usock, 
S_IRWXO, _mero_ctlout)) == NO_ERR &&
                        (controlport == 0 || (e = openConnectionTCP(&csock, 
controlport, _mero_ctlout)) == NO_ERR)
           )
@@ -908,7 +942,7 @@ main(int argc, char *argv[])
                pthread_t dtid = 0;
                int csocks[2];
 
-               if (discoveryport > 0) {
+               if (discovery == 1) {
                        _mero_broadcastsock = socket(AF_INET, SOCK_DGRAM, 0);
                        ret = 1;
                        if ((setsockopt(_mero_broadcastsock,
@@ -924,7 +958,7 @@ main(int argc, char *argv[])
                        _mero_broadcastaddr.sin_addr.s_addr = 
htonl(INADDR_BROADCAST);
                        /* the target port is our configured port, not elegant, 
but how
                         * else can we do it? can't broadcast to all ports or 
something */
-                       _mero_broadcastaddr.sin_port = htons(discoveryport);
+                       _mero_broadcastaddr.sin_port = htons(port);
                }
 
                /* From this point merovingian considers itself to be in 
position to
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to