Don't error out when cannot create maintenanced

pull/3815/head
Hadi Moshayedi 2020-05-01 14:04:16 -07:00
parent 4a9d516f1b
commit dbf509bbdd
1 changed files with 22 additions and 6 deletions

View File

@ -112,6 +112,7 @@ static void MaintenanceDaemonShmemExit(int code, Datum arg);
static void MaintenanceDaemonErrorContext(void *arg);
static bool LockCitusExtension(void);
static bool MetadataSyncTriggeredCheckAndReset(MaintenanceDaemonDBData *dbData);
static void WarnMaintenanceDaemonNotStarted(void);
/*
@ -153,8 +154,10 @@ InitializeMaintenanceDaemonBackend(void)
if (dbData == NULL)
{
/* FIXME: better message, reference relevant guc in hint */
ereport(ERROR, (errmsg("ran out of database slots")));
WarnMaintenanceDaemonNotStarted();
LWLockRelease(&MaintenanceDaemonControl->lock);
return;
}
/* maintenance daemon can ignore itself */
@ -169,8 +172,6 @@ InitializeMaintenanceDaemonBackend(void)
BackgroundWorker worker;
BackgroundWorkerHandle *handle = NULL;
dbData->userOid = extensionOwner;
memset(&worker, 0, sizeof(worker));
SafeSnprintf(worker.bgw_name, sizeof(worker.bgw_name),
@ -200,11 +201,15 @@ InitializeMaintenanceDaemonBackend(void)
if (!RegisterDynamicBackgroundWorker(&worker, &handle))
{
ereport(ERROR, (errmsg("could not start maintenance background worker"),
errhint("Increasing max_worker_processes might help.")));
WarnMaintenanceDaemonNotStarted();
dbData->daemonStarted = false;
LWLockRelease(&MaintenanceDaemonControl->lock);
return;
}
dbData->daemonStarted = true;
dbData->userOid = extensionOwner;
dbData->workerPid = 0;
dbData->triggerMetadataSync = false;
LWLockRelease(&MaintenanceDaemonControl->lock);
@ -235,6 +240,17 @@ InitializeMaintenanceDaemonBackend(void)
}
/*
* WarnMaintenanceDaemonNotStarted warns that maintenanced couldn't be started.
*/
static void
WarnMaintenanceDaemonNotStarted(void)
{
ereport(WARNING, (errmsg("could not start maintenance background worker"),
errhint("Increasing max_worker_processes might help.")));
}
/*
* CitusMaintenanceDaemonMain is the maintenance daemon's main routine, it'll
* be started by the background worker infrastructure. If it errors out,