@@ -1881,12 +1881,23 @@ static void
1881
1881
MtmReplicationStartupHook (struct PGLogicalStartupHookArgs * args )
1882
1882
{
1883
1883
ListCell * param ;
1884
+ bool recoveryCompleted = false;
1884
1885
MtmIsRecoverySession = false;
1885
1886
foreach (param , args -> in_params )
1886
1887
{
1887
1888
DefElem * elem = lfirst (param );
1888
1889
if (strcmp ("mtm_replication_mode" , elem -> defname ) == 0 ) {
1889
- MtmIsRecoverySession = elem -> arg != NULL && strVal (elem -> arg ) != NULL && strcmp (strVal (elem -> arg ), "recovery" ) == 0 ;
1890
+ if (elem -> arg != NULL && strVal (elem -> arg ) != NULL ) {
1891
+ if (strcmp (strVal (elem -> arg ), "recovery" ) == 0 ) {
1892
+ MtmIsRecoverySession = true;
1893
+ } else if (strcmp (strVal (elem -> arg ), "recovered" ) == 0 ) {
1894
+ recoveryCompleted = true;
1895
+ } else if (strcmp (strVal (elem -> arg ), "normal" ) != 0 ) {
1896
+ elog (ERROR , "Illegal recovery mode %s" , strVal (elem -> arg ));
1897
+ }
1898
+ } else {
1899
+ elog (ERROR , "Replication mode is not specified" );
1900
+ }
1890
1901
break ;
1891
1902
}
1892
1903
}
@@ -1899,10 +1910,14 @@ MtmReplicationStartupHook(struct PGLogicalStartupHookArgs* args)
1899
1910
MtmCheckQuorum ();
1900
1911
}
1901
1912
} else if (BIT_CHECK (Mtm -> disabledNodeMask , MtmReplicationNodeId - 1 )) {
1902
- elog (WARNING , "Node %d consider that recovery of node %d is completed: start normal replication" , MtmNodeId , MtmReplicationNodeId );
1903
- BIT_CLEAR (Mtm -> disabledNodeMask , MtmReplicationNodeId - 1 );
1904
- Mtm -> nNodes += 1 ;
1905
- MtmCheckQuorum ();
1913
+ if (recoveryCompleted ) {
1914
+ elog (WARNING , "Node %d consider that recovery of node %d is completed: start normal replication" , MtmNodeId , MtmReplicationNodeId );
1915
+ BIT_CLEAR (Mtm -> disabledNodeMask , MtmReplicationNodeId - 1 );
1916
+ Mtm -> nNodes += 1 ;
1917
+ MtmCheckQuorum ();
1918
+ } else {
1919
+ elog (ERROR , "Disabled node %d tries to reconnect without recovery" , MtmReplicationNodeId );
1920
+ }
1906
1921
} else {
1907
1922
elog (NOTICE , "Node %d start logical replication to node %d in normal mode" , MtmNodeId , MtmReplicationNodeId );
1908
1923
}
0 commit comments