mirror of
https://github.com/postgres/postgres.git
synced 2025-07-26 01:22:12 +03:00
Extend the logical decoding output plugin API with stream methods.
This adds seven methods to the output plugin API, adding support for streaming changes of large in-progress transactions. * stream_start * stream_stop * stream_abort * stream_commit * stream_change * stream_message * stream_truncate Most of this is a simple extension of the existing methods, with the semantic difference that the transaction (or subtransaction) is incomplete and may be aborted later (which is something the regular API does not really need to deal with). This also extends the 'test_decoding' plugin, implementing these new stream methods. The stream_start/start_stop are used to demarcate a chunk of changes streamed for a particular toplevel transaction. This commit simply adds these new APIs and the upcoming patch to "allow the streaming mode in ReorderBuffer" will use these APIs. Author: Tomas Vondra, Dilip Kumar, Amit Kapila Reviewed-by: Amit Kapila Tested-by: Neha Sharma and Mahendra Singh Thalor Discussion: https://postgr.es/m/688b0b7f-2f6c-d827-c27b-216a8e3ea700@2ndquadrant.com
This commit is contained in:
@ -348,6 +348,54 @@ typedef void (*ReorderBufferMessageCB) (ReorderBuffer *rb,
|
||||
const char *prefix, Size sz,
|
||||
const char *message);
|
||||
|
||||
/* start streaming transaction callback signature */
|
||||
typedef void (*ReorderBufferStreamStartCB) (
|
||||
ReorderBuffer *rb,
|
||||
ReorderBufferTXN *txn,
|
||||
XLogRecPtr first_lsn);
|
||||
|
||||
/* stop streaming transaction callback signature */
|
||||
typedef void (*ReorderBufferStreamStopCB) (
|
||||
ReorderBuffer *rb,
|
||||
ReorderBufferTXN *txn,
|
||||
XLogRecPtr last_lsn);
|
||||
|
||||
/* discard streamed transaction callback signature */
|
||||
typedef void (*ReorderBufferStreamAbortCB) (
|
||||
ReorderBuffer *rb,
|
||||
ReorderBufferTXN *txn,
|
||||
XLogRecPtr abort_lsn);
|
||||
|
||||
/* commit streamed transaction callback signature */
|
||||
typedef void (*ReorderBufferStreamCommitCB) (
|
||||
ReorderBuffer *rb,
|
||||
ReorderBufferTXN *txn,
|
||||
XLogRecPtr commit_lsn);
|
||||
|
||||
/* stream change callback signature */
|
||||
typedef void (*ReorderBufferStreamChangeCB) (
|
||||
ReorderBuffer *rb,
|
||||
ReorderBufferTXN *txn,
|
||||
Relation relation,
|
||||
ReorderBufferChange *change);
|
||||
|
||||
/* stream message callback signature */
|
||||
typedef void (*ReorderBufferStreamMessageCB) (
|
||||
ReorderBuffer *rb,
|
||||
ReorderBufferTXN *txn,
|
||||
XLogRecPtr message_lsn,
|
||||
bool transactional,
|
||||
const char *prefix, Size sz,
|
||||
const char *message);
|
||||
|
||||
/* stream truncate callback signature */
|
||||
typedef void (*ReorderBufferStreamTruncateCB) (
|
||||
ReorderBuffer *rb,
|
||||
ReorderBufferTXN *txn,
|
||||
int nrelations,
|
||||
Relation relations[],
|
||||
ReorderBufferChange *change);
|
||||
|
||||
struct ReorderBuffer
|
||||
{
|
||||
/*
|
||||
@ -386,6 +434,17 @@ struct ReorderBuffer
|
||||
ReorderBufferCommitCB commit;
|
||||
ReorderBufferMessageCB message;
|
||||
|
||||
/*
|
||||
* Callbacks to be called when streaming a transaction.
|
||||
*/
|
||||
ReorderBufferStreamStartCB stream_start;
|
||||
ReorderBufferStreamStopCB stream_stop;
|
||||
ReorderBufferStreamAbortCB stream_abort;
|
||||
ReorderBufferStreamCommitCB stream_commit;
|
||||
ReorderBufferStreamChangeCB stream_change;
|
||||
ReorderBufferStreamMessageCB stream_message;
|
||||
ReorderBufferStreamTruncateCB stream_truncate;
|
||||
|
||||
/*
|
||||
* Pointer that will be passed untouched to the callbacks.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user