Skip to content

Commit b5a8b3d

Browse files
author
Sridhar Nanjundeswaran
committed
CSHARP-724. Unset primary flag when instance disconnects or a new primary is elected
1 parent fd4bdff commit b5a8b3d

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

MongoDB.Driver/Communication/MongoServerInstance.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,29 @@ internal void SetState(MongoServerState state)
530530
OnStateChanged();
531531
}
532532

533+
/// <summary>
534+
/// Unset the primary flag on this instance but retain all other information
535+
/// </summary>
536+
internal void UnsetPrimary()
537+
{
538+
lock (_serverInstanceLock)
539+
{
540+
_serverInfo.IsPrimary = false;
541+
}
542+
}
543+
544+
/// <summary>
545+
/// Unset the primary flag on this instance but retain all other information
546+
/// </summary>
547+
internal void UnsetPrimarySecondary()
548+
{
549+
lock (_serverInstanceLock)
550+
{
551+
_serverInfo.IsPrimary = false;
552+
_serverInfo.IsSecondary = false;
553+
}
554+
}
555+
533556
// private methods
534557
private void LookupServerInformation(MongoConnection connection)
535558
{
@@ -659,6 +682,7 @@ private void Ping(MongoConnection connection)
659682
catch
660683
{
661684
_pingTimeAggregator.Clear();
685+
UnsetPrimarySecondary();
662686
SetState(MongoServerState.Disconnected);
663687
throw;
664688
}

MongoDB.Driver/Communication/Proxies/ReplicaSetMongoServerProxy.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,14 @@ private void ProcessConnectedPrimaryStateChange(MongoServerInstance instance)
254254
// remove instances the primary doesn't know about and add instances we don't know about
255255
MakeInstancesMatchAddresses(members);
256256
}
257+
var instancesMarkedPrimary = Instances.Where(x => x.IsPrimary);
258+
foreach (var otherInstance in instancesMarkedPrimary)
259+
{
260+
if (!otherInstance.Address.Equals(instance.Address))
261+
{
262+
otherInstance.UnsetPrimary();
263+
}
264+
}
257265
}
258266

259267
private void ProcessConnectedSecondaryStateChange(MongoServerInstance instance)

0 commit comments

Comments
 (0)