Re: Perform streaming logical transactions by background workers and parallel apply
Amit Kapila <amit.kapila16@gmail.com>
On Tue, Dec 6, 2022 at 5:27 AM Peter Smith <smithpb2250@gmail.com> wrote: > > Here are my review comments for patch v55-0002 > ... > > 3. pa_spooled_messages > > Previously I suggested this function name should be changed but that > was rejected (see [1] #6a) > > > 6a. > > IMO a better name for this function would be > > pa_apply_spooled_messages(); > Not sure about this. > > ~ > > FYI the reason for the previous suggestion is because there is no verb > in the current function name, so the reader is left thinking > pa_spooled_messages "what"? > > It means the caller has to have extra comments like: > /* Check if changes have been serialized to a file. */ > pa_spooled_messages(); > > OTOH, if the function was called something better -- e.g. > pa_check_for_spooled_messages() or similar -- then it would be > self-explanatory. > I think pa_check_for_spooled_messages() could be misleading because we do apply the changes in that function, so probably a comment as suggested by you is a better option. > ~ > > 4. > > /* > + * Replay the spooled messages in the parallel apply worker if the leader apply > + * worker has finished serializing changes to the file. > + */ > +static void > +pa_spooled_messages(void) > > I'm not 100% sure of the logic, so IMO maybe the comment should say a > bit more about how this works: > > Specifically, let's say there was some timeout and the LA needed to > write the spool file, then let's say the PA timed out and found itself > inside this function. Now, let's say the LA is still busy writing the > file -- so what happens next? > > Does this function simply return, then the main PA loop waits again, > then the times out again, then PA finds itself back inside this > function again... and that keeps happening over and over until > eventually the spool file is found FS_READY? Some explanatory comments > might help. > No, PA will simply wait for LA to finish. See the code handling for FS_BUSY state. We might want to slightly improve part of the current comment to: "If the leader apply worker is busy serializing the partial changes then acquire the stream lock now and wait for the leader worker to finish serializing the changes". > > 16. apply_spooled_messages > > + stream_fd = BufFileOpenFileSet(stream_fileset, path, O_RDONLY, false); > > Something still seems a bit odd about this to me (previously also > mentioned in review [1] #29) but I cannot quite put my finger on it... > > AFAIK the 'stream_fd' is the global the LA is using to remember the > single stream spool file; It corresponds to the LogicalRepWorker's > 'stream_fileset'. So using that same global on the PA side somehow > seemed strange to me. The fileset at PA comes from a different place > (MyParallelShared->fileset). > I think 'stream_fd' is specific to apply module which can be used by apply, tablesync, or parallel worker. Unfortunately, now, the code in worker.c is a mix of worker and apply module. At some point, we should separate apply logic to a separate file. -- With Regards, Amit Kapila.
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix invalid memory access during the shutdown of the parallel apply worker.
- 3d144c6c8602 16.0 landed
-
Fix assertion failure in apply worker.
- de63f8dadee4 16.0 landed
-
Use elog to report unexpected action in handle_streamed_transaction().
- 781ac42d43ab 16.0 landed
-
Use appropriate wait event when sending data in the apply worker.
- d9d7fe68d35e 16.0 landed
-
Allow the logical_replication_mode to be used on the subscriber.
- 9f2213a7c575 16.0 landed
-
Rename GUC logical_decoding_mode to logical_replication_mode.
- 1e8b61735cfb 16.0 landed
-
Display the leader apply worker's PID for parallel apply workers.
- d540a02a724b 16.0 landed
-
Improve the code to decide and process the apply action.
- c981d9145dea 16.0 landed
-
Document the newly added wait events added by commit 216a784829.
- cd06ccd78fcf 16.0 landed
-
Perform apply of large transactions by parallel workers.
- 216a784829c2 16.0 landed
-
Wake up a subscription's replication worker processes after DDL.
- c6e1f62e2cee 16.0 cited
-
Add copyright notices to meson files
- 8284cf5f746f 16.0 cited
-
Better document logical replication parameters
- a8500750ca0a 16.0 cited
-
Add a common function to generate the origin name.
- 776e1c8a5d14 16.0 cited
-
Harmonize parameter names in storage and AM code.
- bfcf1b34805f 16.0 cited
-
Avoid using list_length() to test for empty list.
- efd0c16becbf 16.0 cited
-
Improve two comments related to a boolean DefElem's value
- 8445f5a21d40 16.0 cited
-
Fix partition table's REPLICA IDENTITY checking on the subscriber.
- 26b3455afaa9 15.0 cited
-
Fix data inconsistency between publisher and subscriber.
- b7658c24c7c1 15.0 cited
-
Fix cache look-up failures while applying changes in logical replication.
- 5a97b1325453 15.0 cited