1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-11-25 20:23:16 +03:00

um failover changes

This commit is contained in:
David Hill
2018-07-31 15:51:32 -05:00
parent 926314bf17
commit a3862a42f7

View File

@@ -373,7 +373,7 @@ void processMSG(messageqcpp::IOSocket* cfIos)
msg >> target; msg >> target;
msg >> graceful; msg >> graceful;
msg >> ackIndicator; msg >> ackIndicator;
msg >> manualFlag; msg >> manualFlag;
switch (actionType) { switch (actionType) {
case STOPMODULE: case STOPMODULE:
@@ -835,16 +835,18 @@ void processMSG(messageqcpp::IOSocket* cfIos)
status = processManager.disableModule(moduleName, true); status = processManager.disableModule(moduleName, true);
log.writeLog(__LINE__, "Disable Module Completed on " + moduleName, LOG_TYPE_INFO); log.writeLog(__LINE__, "Disable Module Completed on " + moduleName, LOG_TYPE_INFO);
processManager.recycleProcess(moduleName);
//check for SIMPLEX Processes on mate might need to be started
processManager.checkSimplexModule(moduleName);
//call dbrm control //call dbrm control
oam.dbrmctl("reload"); // oam.dbrmctl("reload");
log.writeLog(__LINE__, "'dbrmctl reload' done", LOG_TYPE_DEBUG); // log.writeLog(__LINE__, "'dbrmctl reload' done", LOG_TYPE_DEBUG);
// resume the dbrm // resume the dbrm
oam.dbrmctl("resume"); oam.dbrmctl("resume");
log.writeLog(__LINE__, "'dbrmctl resume' done", LOG_TYPE_DEBUG); log.writeLog(__LINE__, "'dbrmctl resume' done", LOG_TYPE_DEBUG);
//check for SIMPLEX Processes on mate might need to be started
processManager.checkSimplexModule(moduleName);
} }
else else
{ {
@@ -3299,7 +3301,9 @@ int ProcessManager::disableModule(string target, bool manualFlag)
// update state to MAN_DISABLED // update state to MAN_DISABLED
if (opState == oam::AUTO_DISABLED && newState == oam::MAN_DISABLED) { if (opState == oam::AUTO_DISABLED && newState == oam::MAN_DISABLED) {
//removemodule to get proess in MAN_OFFLINE
stopModule(target, REMOVE, true);
try try
{ {
oam.getSystemConfig(target, moduleconfig); oam.getSystemConfig(target, moduleconfig);
@@ -3351,7 +3355,7 @@ int ProcessManager::disableModule(string target, bool manualFlag)
setModuleState(target, newState); setModuleState(target, newState);
//set Columnstore.xml enbale state //set Columnstore.xml enable state
setEnableState( target, SnewState); setEnableState( target, SnewState);
log.writeLog(__LINE__, "disableModule - setEnableState", LOG_TYPE_DEBUG); log.writeLog(__LINE__, "disableModule - setEnableState", LOG_TYPE_DEBUG);
@@ -3435,18 +3439,18 @@ void ProcessManager::recycleProcess(string module, bool enableModule)
restartProcessType("PrimProc"); restartProcessType("PrimProc");
sleep(1); sleep(1);
restartProcessType("ExeMgr");
sleep(1);
restartProcessType("mysqld"); restartProcessType("mysqld");
restartProcessType("WriteEngineServer"); restartProcessType("WriteEngineServer");
sleep(1); sleep(1);
restartProcessType("DDLProc",module); startProcessType("ExeMgr");
sleep(1); sleep(1);
restartProcessType("DMLProc",module); startProcessType("DDLProc");
sleep(1);
startProcessType("DMLProc");
return; return;
} }
@@ -4156,7 +4160,8 @@ int ProcessManager::stopProcessType( std::string processName, bool manualFlag )
{ {
if ( systemprocessstatus.processstatus[i].ProcessName == processName) { if ( systemprocessstatus.processstatus[i].ProcessName == processName) {
//skip if in a COLD_STANDBY state //skip if in a COLD_STANDBY state
if ( systemprocessstatus.processstatus[i].ProcessOpState == oam::COLD_STANDBY ) // if ( systemprocessstatus.processstatus[i].ProcessOpState == oam::COLD_STANDBY )
if ( systemprocessstatus.processstatus[i].ProcessOpState != oam::ACTIVE )
continue; continue;
// found one, request restart of it // found one, request restart of it
@@ -4286,12 +4291,17 @@ int ProcessManager::restartProcessType( std::string processName, std::string ski
{ {
if ( systemprocessstatus.processstatus[i].ProcessName == processName ) { if ( systemprocessstatus.processstatus[i].ProcessName == processName ) {
//skip if in a BUSY_INIT state //skip if in a BUSY_INIT state
if ( systemprocessstatus.processstatus[i].ProcessOpState == oam::BUSY_INIT || // if ( systemprocessstatus.processstatus[i].ProcessOpState == oam::BUSY_INIT ||
systemprocessstatus.processstatus[i].ProcessOpState == oam::AUTO_INIT || // systemprocessstatus.processstatus[i].ProcessOpState == oam::MAN_OFFLINE ||
systemprocessstatus.processstatus[i].ProcessOpState == oam::MAN_INIT || // systemprocessstatus.processstatus[i].ProcessOpState == oam::AUTO_OFFLINE ||
( systemprocessstatus.processstatus[i].ProcessOpState == oam::COLD_STANDBY && !manualFlag ) ) // systemprocessstatus.processstatus[i].ProcessOpState == oam::AUTO_INIT ||
continue; // systemprocessstatus.processstatus[i].ProcessOpState == oam::MAN_INIT ||
// ( systemprocessstatus.processstatus[i].ProcessOpState == oam::COLD_STANDBY && !manualFlag ) )
// continue;
if ( systemprocessstatus.processstatus[i].ProcessOpState != oam::ACTIVE )
continue;
if ( (processName.find("DDLProc") == 0 || processName.find("DMLProc") == 0) ) if ( (processName.find("DDLProc") == 0 || processName.find("DMLProc") == 0) )
{ {
string procModuleType = systemprocessstatus.processstatus[i].Module.substr(0,MAX_MODULE_TYPE_SIZE); string procModuleType = systemprocessstatus.processstatus[i].Module.substr(0,MAX_MODULE_TYPE_SIZE);
@@ -7539,18 +7549,18 @@ void ProcessManager::checkSimplexModule(std::string moduleName)
} }
if ( state == oam::COLD_STANDBY ) { if ( state == oam::COLD_STANDBY ) {
//set Primary UM Module //process DDL/DMLProc
if ( systemprocessconfig.processconfig[j].ProcessName == "DDLProc" ) { if ( systemprocessconfig.processconfig[j].ProcessName == "DDLProc")
{
setPMProcIPs((*pt).DeviceName);
log.writeLog(__LINE__, "Set Primary UM Module = " + (*pt).DeviceName, LOG_TYPE_DEBUG);
oam.setSystemConfig("PrimaryUMModuleName", (*pt).DeviceName); oam.setSystemConfig("PrimaryUMModuleName", (*pt).DeviceName);
//distribute config file //distribute config file
distributeConfigFile("system"); distributeConfigFile("system");
sleep(2); sleep(2);
//add MySQL Replication setup, if needed
log.writeLog(__LINE__, "Setup MySQL Replication for COLD_STANDBY DMLProc going ACTIVE", LOG_TYPE_DEBUG);
oam::DeviceNetworkList devicenetworklist;
processManager.setMySQLReplication(devicenetworklist, (*pt).DeviceName);
} }
int status = processManager.startProcess((*pt).DeviceName, int status = processManager.startProcess((*pt).DeviceName,
@@ -7559,12 +7569,24 @@ void ProcessManager::checkSimplexModule(std::string moduleName)
if ( status == API_SUCCESS ) { if ( status == API_SUCCESS ) {
log.writeLog(__LINE__, "checkSimplexModule: mate process started: " + (*pt).DeviceName + "/" + systemprocessconfig.processconfig[j].ProcessName, LOG_TYPE_DEBUG); log.writeLog(__LINE__, "checkSimplexModule: mate process started: " + (*pt).DeviceName + "/" + systemprocessconfig.processconfig[j].ProcessName, LOG_TYPE_DEBUG);
//check to see if DDL/DML IPs need to be updated status = processManager.startProcess((*pt).DeviceName,
if ( systemprocessconfig.processconfig[j].ProcessName == "DDLProc" ) "DMLProc",
setPMProcIPs((*pt).DeviceName); FORCEFUL);
if ( status == API_SUCCESS ) {
log.writeLog(__LINE__, "checkSimplexModule: mate process started: " + (*pt).DeviceName + "/DMLProc", LOG_TYPE_DEBUG);
}
else
log.writeLog(__LINE__, "checkSimplexModule: mate process failed to start: " + (*pt).DeviceName + "/DMLProc", LOG_TYPE_DEBUG);
} }
else else
log.writeLog(__LINE__, "checkSimplexModule: mate process failed to start: " + (*pt).DeviceName + "/" + systemprocessconfig.processconfig[j].ProcessName, LOG_TYPE_DEBUG); log.writeLog(__LINE__, "checkSimplexModule: mate process failed to start: " + (*pt).DeviceName + "/" + systemprocessconfig.processconfig[j].ProcessName, LOG_TYPE_DEBUG);
//setup new MariaDB Replication Master
if ( systemprocessconfig.processconfig[j].ProcessName == "DMLProc" ) {
log.writeLog(__LINE__, "Setup MySQL Replication for COLD_STANDBY DMLProc going ACTIVE", LOG_TYPE_DEBUG);
oam::DeviceNetworkList devicenetworklist;
processManager.setMySQLReplication(devicenetworklist, (*pt).DeviceName);
}
} }
else else
{ // if found ACTIVE, skip to next process { // if found ACTIVE, skip to next process