From dbf509bbdde21d25359f9ffd989cfa43a93d20bb Mon Sep 17 00:00:00 2001 From: Hadi Moshayedi Date: Fri, 1 May 2020 14:04:16 -0700 Subject: [PATCH] Don't error out when cannot create maintenanced --- src/backend/distributed/utils/maintenanced.c | 28 +++++++++++++++----- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/backend/distributed/utils/maintenanced.c b/src/backend/distributed/utils/maintenanced.c index 46bdafb10..6a7c509b5 100644 --- a/src/backend/distributed/utils/maintenanced.c +++ b/src/backend/distributed/utils/maintenanced.c @@ -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,