Allow background workers to be started dynamically.
There is a new API, RegisterDynamicBackgroundWorker, which allows
an ordinary user backend to register a new background writer during
normal running. This means that it's no longer necessary for all
background workers to be registered during processing of
shared_preload_libraries, although the option of registering workers
at that time remains available.
When a background worker exits and will not be restarted, the
slot previously used by that background worker is automatically
released and becomes available for reuse. Slots used by background
workers that are configured for automatic restart can't (yet) be
released without shutting down the system.
This commit adds a new source file, bgworker.c, and moves some
of the existing control logic for background workers there.
Previously, there was little enough logic that it made sense to
keep everything in postmaster.c, but not any more.
This commit also makes the worker_spi contrib module into an
extension and adds a new function, worker_spi_launch, which can
be used to demonstrate the new facility.
2013-07-16 19:02:15 +02:00
|
|
|
/*--------------------------------------------------------------------
|
|
|
|
* bgworker_internals.h
|
|
|
|
* POSTGRES pluggable background workers internals
|
|
|
|
*
|
2024-01-04 02:49:05 +01:00
|
|
|
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
Allow background workers to be started dynamically.
There is a new API, RegisterDynamicBackgroundWorker, which allows
an ordinary user backend to register a new background writer during
normal running. This means that it's no longer necessary for all
background workers to be registered during processing of
shared_preload_libraries, although the option of registering workers
at that time remains available.
When a background worker exits and will not be restarted, the
slot previously used by that background worker is automatically
released and becomes available for reuse. Slots used by background
workers that are configured for automatic restart can't (yet) be
released without shutting down the system.
This commit adds a new source file, bgworker.c, and moves some
of the existing control logic for background workers there.
Previously, there was little enough logic that it made sense to
keep everything in postmaster.c, but not any more.
This commit also makes the worker_spi contrib module into an
extension and adds a new function, worker_spi_launch, which can
be used to demonstrate the new facility.
2013-07-16 19:02:15 +02:00
|
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
|
|
*
|
|
|
|
* IDENTIFICATION
|
2013-07-31 23:57:00 +02:00
|
|
|
* src/include/postmaster/bgworker_internals.h
|
Allow background workers to be started dynamically.
There is a new API, RegisterDynamicBackgroundWorker, which allows
an ordinary user backend to register a new background writer during
normal running. This means that it's no longer necessary for all
background workers to be registered during processing of
shared_preload_libraries, although the option of registering workers
at that time remains available.
When a background worker exits and will not be restarted, the
slot previously used by that background worker is automatically
released and becomes available for reuse. Slots used by background
workers that are configured for automatic restart can't (yet) be
released without shutting down the system.
This commit adds a new source file, bgworker.c, and moves some
of the existing control logic for background workers there.
Previously, there was little enough logic that it made sense to
keep everything in postmaster.c, but not any more.
This commit also makes the worker_spi contrib module into an
extension and adds a new function, worker_spi_launch, which can
be used to demonstrate the new facility.
2013-07-16 19:02:15 +02:00
|
|
|
*--------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
#ifndef BGWORKER_INTERNALS_H
|
|
|
|
#define BGWORKER_INTERNALS_H
|
|
|
|
|
|
|
|
#include "datatype/timestamp.h"
|
|
|
|
#include "lib/ilist.h"
|
|
|
|
#include "postmaster/bgworker.h"
|
|
|
|
|
2017-04-11 19:03:44 +02:00
|
|
|
/* GUC options */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Maximum possible value of parallel workers.
|
|
|
|
*/
|
|
|
|
#define MAX_PARALLEL_WORKER_LIMIT 1024
|
|
|
|
|
Allow background workers to be started dynamically.
There is a new API, RegisterDynamicBackgroundWorker, which allows
an ordinary user backend to register a new background writer during
normal running. This means that it's no longer necessary for all
background workers to be registered during processing of
shared_preload_libraries, although the option of registering workers
at that time remains available.
When a background worker exits and will not be restarted, the
slot previously used by that background worker is automatically
released and becomes available for reuse. Slots used by background
workers that are configured for automatic restart can't (yet) be
released without shutting down the system.
This commit adds a new source file, bgworker.c, and moves some
of the existing control logic for background workers there.
Previously, there was little enough logic that it made sense to
keep everything in postmaster.c, but not any more.
This commit also makes the worker_spi contrib module into an
extension and adds a new function, worker_spi_launch, which can
be used to demonstrate the new facility.
2013-07-16 19:02:15 +02:00
|
|
|
/*
|
|
|
|
* List of background workers, private to postmaster.
|
|
|
|
*
|
|
|
|
* A worker that requests a database connection during registration will have
|
|
|
|
* rw_backend set, and will be present in BackendList. Note: do not rely on
|
|
|
|
* rw_backend being non-NULL for shmem-connected workers!
|
|
|
|
*/
|
|
|
|
typedef struct RegisteredBgWorker
|
|
|
|
{
|
|
|
|
BackgroundWorker rw_worker; /* its registry entry */
|
|
|
|
struct bkend *rw_backend; /* its BackendList entry, or NULL */
|
|
|
|
pid_t rw_pid; /* 0 if not running */
|
|
|
|
int rw_child_slot;
|
|
|
|
TimestampTz rw_crashed_at; /* if not 0, time it last crashed */
|
|
|
|
int rw_shmem_slot;
|
2013-10-18 16:21:25 +02:00
|
|
|
bool rw_terminate;
|
Allow background workers to be started dynamically.
There is a new API, RegisterDynamicBackgroundWorker, which allows
an ordinary user backend to register a new background writer during
normal running. This means that it's no longer necessary for all
background workers to be registered during processing of
shared_preload_libraries, although the option of registering workers
at that time remains available.
When a background worker exits and will not be restarted, the
slot previously used by that background worker is automatically
released and becomes available for reuse. Slots used by background
workers that are configured for automatic restart can't (yet) be
released without shutting down the system.
This commit adds a new source file, bgworker.c, and moves some
of the existing control logic for background workers there.
Previously, there was little enough logic that it made sense to
keep everything in postmaster.c, but not any more.
This commit also makes the worker_spi contrib module into an
extension and adds a new function, worker_spi_launch, which can
be used to demonstrate the new facility.
2013-07-16 19:02:15 +02:00
|
|
|
slist_node rw_lnode; /* list link */
|
|
|
|
} RegisteredBgWorker;
|
|
|
|
|
2022-04-08 14:16:38 +02:00
|
|
|
extern PGDLLIMPORT slist_head BackgroundWorkerList;
|
Allow background workers to be started dynamically.
There is a new API, RegisterDynamicBackgroundWorker, which allows
an ordinary user backend to register a new background writer during
normal running. This means that it's no longer necessary for all
background workers to be registered during processing of
shared_preload_libraries, although the option of registering workers
at that time remains available.
When a background worker exits and will not be restarted, the
slot previously used by that background worker is automatically
released and becomes available for reuse. Slots used by background
workers that are configured for automatic restart can't (yet) be
released without shutting down the system.
This commit adds a new source file, bgworker.c, and moves some
of the existing control logic for background workers there.
Previously, there was little enough logic that it made sense to
keep everything in postmaster.c, but not any more.
This commit also makes the worker_spi contrib module into an
extension and adds a new function, worker_spi_launch, which can
be used to demonstrate the new facility.
2013-07-16 19:02:15 +02:00
|
|
|
|
|
|
|
extern Size BackgroundWorkerShmemSize(void);
|
|
|
|
extern void BackgroundWorkerShmemInit(void);
|
2020-12-24 23:00:43 +01:00
|
|
|
extern void BackgroundWorkerStateChange(bool allow_new_workers);
|
2013-07-24 23:41:55 +02:00
|
|
|
extern void ForgetBackgroundWorker(slist_mutable_iter *cur);
|
2013-08-28 20:08:13 +02:00
|
|
|
extern void ReportBackgroundWorkerPID(RegisteredBgWorker *);
|
2017-03-03 04:44:49 +01:00
|
|
|
extern void ReportBackgroundWorkerExit(slist_mutable_iter *cur);
|
2013-08-28 20:08:13 +02:00
|
|
|
extern void BackgroundWorkerStopNotifications(pid_t pid);
|
2020-12-24 23:00:43 +01:00
|
|
|
extern void ForgetUnstartedBackgroundWorkers(void);
|
2014-05-07 22:04:47 +02:00
|
|
|
extern void ResetBackgroundWorkerCrashTimes(void);
|
Allow background workers to be started dynamically.
There is a new API, RegisterDynamicBackgroundWorker, which allows
an ordinary user backend to register a new background writer during
normal running. This means that it's no longer necessary for all
background workers to be registered during processing of
shared_preload_libraries, although the option of registering workers
at that time remains available.
When a background worker exits and will not be restarted, the
slot previously used by that background worker is automatically
released and becomes available for reuse. Slots used by background
workers that are configured for automatic restart can't (yet) be
released without shutting down the system.
This commit adds a new source file, bgworker.c, and moves some
of the existing control logic for background workers there.
Previously, there was little enough logic that it made sense to
keep everything in postmaster.c, but not any more.
This commit also makes the worker_spi contrib module into an
extension and adds a new function, worker_spi_launch, which can
be used to demonstrate the new facility.
2013-07-16 19:02:15 +02:00
|
|
|
|
2023-10-09 10:52:09 +02:00
|
|
|
/* Entry point for background worker processes */
|
2024-03-18 10:35:08 +01:00
|
|
|
extern void BackgroundWorkerMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn();
|
2013-08-16 21:14:54 +02:00
|
|
|
|
2013-07-31 23:57:00 +02:00
|
|
|
#endif /* BGWORKER_INTERNALS_H */
|