changes_amit_v54_0002.patch
application/octet-stream
Filename: changes_amit_v54_0002.patch
Type: application/octet-stream
Part: 1
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 v54
| File | + | − |
|---|---|---|
| src/backend/replication/logical/applyparallelworker.c | 10 | 9 |
| src/backend/replication/logical/worker.c | 6 | 5 |
diff --git a/src/backend/replication/logical/applyparallelworker.c b/src/backend/replication/logical/applyparallelworker.c
index 7eed82ff41..9e35b2ecbe 100644
--- a/src/backend/replication/logical/applyparallelworker.c
+++ b/src/backend/replication/logical/applyparallelworker.c
@@ -136,11 +136,11 @@
* concurrently), if the shm_mq buffer between LA and PA-2 is full, LA has to
* wait to send messages, and this wait doesn't appear in lmgr.
*
- * To resolve this issue, we use non-blocking write and wait with a timeout. If
+ * To avoid this wait, we use a non-blocking write and wait with a timeout. If
* the timeout is exceeded, the LA will serialize the message to a file and
* indicate PA-2 that it needs to read that file for the remaining messages.
* Then LA will start waiting for commit which will detect deadlock if any.
- * (See pa_send_data() and enum TransApplyAction)
+ * See pa_send_data() and enum TransApplyAction.
*
* 4) Lock types
*
@@ -691,10 +691,11 @@ pa_spooled_messages(void)
SpinLockRelease(&MyParallelShared->mutex);
/*
- * If the leader apply worker is still (busy) serializing partial changes
- * then the parallel apply worker acquires the stream lock now. Otherwise,
- * it would not have a chance to receive a STREAM_STOP (and acquire the
- * stream lock) until the leader had serialized all changes.
+ * If the leader apply worker is busy serializing the partial changes then
+ * acquire the stream lock now. Otherwise, the parallel apply worker won't
+ * get a chance to receive a STREAM_STOP (and acquire the stream lock)
+ * until the leader had serialized all changes which can lead to undetected
+ * deadlock.
*/
if (fileset_state == FS_BUSY)
{
@@ -1535,9 +1536,9 @@ pa_stream_abort(LogicalRepStreamAbortData *abort_data)
}
/*
- * Set the fileset state for the given parallel apply worker. The
- * stream_fileset of the leader apply worker will be written into the shared
- * memory if the fileset_state is FS_READY.
+ * Set the fileset state for the given parallel apply worker. The fileset
+ * will be set once the leader worker reached the ready state so that it can
+ * be used by parallel apply worker.
*/
void
pa_set_fileset_state(ParallelApplyWorkerShared *wshared,
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index b8587dbe5c..606e4c6fb4 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -256,15 +256,16 @@ typedef struct ApplyErrorCallbackArg
*
* TRANS_LEADER_PARTIAL_SERIALIZE:
* The action means that we are in the leader apply worker and have sent some
- * changes directly to the parallel apply worker, due to timeout while sending
- * data the remaining changes need to be serialized to a file. The parallel apply
- * worker will apply these serialized changes when the final commit arrives.
+ * changes directly to the parallel apply worker and the remaining
+ * changes are serialized to a file, due to timeout while sending data. The
+ * parallel apply worker will apply these serialized changes when the final
+ * commit arrives.
*
- * LEADER_SERIALIZE could not be used for this case because, in addition to
+ * We can't use TRANS_LEADER_SERIALIZE for this case because, in addition to
* serializing changes, the leader worker also needs to serialize the STREAM_XXX
* message to a file, and wait for the parallel apply worker to finish the
* transaction when processing the transaction finish command. So this new
- * action was introduced to make the logic clearer.
+ * action was introduced to keep the code and logic clear.
*
* TRANS_LEADER_SEND_TO_PARALLEL:
* The action means that we are in the leader apply worker and need to send the