v1-0001-Add-LogicalRepWorkerType-enum.patch
application/octet-stream
Filename: v1-0001-Add-LogicalRepWorkerType-enum.patch
Type: application/octet-stream
Part: 0
Message:
Adding a LogicalRepWorker type field
Patch
Format: format-patch
Series: patch v1-0001
Subject: Add LogicalRepWorkerType enum
| File | + | − |
|---|---|---|
| src/backend/replication/logical/launcher.c | 4 | 0 |
| src/include/replication/worker_internal.h | 16 | 4 |
From 8afba828a3c1cf3e23a85f9c9f034bbc90977237 Mon Sep 17 00:00:00 2001
From: Peter Smith <peter.b.smith@fujitsu.com>
Date: Fri, 28 Jul 2023 14:45:00 +1000
Subject: [PATCH v1] Add LogicalRepWorkerType enum
---
src/backend/replication/logical/launcher.c | 4 ++++
src/include/replication/worker_internal.h | 20 ++++++++++++++++----
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c
index 542af7d..702732f 100644
--- a/src/backend/replication/logical/launcher.c
+++ b/src/backend/replication/logical/launcher.c
@@ -427,6 +427,10 @@ retry:
}
/* Prepare the worker slot. */
+ worker->type =
+ OidIsValid(relid) ? LR_WORKER_TABLESYNC :
+ is_parallel_apply_worker ? LR_WORKER_APPLY_PARALLEL :
+ LR_WORKER_APPLY;
worker->launch_time = now;
worker->in_use = true;
worker->generation++;
diff --git a/src/include/replication/worker_internal.h b/src/include/replication/worker_internal.h
index 343e781..97447dc 100644
--- a/src/include/replication/worker_internal.h
+++ b/src/include/replication/worker_internal.h
@@ -27,8 +27,19 @@
#include "storage/spin.h"
+/* Different kinds of workers */
+typedef enum LogicalRepWorkerType
+{
+ LR_WORKER_TABLESYNC,
+ LR_WORKER_APPLY,
+ LR_WORKER_APPLY_PARALLEL
+} LogicalRepWorkerType;
+
typedef struct LogicalRepWorker
{
+ /* What type of worker is this? */
+ LogicalRepWorkerType type;
+
/* Time at which this worker was launched. */
TimestampTz launch_time;
@@ -305,19 +316,20 @@ extern void pa_decr_and_wait_stream_block(void);
extern void pa_xact_finish(ParallelApplyWorkerInfo *winfo,
XLogRecPtr remote_lsn);
-#define isParallelApplyWorker(worker) ((worker)->leader_pid != InvalidPid)
+#define isLeaderApplyWorker(worker) ((worker)->type == LR_WORKER_APPLY)
+#define isParallelApplyWorker(worker) ((worker)->type == LR_WORKER_APPLY_PARALLEL)
+#define isTablesyncWorker(worker) ((worker)->type == LR_WORKER_TABLESYNC)
static inline bool
am_tablesync_worker(void)
{
- return OidIsValid(MyLogicalRepWorker->relid);
+ return isTablesyncWorker(MyLogicalRepWorker);
}
static inline bool
am_leader_apply_worker(void)
{
- return (!am_tablesync_worker() &&
- !isParallelApplyWorker(MyLogicalRepWorker));
+ return isLeaderApplyWorker(MyLogicalRepWorker);
}
static inline bool
--
1.8.3.1