diff options
author | Amitay Isaacs <amitay@gmail.com> | 2017-03-02 16:38:58 +1100 |
---|---|---|
committer | Martin Schwenke <martins@samba.org> | 2017-06-29 10:34:27 +0200 |
commit | b8a0420d10021c5521335f81effaeb28f43fd307 (patch) | |
tree | ee62e77071d6a8b33ba9cb8e59a78da52fccb359 /ctdb | |
parent | 99113c4c88c8e3f54d14600a30064948359a97db (diff) | |
download | samba-b8a0420d10021c5521335f81effaeb28f43fd307.tar.gz |
ctdb-daemon: Add implementation for CTDB_CONTROL_DB_ATTACH_REPLICATED control
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
Diffstat (limited to 'ctdb')
-rw-r--r-- | ctdb/server/ctdb_control.c | 5 | ||||
-rw-r--r-- | ctdb/server/ctdb_ltdb_server.c | 14 | ||||
-rw-r--r-- | ctdb/server/ctdb_recovery_helper.c | 6 |
3 files changed, 19 insertions, 6 deletions
diff --git a/ctdb/server/ctdb_control.c b/ctdb/server/ctdb_control.c index 8deb7c85cfe..40484434b4a 100644 --- a/ctdb/server/ctdb_control.c +++ b/ctdb/server/ctdb_control.c @@ -275,6 +275,11 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb, CTDB_DB_FLAGS_PERSISTENT, client_id, c, async_reply); + case CTDB_CONTROL_DB_ATTACH_REPLICATED: + return ctdb_control_db_attach(ctdb, indata, outdata, + CTDB_DB_FLAGS_REPLICATED, client_id, + c, async_reply); + case CTDB_CONTROL_SET_CALL: return control_not_implemented("SET_CALL", NULL); diff --git a/ctdb/server/ctdb_ltdb_server.c b/ctdb/server/ctdb_ltdb_server.c index ffa52690371..d83783854a0 100644 --- a/ctdb/server/ctdb_ltdb_server.c +++ b/ctdb/server/ctdb_ltdb_server.c @@ -1115,6 +1115,7 @@ int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata, struct ctdb_db_context *db; struct ctdb_node *node = ctdb->nodes[ctdb->pnn]; struct ctdb_client *client = NULL; + uint32_t opcode; if (ctdb->tunable.allow_client_db_attach == 0) { DEBUG(DEBUG_ERR, ("DB Attach to database %s denied by tunable " @@ -1196,11 +1197,16 @@ int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata, /* Try to ensure it's locked in mem */ lockdown_memory(ctdb->valgrinding); + if (ctdb_db_persistent(db)) { + opcode = CTDB_CONTROL_DB_ATTACH_PERSISTENT; + } else if (ctdb_db_replicated(db)) { + opcode = CTDB_CONTROL_DB_ATTACH_REPLICATED; + } else { + opcode = CTDB_CONTROL_DB_ATTACH; + } + /* tell all the other nodes about this database */ - ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_ALL, 0, - ctdb_db_persistent(db) ? - CTDB_CONTROL_DB_ATTACH_PERSISTENT : - CTDB_CONTROL_DB_ATTACH, + ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_ALL, 0, opcode, 0, CTDB_CTRL_FLAG_NOREPLY, indata, NULL, NULL); diff --git a/ctdb/server/ctdb_recovery_helper.c b/ctdb/server/ctdb_recovery_helper.c index 943222a86e8..9f7fc07d3c4 100644 --- a/ctdb/server/ctdb_recovery_helper.c +++ b/ctdb/server/ctdb_recovery_helper.c @@ -1664,7 +1664,8 @@ static void recover_db_transaction_started(struct tevent_req *subreq) return; } - if (state->db_flags & CTDB_DB_FLAGS_PERSISTENT) { + if ((state->db_flags & CTDB_DB_FLAGS_PERSISTENT) || + (state->db_flags & CTDB_DB_FLAGS_REPLICATED)) { subreq = collect_highseqnum_db_send( state, state->ev, state->client, state->pnn_list, state->count, state->caps, @@ -1693,7 +1694,8 @@ static void recover_db_collect_done(struct tevent_req *subreq) int ret; bool status; - if (state->db_flags & CTDB_DB_FLAGS_PERSISTENT) { + if ((state->db_flags & CTDB_DB_FLAGS_PERSISTENT) || + (state->db_flags & CTDB_DB_FLAGS_REPLICATED)) { status = collect_highseqnum_db_recv(subreq, &ret); } else { status = collect_all_db_recv(subreq, &ret); |