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);
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 "
/* 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);
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,
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);