mirror of
https://github.com/postgres/postgres.git
synced 2025-05-05 09:19:17 +03:00
The worker.c global wrconn is only meant to be used by logical apply/ tablesync workers, but there are other variables with the same name. To reduce future confusion rename the global from "wrconn" to "LogRepWorkerWalRcvConn". While this is just cosmetic, it seems better to backpatch it all the way back to 10 where this code appeared, to avoid future backpatching issues. Author: Peter Smith <smithpb2250@gmail.com> Discussion: https://postgr.es/m/CAHut+Pu7Jv9L2BOEx_Z0UtJxfDevQSAUW2mJqWU+CtmDrEZVAg@mail.gmail.com
100 lines
2.7 KiB
C
100 lines
2.7 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* worker_internal.h
|
|
* Internal headers shared by logical replication workers.
|
|
*
|
|
* Portions Copyright (c) 2016-2021, PostgreSQL Global Development Group
|
|
*
|
|
* src/include/replication/worker_internal.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef WORKER_INTERNAL_H
|
|
#define WORKER_INTERNAL_H
|
|
|
|
#include <signal.h>
|
|
|
|
#include "access/xlogdefs.h"
|
|
#include "catalog/pg_subscription.h"
|
|
#include "datatype/timestamp.h"
|
|
#include "storage/lock.h"
|
|
#include "storage/spin.h"
|
|
|
|
|
|
typedef struct LogicalRepWorker
|
|
{
|
|
/* Time at which this worker was launched. */
|
|
TimestampTz launch_time;
|
|
|
|
/* Indicates if this slot is used or free. */
|
|
bool in_use;
|
|
|
|
/* Increased every time the slot is taken by new worker. */
|
|
uint16 generation;
|
|
|
|
/* Pointer to proc array. NULL if not running. */
|
|
PGPROC *proc;
|
|
|
|
/* Database id to connect to. */
|
|
Oid dbid;
|
|
|
|
/* User to use for connection (will be same as owner of subscription). */
|
|
Oid userid;
|
|
|
|
/* Subscription id for the worker. */
|
|
Oid subid;
|
|
|
|
/* Used for initial table synchronization. */
|
|
Oid relid;
|
|
char relstate;
|
|
XLogRecPtr relstate_lsn;
|
|
slock_t relmutex;
|
|
|
|
/* Stats. */
|
|
XLogRecPtr last_lsn;
|
|
TimestampTz last_send_time;
|
|
TimestampTz last_recv_time;
|
|
XLogRecPtr reply_lsn;
|
|
TimestampTz reply_time;
|
|
} LogicalRepWorker;
|
|
|
|
/* Main memory context for apply worker. Permanent during worker lifetime. */
|
|
extern MemoryContext ApplyContext;
|
|
|
|
/* libpqreceiver connection */
|
|
extern struct WalReceiverConn *LogRepWorkerWalRcvConn;
|
|
|
|
/* Worker and subscription objects. */
|
|
extern Subscription *MySubscription;
|
|
extern LogicalRepWorker *MyLogicalRepWorker;
|
|
|
|
extern bool in_remote_transaction;
|
|
|
|
extern void logicalrep_worker_attach(int slot);
|
|
extern LogicalRepWorker *logicalrep_worker_find(Oid subid, Oid relid,
|
|
bool only_running);
|
|
extern List *logicalrep_workers_find(Oid subid, bool only_running);
|
|
extern void logicalrep_worker_launch(Oid dbid, Oid subid, const char *subname,
|
|
Oid userid, Oid relid);
|
|
extern void logicalrep_worker_stop(Oid subid, Oid relid);
|
|
extern void logicalrep_worker_wakeup(Oid subid, Oid relid);
|
|
extern void logicalrep_worker_wakeup_ptr(LogicalRepWorker *worker);
|
|
|
|
extern int logicalrep_sync_worker_count(Oid subid);
|
|
|
|
extern void ReplicationOriginNameForTablesync(Oid suboid, Oid relid,
|
|
char *originname, int szorgname);
|
|
extern char *LogicalRepSyncTableStart(XLogRecPtr *origin_startpos);
|
|
|
|
void process_syncing_tables(XLogRecPtr current_lsn);
|
|
void invalidate_syncing_table_states(Datum arg, int cacheid,
|
|
uint32 hashvalue);
|
|
|
|
static inline bool
|
|
am_tablesync_worker(void)
|
|
{
|
|
return OidIsValid(MyLogicalRepWorker->relid);
|
|
}
|
|
|
|
#endif /* WORKER_INTERNAL_H */
|