Skip to content
  • Amit Kapila's avatar
    Extend the output plugin API to allow decoding of prepared xacts. · 0aa8a01d
    Amit Kapila authored
    This adds six methods to the output plugin API, adding support for
    streaming changes of two-phase transactions at prepare time.
    
    * begin_prepare
    * filter_prepare
    * prepare
    * commit_prepared
    * rollback_prepared
    * stream_prepare
    
    Most of this is a simple extension of the existing methods, with the
    semantic difference that the transaction is not yet committed and maybe
    aborted later.
    
    Until now two-phase transactions were translated into regular transactions
    on the subscriber, and the GID was not forwarded to it. None of the
    two-phase commands were communicated to the subscriber.
    
    This patch provides the infrastructure for logical decoding plugins to be
    informed of two-phase commands Like PREPARE TRANSACTION, COMMIT PREPARED
    and ROLLBACK PREPARED commands with the corresponding GID.
    
    This also extends the 'test_decoding' plugin, implementing these new
    methods.
    
    This commit simply adds these new APIs and the upcoming patch to "allow
    the decoding at prepare time in ReorderBuffer" will use these APIs.
    
    Author: Ajin Cherian and Amit Kapila based on previous work by Nikhil Sontakke and Stas Kelvich
    Reviewed-by: Amit Kapila, Peter Smith, Sawada Masahiko, and Dilip Kumar
    Discussion:
    https://postgr.es/m/02DA5F5E-CECE-4D9C-8B4B-418077E2C010@postgrespro.ru
    https://postgr.es/m/CAMGcDxeqEpWj3fTXwqhSwBdXd2RS9jzwWscO-XbeCfso6ts3+Q@mail.gmail.com
    0aa8a01d