Re: Adding REPACK [concurrently]
Alvaro Herrera <alvherre@alvh.no-ip.org>
Hi, So I've been trying to understand the "Introduce an option to make logical replication database specific." patch and I have to confess I just cannot. As far as I can read, the point is that if we reach SnapBuildProcessRunningXacts() when db_specific is true (which means standby_decode is called in an output plugin that has set need_shared_catalogs to false), _and_ we've not reached consistent state yet, then we'll call LogStandbySnapshot with our DB oid to emit a new xl_running_xacts message. So the WAL-decoding process emits WAL. I don't know if in normal conditions logical decoding processes emit WAL. If this is exceptional, I think we should add a comment. Now, this additional WAL message will be processed by all other processes decoding WAL. Perhaps it will ignored by most of them. But most importantly, it will also reach back to ourselves, at which point we can hopefully use it to see that we might have reached consistent state within our database. Then we know our snapshot is ready to be used. Is this correct? I think the reason it's safe to skip a lot of the processing caused by this additional process, is that xl_running_xacts messages are also emitted in other places in a non-database specific manner. So all the other placecs that are emitting that message continue to exist and cause logical-decoders operate in the same way as before. I think we should sprinkle lots of comments in several places about this. For example, I propose that standby_redo() should have something like * If 'dbid' is valid, only gather transactions running in that database. + * Such records should not be the only ones emitted, because this has + * potentially dangerous side-effects which makes some places ignore them: + * + * 1. SnapBuildProcessRunningXacts will skip computing the xmin and restart + * point from its input record if the record's xmin is older that the + * snapbuilder's current xmin; this should normally be fine because that + * information will be updated from other xl_running_xacts records. + * 2. standby_redo will likewise skip processing such a record * (are there other things that should be mentioned?) Also, LogStandbySnapshot() should have a comment explaining that passing a valid dboid is a weird corner case which is to be used with care, and that functions X Y and Z are going to ignore snapshots carrying a valid dbid. Why do we call SnapBuildFindSnapshot() to do this, instead of doing it directly in SnapBuildProcessRunningXacts? Seems like it would be more straightforward. -- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Allow old WAL recycling during REPACK CONCURRENTLY
- 45b02984e2fa 19 (unreleased) landed
-
Advance restart_lsn more eagerly in LogicalConfirmReceivedLocation
- 38470c2c1ea7 19 (unreleased) landed
-
Remove unnecessary signal handler change
- 5d48d3b14e0e 19 (unreleased) landed
-
Improve REPACK (CONCURRENTLY) error messages some more
- 378dffaf8c80 19 (unreleased) landed
-
Revert "Allow logical replication snapshots to be database-specific"
- 01a80f062146 19 (unreleased) landed
-
Move REPACK (CONCURRENTLY) test out of stock regression tests
- 4b2aa4b39cba 19 (unreleased) landed
-
REPACK: do not require REPLICATION or LOGIN
- 5dbb63fc82b7 19 (unreleased) landed
-
Add missing initialization
- 05c401d5786a 19 (unreleased) landed
-
Simplify declaration of memcpy target
- 2cff363715ef 19 (unreleased) landed
-
Reserve replication slots specifically for REPACK
- e76d8c749c31 19 (unreleased) landed
-
doc: Add an example of REPACK (CONCURRENTLY)
- 8fb95a8ab6e5 19 (unreleased) landed
-
Allow logical replication snapshots to be database-specific
- 0d3dba38c777 19 (unreleased) landed
-
Avoid different-size pointer-to-integer cast
- a3b069ef90bd 19 (unreleased) landed
-
Fix valgrind failure
- 5bcc3fbd196c 19 (unreleased) landed
-
Add CONCURRENTLY option to REPACK
- 28d534e2ae0a 19 (unreleased) landed
-
Rename cluster.c to repack.c (and corresponding .h)
- c0b53ec06309 19 (unreleased) landed
-
Allow index_create to suppress index_build progress reporting
- caec9d9fadf1 19 (unreleased) landed
-
Make index_concurrently_create_copy more general
- 33bf7318f94c 19 (unreleased) landed
-
Document the 'command' column of pg_stat_progress_repack
- a630ac5c2016 19 (unreleased) landed
-
Introduce the REPACK command
- ac58465e0618 19 (unreleased) landed
-
Toggle logical decoding dynamically based on logical slot presence.
- 67c20979ce72 19 (unreleased) cited
-
Split vacuumdb to create vacuuming.c/h
- c4067383cb2c 19 (unreleased) landed
-
Remove ReorderBufferTupleBuf structure.
- 08e6344fd642 17.0 cited
-
Revert changes to CONCURRENTLY that "sped up" Xmin advance
- 042b584c7f7d 14.4 cited
-
VACUUM: ignore indexing operations with CONCURRENTLY
- d9d076222f5b 14.0 cited