Skip to content

Commit

Permalink
Fix #2778: Run CheckInfoReplication even with HeartbeatConsistencyChecks
Browse files Browse the repository at this point in the history
This is an issue identified in ##2778 and #2779 where we're not updating replication topology if heartbeat consistency checks are enabled because we exit the `if` structure early. This still runs that check if it's due in both cases, without changing the behavior of the result processor.
  • Loading branch information
NickCraver committed Sep 3, 2024
1 parent e151cd5 commit 4f3409c
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions src/StackExchange.Redis/PhysicalBridge.cs
Original file line number Diff line number Diff line change
Expand Up @@ -606,8 +606,8 @@ internal void OnHeartbeat(bool ifConnectedOnly)
tmp.BridgeCouldBeNull?.ServerEndPoint?.ClearUnselectable(UnselectableFlags.DidNotRespond);
}
int timedOutThisHeartbeat = tmp.OnBridgeHeartbeat();
int writeEverySeconds = ServerEndPoint.WriteEverySeconds,
checkConfigSeconds = ServerEndPoint.ConfigCheckSeconds;
int writeEverySeconds = ServerEndPoint.WriteEverySeconds;
bool configCheckDue = ServerEndPoint.ConfigCheckSeconds > 0 && ServerEndPoint.LastInfoReplicationCheckSecondsAgo >= ServerEndPoint.ConfigCheckSeconds;

if (state == (int)State.ConnectedEstablished && ConnectionType == ConnectionType.Interactive
&& tmp.BridgeCouldBeNull?.Multiplexer.RawConfig.HeartbeatConsistencyChecks == true)
Expand All @@ -617,9 +617,15 @@ internal void OnHeartbeat(bool ifConnectedOnly)
// If we don't get the expected response to that command, then the connection is terminated.
// This is to prevent the case of things like 100% string command usage where a protocol error isn't otherwise encountered.
KeepAlive(forceRun: true);

// If we're configured to check info replication, perform that too
if (configCheckDue)
{
ServerEndPoint.CheckInfoReplication();
}
}
else if (state == (int)State.ConnectedEstablished && ConnectionType == ConnectionType.Interactive
&& checkConfigSeconds > 0 && ServerEndPoint.LastInfoReplicationCheckSecondsAgo >= checkConfigSeconds
&& configCheckDue
&& ServerEndPoint.CheckInfoReplication())
{
// that serves as a keep-alive, if it is accepted
Expand Down

0 comments on commit 4f3409c

Please sign in to comment.