@@ -1882,12 +1882,23 @@ static void
18821882MtmReplicationStartupHook (struct PGLogicalStartupHookArgs * args )
18831883{
18841884 ListCell * param ;
1885+ bool recoveryCompleted = false;
18851886 MtmIsRecoverySession = false;
18861887 foreach (param , args -> in_params )
18871888 {
18881889 DefElem * elem = lfirst (param );
18891890 if (strcmp ("mtm_replication_mode" , elem -> defname ) == 0 ) {
1890- MtmIsRecoverySession = elem -> arg != NULL && strVal (elem -> arg ) != NULL && strcmp (strVal (elem -> arg ), "recovery" ) == 0 ;
1891+ if (elem -> arg != NULL && strVal (elem -> arg ) != NULL ) {
1892+ if (strcmp (strVal (elem -> arg ), "recovery" ) == 0 ) {
1893+ MtmIsRecoverySession = true;
1894+ } else if (strcmp (strVal (elem -> arg ), "recovered" ) == 0 ) {
1895+ recoveryCompleted = true;
1896+ } else if (strcmp (strVal (elem -> arg ), "normal" ) != 0 ) {
1897+ elog (ERROR , "Illegal recovery mode %s" , strVal (elem -> arg ));
1898+ }
1899+ } else {
1900+ elog (ERROR , "Replication mode is not specified" );
1901+ }
18911902 break ;
18921903 }
18931904 }
@@ -1900,10 +1911,14 @@ MtmReplicationStartupHook(struct PGLogicalStartupHookArgs* args)
19001911 MtmCheckQuorum ();
19011912 }
19021913 } else if (BIT_CHECK (Mtm -> disabledNodeMask , MtmReplicationNodeId - 1 )) {
1903- elog (WARNING , "Node %d consider that recovery of node %d is completed: start normal replication" , MtmNodeId , MtmReplicationNodeId );
1904- BIT_CLEAR (Mtm -> disabledNodeMask , MtmReplicationNodeId - 1 );
1905- Mtm -> nNodes += 1 ;
1906- MtmCheckQuorum ();
1914+ if (recoveryCompleted ) {
1915+ elog (WARNING , "Node %d consider that recovery of node %d is completed: start normal replication" , MtmNodeId , MtmReplicationNodeId );
1916+ BIT_CLEAR (Mtm -> disabledNodeMask , MtmReplicationNodeId - 1 );
1917+ Mtm -> nNodes += 1 ;
1918+ MtmCheckQuorum ();
1919+ } else {
1920+ elog (ERROR , "Disabled node %d tries to reconnect without recovery" , MtmReplicationNodeId );
1921+ }
19071922 } else {
19081923 elog (NOTICE , "Node %d start logical replication to node %d in normal mode" , MtmNodeId , MtmReplicationNodeId );
19091924 }
0 commit comments