summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2011-02-02 15:00:53 +1100
committerRonnie Sahlberg <ronniesahlberg@gmail.com>2011-02-08 17:06:10 +1100
commitc23f2e8beaf6ff589cdc0e7de537afbe3782f1de (patch)
treee3b348f15a6f951c485769141278d9b1c6bf4d50
parent40bd94bd5e215bb8a530dc86261289b7fd51a2cc (diff)
downloadsamba-c23f2e8beaf6ff589cdc0e7de537afbe3782f1de.tar.gz
samba-c23f2e8beaf6ff589cdc0e7de537afbe3782f1de.tar.xz
samba-c23f2e8beaf6ff589cdc0e7de537afbe3782f1de.zip
We default to non-deterministic ip now where ips are "sticky" and dont change
too much. This means we can simplify the way we add ips significantly and stop trying to move them. We also check if the node already hosts the ip, in which case we used to return an error. Instead just print an error string but return 0, ok. This makes it easier to script, and works around broken scripts. CQ1021034 (This used to be ctdb commit 307e5e95548155a31682dfcb0956834d0c85838e)
-rw-r--r--ctdb/tools/ctdb.c45
1 files changed, 14 insertions, 31 deletions
diff --git a/ctdb/tools/ctdb.c b/ctdb/tools/ctdb.c
index 8d82d4d96f..cd40e38cdb 100644
--- a/ctdb/tools/ctdb.c
+++ b/ctdb/tools/ctdb.c
@@ -1667,7 +1667,6 @@ static int control_addip(struct ctdb_context *ctdb, int argc, const char **argv)
{
int i, ret;
int len, retries = 0;
- uint32_t pnn;
unsigned mask;
ctdb_sock_addr addr;
struct ctdb_control_ip_iface *pub;
@@ -1686,23 +1685,28 @@ static int control_addip(struct ctdb_context *ctdb, int argc, const char **argv)
return -1;
}
- ret = control_get_all_public_ips(ctdb, tmp_ctx, &ips);
+ /* read the public ip list from the node */
+ ret = ctdb_ctrl_get_public_ips(ctdb, TIMELIMIT(), options.pnn, tmp_ctx, &ips);
if (ret != 0) {
- DEBUG(DEBUG_ERR, ("Unable to get public ip list from cluster\n"));
+ DEBUG(DEBUG_ERR, ("Unable to get public ip list from node %u\n", options.pnn));
talloc_free(tmp_ctx);
- return ret;
+ return -1;
}
-
-
- /* check if some other node is already serving this ip, if not,
- * we will claim it
- */
for (i=0;i<ips->num;i++) {
if (ctdb_same_ip(&addr, &ips->ips[i].addr)) {
- break;
+ DEBUG(DEBUG_ERR,("Can not add ip to node. Node already hosts this ip\n"));
+ return 0;
}
}
+
+
+ /* Dont timeout. This command waits for an ip reallocation
+ which sometimes can take wuite a while if there has
+ been a recent recovery
+ */
+ alarm(0);
+
len = offsetof(struct ctdb_control_ip_iface, iface) + strlen(argv[1]) + 1;
pub = talloc_size(tmp_ctx, len);
CTDB_NO_MEMORY(ctdb, pub);
@@ -1726,27 +1730,6 @@ static int control_addip(struct ctdb_context *ctdb, int argc, const char **argv)
return ret;
}
- if (i == ips->num) {
- /* no one has this ip so we claim it */
- pnn = options.pnn;
- } else {
- pnn = ips->ips[i].pnn;
- }
-
- do {
- ret = move_ip(ctdb, &addr, pnn);
- if (ret != 0) {
- DEBUG(DEBUG_ERR,("Failed to move ip to node %d. wait 3 seconds and try again.\n", pnn));
- sleep(3);
- retries++;
- }
- } while (retries < 5 && ret != 0);
- if (ret != 0) {
- DEBUG(DEBUG_ERR,("Failed to move ip to node %d. Giving up.\n", pnn));
- talloc_free(tmp_ctx);
- return ret;
- }
-
do {
ret = control_ipreallocate(ctdb, argc, argv);
if (ret != 0) {