mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
during recovery, update all remote nodes so they use the same priorities
for the databases as this node. (This used to be ctdb commit 465dc95fef0ff6651ff49fa94e4cf2ebd1036ac4)
This commit is contained in:
parent
3219f81710
commit
ae57e54566
@ -328,6 +328,50 @@ static int set_recovery_master(struct ctdb_context *ctdb, struct ctdb_node_map *
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* update all remote nodes to use the same db priority that we have
|
||||
this can fail if the remove node has not yet been upgraded to
|
||||
support this function, so we always return success and never fail
|
||||
a recovery if this call fails.
|
||||
*/
|
||||
static int update_db_priority_on_remote_nodes(struct ctdb_context *ctdb,
|
||||
struct ctdb_node_map *nodemap,
|
||||
uint32_t pnn, struct ctdb_dbid_map *dbmap, TALLOC_CTX *mem_ctx)
|
||||
{
|
||||
int db;
|
||||
uint32_t *nodes;
|
||||
|
||||
nodes = list_of_active_nodes(ctdb, nodemap, mem_ctx, true);
|
||||
|
||||
/* step through all local databases */
|
||||
for (db=0; db<dbmap->num;db++) {
|
||||
TDB_DATA data;
|
||||
struct ctdb_db_priority db_prio;
|
||||
int ret;
|
||||
|
||||
db_prio.db_id = dbmap->dbs[db].dbid;
|
||||
ret = ctdb_ctrl_get_db_priority(ctdb, CONTROL_TIMEOUT(), CTDB_CURRENT_NODE, dbmap->dbs[db].dbid, &db_prio.priority);
|
||||
if (ret != 0) {
|
||||
DEBUG(DEBUG_ERR,(__location__ " Failed to read database priority from local node for db 0x%08x\n", dbmap->dbs[db].dbid));
|
||||
continue;
|
||||
}
|
||||
|
||||
DEBUG(DEBUG_INFO,("Update DB priority for db 0x%08x to %u\n", dbmap->dbs[db].dbid, db_prio.priority));
|
||||
|
||||
data.dptr = (uint8_t *)&db_prio;
|
||||
data.dsize = sizeof(db_prio);
|
||||
|
||||
if (ctdb_client_async_control(ctdb,
|
||||
CTDB_CONTROL_SET_DB_PRIORITY,
|
||||
nodes,
|
||||
CONTROL_TIMEOUT(), false, data,
|
||||
NULL, NULL,
|
||||
NULL) != 0) {
|
||||
DEBUG(DEBUG_ERR,(__location__ " Failed to set DB priority for 0x%08x\n", db_prio.db_id));
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
ensure all other nodes have attached to any databases that we have
|
||||
@ -1232,9 +1276,15 @@ static int do_recovery(struct ctdb_recoverd *rec,
|
||||
DEBUG(DEBUG_ERR, (__location__ " Unable to create missing remote databases\n"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
DEBUG(DEBUG_NOTICE, (__location__ " Recovery - created remote databases\n"));
|
||||
|
||||
/* update the database priority for all remote databases */
|
||||
ret = update_db_priority_on_remote_nodes(ctdb, nodemap, pnn, dbmap, mem_ctx);
|
||||
if (ret != 0) {
|
||||
DEBUG(DEBUG_ERR, (__location__ " Unable to set db priority on remote nodes\n"));
|
||||
}
|
||||
DEBUG(DEBUG_NOTICE, (__location__ " Recovery - updated db priority for all databases\n"));
|
||||
|
||||
|
||||
/* set recovery mode to active on all nodes */
|
||||
ret = set_recovery_mode(ctdb, rec, nodemap, CTDB_RECOVERY_ACTIVE);
|
||||
|
Loading…
Reference in New Issue
Block a user