Move bgworker specific logic to bgworker.c
For clarity, we've been slowly moving functions that are not called from the postmaster process out of postmaster.c. Author: Xing Guo <higuoxing@gmail.com> Discussion: https://www.postgresql.org/message-id/CACpMh%2BDBHVT4xPGimzvex%3DwMdMLQEu9PYhT%2BkwwD2x2nu9dU_Q%40mail.gmail.com
This commit is contained in:
parent
8213df9eff
commit
4d22173ec0
@ -851,6 +851,89 @@ BackgroundWorkerMain(char *startup_data, size_t startup_data_len)
|
|||||||
proc_exit(0);
|
proc_exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Connect background worker to a database.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
BackgroundWorkerInitializeConnection(const char *dbname, const char *username, uint32 flags)
|
||||||
|
{
|
||||||
|
BackgroundWorker *worker = MyBgworkerEntry;
|
||||||
|
bits32 init_flags = 0; /* never honor session_preload_libraries */
|
||||||
|
|
||||||
|
/* ignore datallowconn? */
|
||||||
|
if (flags & BGWORKER_BYPASS_ALLOWCONN)
|
||||||
|
init_flags |= INIT_PG_OVERRIDE_ALLOW_CONNS;
|
||||||
|
/* ignore rolcanlogin? */
|
||||||
|
if (flags & BGWORKER_BYPASS_ROLELOGINCHECK)
|
||||||
|
init_flags |= INIT_PG_OVERRIDE_ROLE_LOGIN;
|
||||||
|
|
||||||
|
/* XXX is this the right errcode? */
|
||||||
|
if (!(worker->bgw_flags & BGWORKER_BACKEND_DATABASE_CONNECTION))
|
||||||
|
ereport(FATAL,
|
||||||
|
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
|
||||||
|
errmsg("database connection requirement not indicated during registration")));
|
||||||
|
|
||||||
|
InitPostgres(dbname, InvalidOid, /* database to connect to */
|
||||||
|
username, InvalidOid, /* role to connect as */
|
||||||
|
init_flags,
|
||||||
|
NULL); /* no out_dbname */
|
||||||
|
|
||||||
|
/* it had better not gotten out of "init" mode yet */
|
||||||
|
if (!IsInitProcessingMode())
|
||||||
|
ereport(ERROR,
|
||||||
|
(errmsg("invalid processing mode in background worker")));
|
||||||
|
SetProcessingMode(NormalProcessing);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Connect background worker to a database using OIDs.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
BackgroundWorkerInitializeConnectionByOid(Oid dboid, Oid useroid, uint32 flags)
|
||||||
|
{
|
||||||
|
BackgroundWorker *worker = MyBgworkerEntry;
|
||||||
|
bits32 init_flags = 0; /* never honor session_preload_libraries */
|
||||||
|
|
||||||
|
/* ignore datallowconn? */
|
||||||
|
if (flags & BGWORKER_BYPASS_ALLOWCONN)
|
||||||
|
init_flags |= INIT_PG_OVERRIDE_ALLOW_CONNS;
|
||||||
|
/* ignore rolcanlogin? */
|
||||||
|
if (flags & BGWORKER_BYPASS_ROLELOGINCHECK)
|
||||||
|
init_flags |= INIT_PG_OVERRIDE_ROLE_LOGIN;
|
||||||
|
|
||||||
|
/* XXX is this the right errcode? */
|
||||||
|
if (!(worker->bgw_flags & BGWORKER_BACKEND_DATABASE_CONNECTION))
|
||||||
|
ereport(FATAL,
|
||||||
|
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
|
||||||
|
errmsg("database connection requirement not indicated during registration")));
|
||||||
|
|
||||||
|
InitPostgres(NULL, dboid, /* database to connect to */
|
||||||
|
NULL, useroid, /* role to connect as */
|
||||||
|
init_flags,
|
||||||
|
NULL); /* no out_dbname */
|
||||||
|
|
||||||
|
/* it had better not gotten out of "init" mode yet */
|
||||||
|
if (!IsInitProcessingMode())
|
||||||
|
ereport(ERROR,
|
||||||
|
(errmsg("invalid processing mode in background worker")));
|
||||||
|
SetProcessingMode(NormalProcessing);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Block/unblock signals in a background worker
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
BackgroundWorkerBlockSignals(void)
|
||||||
|
{
|
||||||
|
sigprocmask(SIG_SETMASK, &BlockSig, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
BackgroundWorkerUnblockSignals(void)
|
||||||
|
{
|
||||||
|
sigprocmask(SIG_SETMASK, &UnBlockSig, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register a new static background worker.
|
* Register a new static background worker.
|
||||||
*
|
*
|
||||||
|
@ -4148,89 +4148,6 @@ MaxLivePostmasterChildren(void)
|
|||||||
max_wal_senders + max_worker_processes);
|
max_wal_senders + max_worker_processes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Connect background worker to a database.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
BackgroundWorkerInitializeConnection(const char *dbname, const char *username, uint32 flags)
|
|
||||||
{
|
|
||||||
BackgroundWorker *worker = MyBgworkerEntry;
|
|
||||||
bits32 init_flags = 0; /* never honor session_preload_libraries */
|
|
||||||
|
|
||||||
/* ignore datallowconn? */
|
|
||||||
if (flags & BGWORKER_BYPASS_ALLOWCONN)
|
|
||||||
init_flags |= INIT_PG_OVERRIDE_ALLOW_CONNS;
|
|
||||||
/* ignore rolcanlogin? */
|
|
||||||
if (flags & BGWORKER_BYPASS_ROLELOGINCHECK)
|
|
||||||
init_flags |= INIT_PG_OVERRIDE_ROLE_LOGIN;
|
|
||||||
|
|
||||||
/* XXX is this the right errcode? */
|
|
||||||
if (!(worker->bgw_flags & BGWORKER_BACKEND_DATABASE_CONNECTION))
|
|
||||||
ereport(FATAL,
|
|
||||||
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
|
|
||||||
errmsg("database connection requirement not indicated during registration")));
|
|
||||||
|
|
||||||
InitPostgres(dbname, InvalidOid, /* database to connect to */
|
|
||||||
username, InvalidOid, /* role to connect as */
|
|
||||||
init_flags,
|
|
||||||
NULL); /* no out_dbname */
|
|
||||||
|
|
||||||
/* it had better not gotten out of "init" mode yet */
|
|
||||||
if (!IsInitProcessingMode())
|
|
||||||
ereport(ERROR,
|
|
||||||
(errmsg("invalid processing mode in background worker")));
|
|
||||||
SetProcessingMode(NormalProcessing);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Connect background worker to a database using OIDs.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
BackgroundWorkerInitializeConnectionByOid(Oid dboid, Oid useroid, uint32 flags)
|
|
||||||
{
|
|
||||||
BackgroundWorker *worker = MyBgworkerEntry;
|
|
||||||
bits32 init_flags = 0; /* never honor session_preload_libraries */
|
|
||||||
|
|
||||||
/* ignore datallowconn? */
|
|
||||||
if (flags & BGWORKER_BYPASS_ALLOWCONN)
|
|
||||||
init_flags |= INIT_PG_OVERRIDE_ALLOW_CONNS;
|
|
||||||
/* ignore rolcanlogin? */
|
|
||||||
if (flags & BGWORKER_BYPASS_ROLELOGINCHECK)
|
|
||||||
init_flags |= INIT_PG_OVERRIDE_ROLE_LOGIN;
|
|
||||||
|
|
||||||
/* XXX is this the right errcode? */
|
|
||||||
if (!(worker->bgw_flags & BGWORKER_BACKEND_DATABASE_CONNECTION))
|
|
||||||
ereport(FATAL,
|
|
||||||
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
|
|
||||||
errmsg("database connection requirement not indicated during registration")));
|
|
||||||
|
|
||||||
InitPostgres(NULL, dboid, /* database to connect to */
|
|
||||||
NULL, useroid, /* role to connect as */
|
|
||||||
init_flags,
|
|
||||||
NULL); /* no out_dbname */
|
|
||||||
|
|
||||||
/* it had better not gotten out of "init" mode yet */
|
|
||||||
if (!IsInitProcessingMode())
|
|
||||||
ereport(ERROR,
|
|
||||||
(errmsg("invalid processing mode in background worker")));
|
|
||||||
SetProcessingMode(NormalProcessing);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Block/unblock signals in a background worker
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
BackgroundWorkerBlockSignals(void)
|
|
||||||
{
|
|
||||||
sigprocmask(SIG_SETMASK, &BlockSig, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
BackgroundWorkerUnblockSignals(void)
|
|
||||||
{
|
|
||||||
sigprocmask(SIG_SETMASK, &UnBlockSig, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Start a new bgworker.
|
* Start a new bgworker.
|
||||||
* Starting time conditions must have been checked already.
|
* Starting time conditions must have been checked already.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user