mirror of https://github.com/citusdata/citus.git
Fix StopMaintenanceDaemon by introduction of dbData.daemonShuttingDown flag
parent
bcd1bb3805
commit
9f63b5a379
|
@ -90,6 +90,7 @@ typedef struct MaintenanceDaemonDBData
|
||||||
Oid userOid;
|
Oid userOid;
|
||||||
pid_t workerPid;
|
pid_t workerPid;
|
||||||
bool daemonStarted;
|
bool daemonStarted;
|
||||||
|
bool daemonShuttingDown;
|
||||||
bool triggerNodeMetadataSync;
|
bool triggerNodeMetadataSync;
|
||||||
Latch *latch; /* pointer to the background worker's latch */
|
Latch *latch; /* pointer to the background worker's latch */
|
||||||
} MaintenanceDaemonDBData;
|
} MaintenanceDaemonDBData;
|
||||||
|
@ -243,6 +244,14 @@ InitializeMaintenanceDaemonBackend(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dbData->daemonShuttingDown)
|
||||||
|
{
|
||||||
|
elog(DEBUG1, "Another maintenance daemon for database %u is shutting down. "
|
||||||
|
"Aborting current initialization", MyDatabaseId);
|
||||||
|
LWLockRelease(&MaintenanceDaemonControl->lock);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (IsMaintenanceDaemon)
|
if (IsMaintenanceDaemon)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -1058,20 +1067,8 @@ MaintenanceDaemonShmemExit(int code, Datum arg)
|
||||||
|
|
||||||
MaintenanceDaemonDBData *myDbData = (MaintenanceDaemonDBData *)
|
MaintenanceDaemonDBData *myDbData = (MaintenanceDaemonDBData *)
|
||||||
hash_search(MaintenanceDaemonDBHash, &databaseOid,
|
hash_search(MaintenanceDaemonDBHash, &databaseOid,
|
||||||
HASH_FIND, NULL);
|
HASH_REMOVE, NULL);
|
||||||
|
|
||||||
/* myDbData is NULL after StopMaintenanceDaemon */
|
|
||||||
if (myDbData != NULL)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Confirm that I am still the registered maintenance daemon before exiting.
|
|
||||||
*/
|
|
||||||
Assert(myDbData->workerPid == MyProcPid);
|
Assert(myDbData->workerPid == MyProcPid);
|
||||||
|
|
||||||
myDbData->daemonStarted = false;
|
|
||||||
myDbData->workerPid = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
LWLockRelease(&MaintenanceDaemonControl->lock);
|
LWLockRelease(&MaintenanceDaemonControl->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1170,11 +1167,12 @@ StopMaintenanceDaemon(Oid databaseId)
|
||||||
MaintenanceDaemonDBData *dbData = (MaintenanceDaemonDBData *) hash_search(
|
MaintenanceDaemonDBData *dbData = (MaintenanceDaemonDBData *) hash_search(
|
||||||
MaintenanceDaemonDBHash,
|
MaintenanceDaemonDBHash,
|
||||||
&databaseId,
|
&databaseId,
|
||||||
HASH_REMOVE, &found);
|
HASH_FIND, &found);
|
||||||
|
|
||||||
if (found)
|
if (found)
|
||||||
{
|
{
|
||||||
workerPid = dbData->workerPid;
|
workerPid = dbData->workerPid;
|
||||||
|
dbData->daemonShuttingDown = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
LWLockRelease(&MaintenanceDaemonControl->lock);
|
LWLockRelease(&MaintenanceDaemonControl->lock);
|
||||||
|
|
Loading…
Reference in New Issue