File tree 4 files changed +25
-7
lines changed
4 files changed +25
-7
lines changed Original file line number Diff line number Diff line change @@ -16,7 +16,7 @@ sub new
16
16
17
17
my $self = {
18
18
nodes => \@nodes ,
19
- recv_timeout => 3
19
+ recv_timeout => 6
20
20
};
21
21
22
22
bless $self , $class ;
Original file line number Diff line number Diff line change @@ -62,6 +62,7 @@ extern nodemask_t MtmGetDisabledNodeMask(void);
62
62
extern nodemask_t MtmGetConnectedNodeMask (void );
63
63
extern nodemask_t MtmGetEnabledNodeMask (void );
64
64
extern int MtmGetRecoveryCount (void );
65
+ extern int MtmGetNodeDisableCount (int node_id );
65
66
66
67
extern nodemask_t MtmGetDisabledNodeMask (void );
67
68
Original file line number Diff line number Diff line change @@ -564,7 +564,8 @@ pglogical_receiver_main(Datum main_arg)
564
564
*/
565
565
for (;;)
566
566
{
567
- int count ;
567
+ int count ,
568
+ counterpart_disable_count ;
568
569
XLogRecPtr remote_start = InvalidXLogRecPtr ;
569
570
Syncpoint * spvector = NULL ;
570
571
HTAB * filter_map = NULL ;
@@ -586,11 +587,8 @@ pglogical_receiver_main(Datum main_arg)
586
587
Mtm -> peers [nodeId - 1 ].receiver_mode = mode ;
587
588
LWLockRelease (Mtm -> lock );
588
589
589
- // XXX: delete unnecessary modes
590
- Assert (mode == REPLMODE_RECOVERY || mode == REPLMODE_RECOVERED );
591
-
592
- // XXX: avoid that
593
590
count = MtmGetRecoveryCount ();
591
+ counterpart_disable_count = MtmGetNodeDisableCount (nodeId );
594
592
595
593
/* Establish connection to remote server */
596
594
conn = receiver_connect (MtmNodeById (receiver_mtm_cfg , nodeId )-> conninfo );
@@ -715,12 +713,17 @@ pglogical_receiver_main(Datum main_arg)
715
713
proc_exit (1 );
716
714
}
717
715
718
-
719
716
if (count != MtmGetRecoveryCount ()) {
720
717
ereport (LOG , (MTM_ERRMSG ("%s: restart WAL receiver because node was recovered" , worker_proc )));
721
718
goto OnError ;
722
719
}
723
720
721
+ if (counterpart_disable_count != MtmGetNodeDisableCount (nodeId ))
722
+ {
723
+ ereport (LOG , (MTM_ERRMSG ("%s: restart WAL receiver because counterpart was disabled" , worker_proc )));
724
+ goto OnError ;
725
+ }
726
+
724
727
/*
725
728
* Receive data.
726
729
*/
Original file line number Diff line number Diff line change @@ -71,6 +71,7 @@ struct MtmState
71
71
int recovery_slot ;
72
72
73
73
int recovery_count ;
74
+ int node_recovery_count [MTM_MAX_NODES ];
74
75
75
76
LWLock * lock ;
76
77
@@ -449,6 +450,7 @@ MtmDisableNode(int node_id)
449
450
mtm_log (MtmStateMessage , "[STATE] Node %i: disabled" , node_id );
450
451
451
452
BIT_CLEAR (mtm_state -> enabled_mask , node_id - 1 );
453
+ mtm_state -> node_recovery_count [node_id - 1 ] += 1 ;
452
454
453
455
// XXX my_node_id
454
456
if (mtm_state -> status == MTM_ONLINE )
@@ -1077,6 +1079,18 @@ MtmGetRecoveryCount()
1077
1079
return mtm_state -> recovery_count ;
1078
1080
}
1079
1081
1082
+ int
1083
+ MtmGetNodeDisableCount (int node_id )
1084
+ {
1085
+ int count ;
1086
+
1087
+ LWLockAcquire (mtm_state -> lock , LW_SHARED );
1088
+ count = mtm_state -> node_recovery_count [node_id - 1 ];
1089
+ LWLockRelease (mtm_state -> lock );
1090
+
1091
+ return count ;
1092
+ }
1093
+
1080
1094
// XXX: During evaluation of (mtm.node_info(id)).* this function called
1081
1095
// once each columnt for every row. So may be just rewrite to SRF.
1082
1096
Datum
You can’t perform that action at this time.
0 commit comments