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);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
|
@ -4148,89 +4148,6 @@ MaxLivePostmasterChildren(void)
|
||||
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.
|
||||
* Starting time conditions must have been checked already.
|
||||
|
Loading…
x
Reference in New Issue
Block a user