@@ -1882,12 +1882,23 @@ static void
1882
1882
MtmReplicationStartupHook (struct PGLogicalStartupHookArgs * args )
1883
1883
{
1884
1884
ListCell * param ;
1885
+ bool recoveryCompleted = false;
1885
1886
MtmIsRecoverySession = false;
1886
1887
foreach (param , args -> in_params )
1887
1888
{
1888
1889
DefElem * elem = lfirst (param );
1889
1890
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
+ }
1891
1902
break ;
1892
1903
}
1893
1904
}
@@ -1900,10 +1911,14 @@ MtmReplicationStartupHook(struct PGLogicalStartupHookArgs* args)
1900
1911
MtmCheckQuorum ();
1901
1912
}
1902
1913
} 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
+ }
1907
1922
} else {
1908
1923
elog (NOTICE , "Node %d start logical replication to node %d in normal mode" , MtmNodeId , MtmReplicationNodeId );
1909
1924
}
0 commit comments