@@ -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
}