@@ -272,6 +272,7 @@ static int MtmGcPeriod;
272272static bool MtmIgnoreTablesWithoutPk ;
273273static int MtmLockCount ;
274274static bool MtmBreakConnection ;
275+ static bool MtmBypass ;
275276static bool MtmClusterLocked ;
276277static bool MtmInsideTransaction ;
277278static 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 }
@@ -2875,6 +2877,20 @@ _PG_init(void)
28752877 NULL ,
28762878 NULL
28772879 );
2880+
2881+ DefineCustomBoolVariable (
2882+ "multimaster.bypass" ,
2883+ "Allow access to offline multimaster node" ,
2884+ NULL ,
2885+ & MtmBypass ,
2886+ false,
2887+ PGC_USERSET , /* context */
2888+ 0 ,
2889+ NULL ,
2890+ NULL ,
2891+ NULL
2892+ );
2893+
28782894 DefineCustomBoolVariable (
28792895 "multimaster.major_node" ,
28802896 "Node which forms a majority in case of partitioning in cliques with equal number of nodes" ,
0 commit comments