@@ -270,6 +270,7 @@ static bool MtmIgnoreTablesWithoutPk;
270270static int MtmLockCount ;
271271static bool MtmMajorNode ;
272272static bool MtmBreakConnection ;
273+ static bool MtmBypass ;
273274static bool MtmClusterLocked ;
274275static bool MtmInsideTransaction ;
275276static bool MtmReferee ;
@@ -960,7 +961,7 @@ MtmBeginTransaction(MtmCurrentTrans* x)
960961 x -> isTwoPhase = false;
961962 x -> isTransactionBlock = IsTransactionBlock ();
962963 /* Application name can be changed using PGAPPNAME environment variable */
963- if (x -> isDistributed && Mtm -> status != MTM_ONLINE && strcmp (application_name , MULTIMASTER_ADMIN ) != 0 ) {
964+ if (x -> isDistributed && Mtm -> status != MTM_ONLINE && strcmp (application_name , MULTIMASTER_ADMIN ) != 0 && ! MtmBypass ) {
964965 /* Reject all user's transactions at offline cluster.
965966 * Allow execution of transaction by bg-workers to make it possible to perform recovery.
966967 */
@@ -979,7 +980,8 @@ MtmBeginTransaction(MtmCurrentTrans* x)
979980 */
980981 if (x -> isDistributed
981982 && !MtmClusterLocked /* do not lock myself */
982- && strcmp (application_name , MULTIMASTER_ADMIN ) != 0 )
983+ && strcmp (application_name , MULTIMASTER_ADMIN ) != 0
984+ && !MtmBypass )
983985 {
984986 MtmCheckClusterLock ();
985987 }
@@ -3214,6 +3216,20 @@ _PG_init(void)
32143216 NULL ,
32153217 NULL
32163218 );
3219+
3220+ DefineCustomBoolVariable (
3221+ "multimaster.bypass" ,
3222+ "Allow access to offline multimaster node" ,
3223+ NULL ,
3224+ & MtmBypass ,
3225+ false,
3226+ PGC_USERSET , /* context */
3227+ 0 ,
3228+ NULL ,
3229+ NULL ,
3230+ NULL
3231+ );
3232+
32173233 DefineCustomBoolVariable (
32183234 "multimaster.major_node" ,
32193235 "Node which forms a majority in case of partitioning in cliques with equal number of nodes" ,
0 commit comments