Merge pull request #3815 from citusdata/fix_maintenaced

Don't error out when cannot create maintenanced
pull/3814/head
Hadi Moshayedi 2020-05-04 10:29:33 -07:00 committed by GitHub
commit d4943cee55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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 void MaintenanceDaemonErrorContext(void *arg);
static bool LockCitusExtension(void); static bool LockCitusExtension(void);
static bool MetadataSyncTriggeredCheckAndReset(MaintenanceDaemonDBData *dbData); static bool MetadataSyncTriggeredCheckAndReset(MaintenanceDaemonDBData *dbData);
static void WarnMaintenanceDaemonNotStarted(void);
/* /*
@ -153,8 +154,10 @@ InitializeMaintenanceDaemonBackend(void)
if (dbData == NULL) if (dbData == NULL)
{ {
/* FIXME: better message, reference relevant guc in hint */ WarnMaintenanceDaemonNotStarted();
ereport(ERROR, (errmsg("ran out of database slots"))); LWLockRelease(&MaintenanceDaemonControl->lock);
return;
} }
/* maintenance daemon can ignore itself */ /* maintenance daemon can ignore itself */
@ -169,8 +172,6 @@ InitializeMaintenanceDaemonBackend(void)
BackgroundWorker worker; BackgroundWorker worker;
BackgroundWorkerHandle *handle = NULL; BackgroundWorkerHandle *handle = NULL;
dbData->userOid = extensionOwner;
memset(&worker, 0, sizeof(worker)); memset(&worker, 0, sizeof(worker));
SafeSnprintf(worker.bgw_name, sizeof(worker.bgw_name), SafeSnprintf(worker.bgw_name, sizeof(worker.bgw_name),
@ -200,11 +201,15 @@ InitializeMaintenanceDaemonBackend(void)
if (!RegisterDynamicBackgroundWorker(&worker, &handle)) if (!RegisterDynamicBackgroundWorker(&worker, &handle))
{ {
ereport(ERROR, (errmsg("could not start maintenance background worker"), WarnMaintenanceDaemonNotStarted();
errhint("Increasing max_worker_processes might help."))); dbData->daemonStarted = false;
LWLockRelease(&MaintenanceDaemonControl->lock);
return;
} }
dbData->daemonStarted = true; dbData->daemonStarted = true;
dbData->userOid = extensionOwner;
dbData->workerPid = 0; dbData->workerPid = 0;
dbData->triggerMetadataSync = false; dbData->triggerMetadataSync = false;
LWLockRelease(&MaintenanceDaemonControl->lock); 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 * CitusMaintenanceDaemonMain is the maintenance daemon's main routine, it'll
* be started by the background worker infrastructure. If it errors out, * be started by the background worker infrastructure. If it errors out,