1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-30 19:23:07 +03:00

MCOL-3577: Make this run syncFS for storagemanager on all nodes when suspend writes is done from mcsadmin.

This commit is contained in:
benthompson15
2019-11-21 15:13:39 -06:00
parent 18d31fae82
commit 830490c846
5 changed files with 108 additions and 2 deletions

View File

@ -3232,6 +3232,10 @@ void Oam::SuspendWrites(GRACEFUL_FLAG gracefulflag, ACK_FLAG ackflag)
cout << endl << " Suspension of database writes canceled" << endl << endl;
break;
case API_FAILURE:
cout << endl << " Suspension of database writes failed: Filesystem sync failed" << endl << endl;
break;
default:
exceptionControl("suspendWrites", returnStatus);
break;

View File

@ -581,7 +581,8 @@ enum PROC_MGT_TYPE_REQUEST
DISABLEREP,
PROCGLUSTERASSIGN,
PROCGLUSTERUNASSIGN,
CONFIGURE
CONFIGURE,
SYNCFSALL
};

View File

@ -2794,7 +2794,78 @@ void processMSG(messageqcpp::IOSocket* cfIos)
string currentFileName = DBRMroot + "_current";
IDBFileSystem &fs = IDBPolicy::getFs(currentFileName.c_str());
fs.filesystemSync();
if (!fs.filesystemSync())
{
ackMsg << (ByteStream::byte) oam::ACK;
ackMsg << actionType;
ackMsg << target;
ackMsg << (ByteStream::byte) API_FAILURE;
try
{
fIos.write(ackMsg);
}
catch (...) {}
log.writeLog(__LINE__, "SUSPENDWRITES: API_FAILURE filestemSync()",LOG_TYPE_ERROR);
break;
}
//sync fs on all pm nodes if up
for ( unsigned int i = 0 ; i < systemmoduletypeconfig.moduletypeconfig.size(); i++)
{
if ( systemmoduletypeconfig.moduletypeconfig[i].ModuleType != "pm" )
continue;
int moduleCount = systemmoduletypeconfig.moduletypeconfig[i].ModuleCount;
if ( moduleCount == 0)
continue;
DeviceNetworkList::iterator pt = systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.begin();
for ( ; pt != systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.end(); pt++)
{
int opState = oam::ACTIVE;
bool degraded;
try
{
oam.getModuleStatus((*pt).DeviceName, opState, degraded);
}
catch (...)
{
log.writeLog(__LINE__, "EXCEPTION ERROR on getModuleStatus on module " + (*pt).DeviceName + ": Caught unknown exception!", LOG_TYPE_ERROR);
}
if (opState == oam::MAN_DISABLED || opState == oam::AUTO_DISABLED)
continue;
ByteStream msg;
ByteStream::byte requestID = SYNCFSALL;
msg << requestID;
int returnStatus = processManager.sendMsgProcMon( (*pt).DeviceName, msg, requestID );
if (returnStatus != API_SUCCESS)
{
ackMsg << (ByteStream::byte) oam::ACK;
ackMsg << actionType;
ackMsg << target;
ackMsg << (ByteStream::byte) API_FAILURE;
try
{
fIos.write(ackMsg);
}
catch (...) {}
log.writeLog(__LINE__, "SUSPENDWRITES: API_FAILURE filestemSync() on module " + (*pt).DeviceName,LOG_TYPE_ERROR);
break;
}
}
}
}
ackMsg.reset();

View File

@ -2072,6 +2072,19 @@ void ProcessMonitor::processMessage(messageqcpp::ByteStream msg, messageqcpp::IO
break;
}
case SYNCFSALL:
{
log.writeLog(__LINE__, "MSG RECEIVED: SYNC FileSystem...");
int requestStatus = API_SUCCESS;
requestStatus = syncFS();
ackMsg << (ByteStream::byte) ACK;
ackMsg << (ByteStream::byte) SHUTDOWNMODULE;
ackMsg << (ByteStream::byte) API_SUCCESS;
mq.write(ackMsg);
log.writeLog(__LINE__, "SYNCFSALL: ACK back to ProcMgr, return status = " + oam.itoa((int) API_SUCCESS));
break;
}
default:
break;
@ -6188,6 +6201,22 @@ int ProcessMonitor::glusterUnassign(std::string dbrootID)
return oam::API_SUCCESS;
}
int ProcessMonitor::syncFS()
{
Oam oam;
string DBRMroot;
oam.getSystemConfig("DBRMRoot", DBRMroot);
string currentFileName = DBRMroot + "_current";
IDBFileSystem &fs = IDBPolicy::getFs(currentFileName.c_str());
bool success = fs.filesystemSync();
if (!success)
return oam::API_FAILURE;
return oam::API_SUCCESS;
}
} //end of namespace
// vim:ts=4 sw=4:

View File

@ -542,6 +542,7 @@ public:
*/
int glusterUnassign(std::string dbrootID);
int syncFS();
/**
* return the process list
*/