v68-0001-changes_amit_1.patch
application/octet-stream
Filename: v68-0001-changes_amit_1.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
Series: patch v68-0001
| File | + | − |
|---|---|---|
| src/backend/replication/logical/applyparallelworker.c | 15 | 12 |
| src/test/subscription/t/017_stream_ddl.pl | 2 | 3 |
| src/test/subscription/t/019_stream_subxact_ddl_abort.pl | 2 | 3 |
diff --git a/src/backend/replication/logical/applyparallelworker.c b/src/backend/replication/logical/applyparallelworker.c
index e2b77d3885..7b8b79bdd9 100644
--- a/src/backend/replication/logical/applyparallelworker.c
+++ b/src/backend/replication/logical/applyparallelworker.c
@@ -264,6 +264,21 @@ pa_can_start(TransactionId xid)
{
Assert(TransactionIdIsValid(xid));
+ /* Only leader apply workers can start parallel apply workers. */
+ if (!am_leader_apply_worker())
+ return false;
+
+ /*
+ * It is good to check for any change in the subscription parameter to
+ * avoid the case where for a very long time the change doesn't get
+ * reflected. This can happen when there is a constant flow of streaming
+ * transactions that are handled by parallel apply workers.
+ *
+ * It is better to do it before the below checks so that the latest values
+ * of subscription can be used for the checks.
+ */
+ maybe_reread_subscription();
+
/*
* Don't start a new parallel apply worker if the subscription is not
* using parallel streaming mode, or if the publisher does not support
@@ -272,10 +287,6 @@ pa_can_start(TransactionId xid)
if (!MyLogicalRepWorker->parallel_apply)
return false;
- /* Only leader apply workers can start parallel apply workers. */
- if (!am_leader_apply_worker())
- return false;
-
/*
* Don't start a new parallel worker if user has set skiplsn as it's
* possible that they want to skip the streaming transaction. For
@@ -485,14 +496,6 @@ pa_allocate_worker(TransactionId xid)
HASH_ELEM | HASH_BLOBS | HASH_CONTEXT);
}
- /*
- * It is good to check for any change in the subscription parameter to
- * avoid the case where for a very long time the change doesn't get
- * reflected. This can happen when there is a constant flow of streaming
- * transactions that are handled by parallel apply workers.
- */
- maybe_reread_subscription();
-
winfo = pa_launch_parallel_worker();
if (!winfo)
return;
diff --git a/src/test/subscription/t/017_stream_ddl.pl b/src/test/subscription/t/017_stream_ddl.pl
index b4101e979d..fb03b708b4 100644
--- a/src/test/subscription/t/017_stream_ddl.pl
+++ b/src/test/subscription/t/017_stream_ddl.pl
@@ -3,9 +3,8 @@
# Test streaming of large transaction with DDL and subtransactions
#
-# This file is mainly to test the DDL/DML interaction of publisher side and
-# doesn't cover some extra code, so we don't add a parallel version for this
-# file.
+# This file is mainly to test the DDL/DML interaction of the publisher side,
+# so we didn't add a parallel apply version for the tests in this file.
use strict;
use warnings;
use PostgreSQL::Test::Cluster;
diff --git a/src/test/subscription/t/019_stream_subxact_ddl_abort.pl b/src/test/subscription/t/019_stream_subxact_ddl_abort.pl
index 905d2516ba..353e826a93 100644
--- a/src/test/subscription/t/019_stream_subxact_ddl_abort.pl
+++ b/src/test/subscription/t/019_stream_subxact_ddl_abort.pl
@@ -4,9 +4,8 @@
# Test streaming of transaction with subtransactions, DDLs, DMLs, and
# rollbacks
#
-# This file is mainly to test the DDL/DML interaction of publisher side and
-# doesn't cover some extra code, so we don't add a parallel version for this
-# file.
+# This file is mainly to test the DDL/DML interaction of the publisher side,
+# so we didn't add a parallel apply version for the tests in this file.
use strict;
use warnings;
use PostgreSQL::Test::Cluster;