You've already forked mariadb-columnstore-engine
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:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user