Skip to content

Commit

Permalink
Only set SlaveOk to false in CommandCollectionSettings if ConnectionM…
Browse files Browse the repository at this point in the history
…ode is ReplicaSet. GetServerInstance just returns the one and only instance unless ConnectionMode is ReplicaSet.
  • Loading branch information
rstam committed Jun 9, 2011
1 parent 15fb7bb commit 3108b60
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 14 deletions.
4 changes: 3 additions & 1 deletion Driver/Core/MongoDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,9 @@ MongoDatabaseSettings settings
// make sure commands get routed to the primary server by using slaveOk false
var commandCollectionSettings = CreateCollectionSettings<BsonDocument>("$cmd");
commandCollectionSettings.AssignIdOnInsert = false;
commandCollectionSettings.SlaveOk = false;
if (server.Settings.ConnectionMode == ConnectionMode.ReplicaSet) {
commandCollectionSettings.SlaveOk = false;
}
commandCollection = GetCollection(commandCollectionSettings);
}
#endregion
Expand Down
30 changes: 17 additions & 13 deletions Driver/Core/MongoServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -931,24 +931,28 @@ bool slaveOk
Connect();
}

if (slaveOk) {
// round robin the connected secondaries, fall back to primary if no secondary found
lock (instances) {
for (int i = 0; i < instances.Count; i++) {
loadBalancingInstanceIndex = (loadBalancingInstanceIndex + 1) % instances.Count; // round robin
var instance = instances[loadBalancingInstanceIndex];
if (instance.State == MongoServerState.Connected && (instance.IsSecondary || instance.IsPassive)) {
return instance;
if (settings.ConnectionMode == ConnectionMode.ReplicaSet) {
if (slaveOk) {
// round robin the connected secondaries, fall back to primary if no secondary found
lock (instances) {
for (int i = 0; i < instances.Count; i++) {
loadBalancingInstanceIndex = (loadBalancingInstanceIndex + 1) % instances.Count; // round robin
var instance = instances[loadBalancingInstanceIndex];
if (instance.State == MongoServerState.Connected && (instance.IsSecondary || instance.IsPassive)) {
return instance;
}
}
}
}
}

var primary = Primary;
if (primary == null) {
throw new MongoConnectionException("Primary server not found.");
var primary = Primary;
if (primary == null) {
throw new MongoConnectionException("Primary server not found.");
}
return primary;
} else {
return instances.First();
}
return primary;
}
}

Expand Down

0 comments on commit 3108b60

Please sign in to comment.