diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 21f5e2c..59647fb 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -343,6 +343,7 @@ static void perform_work_item(AutoVacuumWorkItem *workitem); static void autovac_report_activity(autovac_table *tab); static void autovac_report_workitem(AutoVacuumWorkItem *workitem, const char *nspname, const char *relname); +static const char *autovac_get_workitem_name(AutoVacuumWorkItemType type); static void av_sighup_handler(SIGNAL_ARGS); static void avl_sigusr2_handler(SIGNAL_ARGS); static void avl_sigterm_handler(SIGNAL_ARGS); @@ -3207,11 +3208,12 @@ AutoVacuumingActive(void) /* * Request one work item to the next autovacuum run processing our database. */ -void +bool AutoVacuumRequestWork(AutoVacuumWorkItemType type, Oid relationId, BlockNumber blkno) { int i; + bool requested = false; LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE); @@ -3231,12 +3233,41 @@ AutoVacuumRequestWork(AutoVacuumWorkItemType type, Oid relationId, workitem->avw_database = MyDatabaseId; workitem->avw_relation = relationId; workitem->avw_blockNumber = blkno; + requested = true; /* done */ break; } LWLockRelease(AutovacuumLock); + + if (!requested) + ereport(LOG, (errcode(ERRCODE_CONFIGURATION_LIMIT_EXCEEDED), + errmsg("could not request an autovacuum work item \"%s\" for \"%s\"", + autovac_get_workitem_name(type), get_rel_name(relationId)))); + + return requested; +} + +/* + * autovac_get_workitem_name + * + * Convert AutoVacuumWorkerItemType to string. + */ +static const char * +autovac_get_workitem_name(AutoVacuumWorkItemType type) +{ + const char *workitem_name = "UnknownWorkItem"; + + switch (type) + { + case AVW_BRINSummarizeRange: + workitem_name = "BrinSummarizeRange"; + break; + /* no default case, so that compiler will warn */ + } + + return workitem_name; } /* diff --git a/src/include/postmaster/autovacuum.h b/src/include/postmaster/autovacuum.h index 18cff54..96752ca 100644 --- a/src/include/postmaster/autovacuum.h +++ b/src/include/postmaster/autovacuum.h @@ -71,7 +71,7 @@ extern void AutovacuumWorkerIAm(void); extern void AutovacuumLauncherIAm(void); #endif -extern void AutoVacuumRequestWork(AutoVacuumWorkItemType type, +extern bool AutoVacuumRequestWork(AutoVacuumWorkItemType type, Oid relationId, BlockNumber blkno); /* shared memory stuff */