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