1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-08-07 03:22:57 +03:00

Fix restart hang

mcsadmin restart will do a status call. Before this would log status
output to a file which would be checked. If that file check failed a PID
check would be made.

We do not log the status to a file any more since it could have multiple
different outputs. The PID check could hit a race condition where it is
being checked before the process is up. This would mean there is no
module state change causing a hang.

This fix does the following:

1. Remove the file status check completely
2. Loop the PID check to give it time to come up
3. If the PID check fails drop to a DEGRADED state

This makes mcsadmin restart work correctly again.
This commit is contained in:
Andrew Hutchings
2020-02-12 09:57:22 +00:00
parent 7df731a3a6
commit f9e5bdbc8d

View File

@@ -7927,11 +7927,11 @@ void Oam::actionMysqlCalpont(MYSQLCALPONT_ACTION action)
getProcessStatus("mysqld", moduleName, procstat); getProcessStatus("mysqld", moduleName, procstat);
int state = procstat.ProcessOpState; int state = procstat.ProcessOpState;
pid_t pidStatus = procstat.ProcessID; pid_t pidStatus = procstat.ProcessID;
pid_t pid = 0;
string mysqlStatus = tmpdir + "/mysql.status"; string mysqlStatus = tmpdir + "/mysql.status";
if (checkLogStatus(mysqlStatus, "MySQL running"))
{
if ( state != ACTIVE ) if ( state != ACTIVE )
{
for (int i=0; i < 10; i++)
{ {
//get pid //get pid
char buf[512]; char buf[512];
@@ -7942,6 +7942,8 @@ void Oam::actionMysqlCalpont(MYSQLCALPONT_ACTION action)
pclose( cmd_pipe ); pclose( cmd_pipe );
if (pid)
{
//set process status //set process status
try try
{ {
@@ -7949,10 +7951,17 @@ void Oam::actionMysqlCalpont(MYSQLCALPONT_ACTION action)
} }
catch (...) catch (...)
{} {}
return; return;
} }
else else
{
sleep(2);
}
}
}
else
{
for (int i=0; i < 10; i++)
{ {
//check if pid has changed //check if pid has changed
char buf[512]; char buf[512];
@@ -7963,6 +7972,8 @@ void Oam::actionMysqlCalpont(MYSQLCALPONT_ACTION action)
pclose( cmd_pipe ); pclose( cmd_pipe );
if (pid)
{
if ( pidStatus != pid ) if ( pidStatus != pid )
{ {
//set process status //set process status
@@ -7972,9 +7983,17 @@ void Oam::actionMysqlCalpont(MYSQLCALPONT_ACTION action)
} }
catch (...) catch (...)
{} {}
break;
} }
} }
else
{
sleep(2);
}
}
}
if (pid)
{
//check module status, if DEGRADED set to ACTIVE //check module status, if DEGRADED set to ACTIVE
int opState; int opState;
bool degraded; bool degraded;