summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmitay Isaacs <amitay@gmail.com>2013-07-01 16:28:04 +1000
committerAmitay Isaacs <amitay@gmail.com>2013-07-02 12:59:08 +1000
commit622ccd09f9812e965d4e3be33daad2176c0ff9aa (patch)
treeed80bcab2b208592d84f648dcef92cedc262d04f
parentcf17247d312a2d5a6cb191c2db7e50bd3bf5bd6f (diff)
downloadsamba-622ccd09f9812e965d4e3be33daad2176c0ff9aa.tar.gz
samba-622ccd09f9812e965d4e3be33daad2176c0ff9aa.tar.xz
samba-622ccd09f9812e965d4e3be33daad2176c0ff9aa.zip
freeze: Make ctdb_start_freeze() a void function
If this function fails due to memory errors, there is no way to recover. The best course of action is to abort. Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 46efe7a886f8c4c56f19536adc98a73c22db906a)
-rw-r--r--ctdb/include/ctdb_private.h2
-rw-r--r--ctdb/server/ctdb_banning.c4
-rw-r--r--ctdb/server/ctdb_freeze.c20
3 files changed, 8 insertions, 18 deletions
diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h
index bf5b5ecacc..365eb3ecdd 100644
--- a/ctdb/include/ctdb_private.h
+++ b/ctdb/include/ctdb_private.h
@@ -1285,7 +1285,7 @@ int ctdb_ctrl_get_all_tunables(struct ctdb_context *ctdb,
uint32_t destnode,
struct ctdb_tunable *tunables);
-int ctdb_start_freeze(struct ctdb_context *ctdb, uint32_t priority);
+void ctdb_start_freeze(struct ctdb_context *ctdb, uint32_t priority);
bool parse_ip_mask(const char *s, const char *iface, ctdb_sock_addr *addr, unsigned *mask);
bool parse_ip_port(const char *s, ctdb_sock_addr *addr);
diff --git a/ctdb/server/ctdb_banning.c b/ctdb/server/ctdb_banning.c
index bb3facc013..2ad7fbf9a3 100644
--- a/ctdb/server/ctdb_banning.c
+++ b/ctdb/server/ctdb_banning.c
@@ -56,9 +56,7 @@ int32_t ctdb_local_node_got_banned(struct ctdb_context *ctdb)
ctdb->vnn_map->generation = INVALID_GENERATION;
for (i=1; i<=NUM_DB_PRIORITIES; i++) {
- if (ctdb_start_freeze(ctdb, i) != 0) {
- DEBUG(DEBUG_ERR,(__location__ " Failed to freeze db priority %u\n", i));
- }
+ ctdb_start_freeze(ctdb, i);
}
ctdb_release_all_ips(ctdb);
ctdb->recovery_mode = CTDB_RECOVERY_ACTIVE;
diff --git a/ctdb/server/ctdb_freeze.c b/ctdb/server/ctdb_freeze.c
index 1acd5c7fa7..fee44d4646 100644
--- a/ctdb/server/ctdb_freeze.c
+++ b/ctdb/server/ctdb_freeze.c
@@ -126,7 +126,7 @@ static int ctdb_freeze_waiter_destructor(struct ctdb_freeze_waiter *w)
/*
start the freeze process for a certain priority
*/
-int ctdb_start_freeze(struct ctdb_context *ctdb, uint32_t priority)
+void ctdb_start_freeze(struct ctdb_context *ctdb, uint32_t priority)
{
struct ctdb_freeze_handle *h;
@@ -137,7 +137,7 @@ int ctdb_start_freeze(struct ctdb_context *ctdb, uint32_t priority)
if (ctdb->freeze_mode[priority] == CTDB_FREEZE_FROZEN) {
/* we're already frozen */
- return 0;
+ return;
}
DEBUG(DEBUG_ERR, ("Freeze priority %u\n", priority));
@@ -148,18 +148,16 @@ int ctdb_start_freeze(struct ctdb_context *ctdb, uint32_t priority)
/* if there isn't a freeze lock child then create one */
if (ctdb->freeze_handles[priority] == NULL) {
h = talloc_zero(ctdb, struct ctdb_freeze_handle);
- CTDB_NO_MEMORY(ctdb, h);
+ CTDB_NO_MEMORY_FATAL(ctdb, h);
h->ctdb = ctdb;
h->priority = priority;
talloc_set_destructor(h, ctdb_freeze_handle_destructor);
h->lreq = ctdb_lock_alldb_prio(ctdb, priority, false, ctdb_freeze_lock_handler, h);
- CTDB_NO_MEMORY(ctdb, h->lreq);
+ CTDB_NO_MEMORY_FATAL(ctdb, h->lreq);
ctdb->freeze_handles[priority] = h;
ctdb->freeze_mode[priority] = CTDB_FREEZE_PENDING;
}
-
- return 0;
}
/*
@@ -188,10 +186,7 @@ int32_t ctdb_control_freeze(struct ctdb_context *ctdb, struct ctdb_req_control *
return 0;
}
- if (ctdb_start_freeze(ctdb, priority) != 0) {
- DEBUG(DEBUG_ERR,(__location__ " Failed to start freezing databases with priority %u\n", priority));
- return -1;
- }
+ ctdb_start_freeze(ctdb, priority);
/* add ourselves to list of waiters */
if (ctdb->freeze_handles[priority] == NULL) {
@@ -222,10 +217,7 @@ bool ctdb_blocking_freeze(struct ctdb_context *ctdb)
int i;
for (i=1; i<=NUM_DB_PRIORITIES; i++) {
- if (ctdb_start_freeze(ctdb, i)) {
- DEBUG(DEBUG_ERR,(__location__ " Failed to freeze databases of prio %u\n", i));
- continue;
- }
+ ctdb_start_freeze(ctdb, i);
/* block until frozen */
while (ctdb->freeze_mode[i] == CTDB_FREEZE_PENDING) {