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