ctdb-daemon: Provide a default location for public addresses file
authorMartin Schwenke <martin@meltin.net>
Tue, 6 Mar 2018 00:30:07 +0000 (11:30 +1100)
committerAmitay Isaacs <amitay@samba.org>
Mon, 19 Mar 2018 01:23:18 +0000 (02:23 +0100)
If the specified file or the default does not exist then log a
warning.

This is done in the takeover code to localise the handling of the
public addresses file.  Soon the daemon command-line option will go
away and the takeover code will be replaced in the not too distant
future.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/doc/ctdbd.1.xml
ctdb/doc/ctdbd.conf.5.xml
ctdb/server/ctdb_daemon.c
ctdb/server/ctdb_takeover.c

index 8791ead1df9cca062e6b0123bd3f67664fab3d88..ac1d22c74f3d19e40ae7243869205ec7969d6d96 100644 (file)
       </varlistentry>
 
       <varlistentry>
-       <term>--public_addresses=<parameter>FILENAME</parameter></term>
+       <term>--public-addresses=<parameter>FILENAME</parameter></term>
        <listitem>
          <para>
            FILENAME specifying a file containing the public IP
            nodes.
          </para>
          <para>
-           This is usually the file
+           Default is
            <filename>/usr/local/etc/ctdb/public_addresses</filename>
          </para>
        </listitem>
index 1685692a106f06e83d4756d65e13b6a78c554fb6..c59f80628262b797f5e7d6fcc5b40189ae6a4a27 100644 (file)
        <term>CTDB_PUBLIC_ADDRESSES=<parameter>FILENAME</parameter></term>
        <listitem>
          <para>
-           No default, usually
+           Default is
            <filename>/usr/local/etc/ctdb/public_addresses</filename>.
            Corresponds to <option>--public-addresses</option>.
          </para>
index 35c1ab639b5f56ccf1160ff1bb086373b035d2f6..7665e2a29c3e9b1d5b286f527fdad3cf3ce431a9 100644 (file)
@@ -1340,12 +1340,10 @@ int ctdb_start_daemon(struct ctdb_context *ctdb, bool do_fork)
 
        initialise_node_flags(ctdb);
 
-       if (ctdb->public_addresses_file) {
-               ret = ctdb_set_public_addresses(ctdb, true);
-               if (ret == -1) {
-                       DEBUG(DEBUG_ALERT,("Unable to setup public address list\n"));
-                       exit(1);
-               }
+       ret = ctdb_set_public_addresses(ctdb, true);
+       if (ret == -1) {
+               D_ERR("Unable to setup public IP addresses\n");
+               exit(1);
        }
 
        ctdb_initialise_vnn_map(ctdb);
index cd240875ba2e4cc48424de59b2fe5e93f9855bb6..fb100aa6ffc172cf2cfb1ba8aa3b4241c001d852 100644 (file)
@@ -1106,10 +1106,34 @@ static int ctdb_add_public_address(struct ctdb_context *ctdb,
 */
 int ctdb_set_public_addresses(struct ctdb_context *ctdb, bool check_addresses)
 {
+       bool ok;
        char **lines;
        int nlines;
        int i;
 
+       /* If no public addresses file given then try the default */
+       if (ctdb->public_addresses_file == NULL) {
+               const char *b = getenv("CTDB_BASE");
+               if (b == NULL) {
+                       DBG_ERR("CTDB_BASE not set\n");
+                       return -1;
+               }
+               ctdb->public_addresses_file = talloc_asprintf(
+                                       ctdb, "%s/%s", b, "public_addresses");
+               if (ctdb->public_addresses_file == NULL) {
+                       DBG_ERR("Out of memory\n");
+                       return -1;
+               }
+       }
+
+       /* If the file doesn't exist then warn and do nothing */
+       ok = file_exist(ctdb->public_addresses_file);
+       if (!ok) {
+               D_WARNING("Not loading public addresses, no file %s\n",
+                         ctdb->public_addresses_file);
+               return 0;
+       }
+
        lines = file_lines_load(ctdb->public_addresses_file, &nlines, 0, ctdb);
        if (lines == NULL) {
                ctdb_set_error(ctdb, "Failed to load public address list '%s'\n", ctdb->public_addresses_file);
@@ -1164,6 +1188,9 @@ int ctdb_set_public_addresses(struct ctdb_context *ctdb, bool check_addresses)
        }
 
 
+       D_NOTICE("Loaded public addresses from %s\n",
+                ctdb->public_addresses_file);
+
        talloc_free(lines);
        return 0;
 }