Browse Source

Only set SlaveOk to false in CommandCollectionSettings if ConnectionMode is ReplicaSet. GetServerInstance just returns the one and only instance unless ConnectionMode is ReplicaSet.

pull/62/merge
rstam 14 years ago
parent
commit
3108b605a9
  1. 4
      Driver/Core/MongoDatabase.cs
  2. 30
      Driver/Core/MongoServer.cs

4
Driver/Core/MongoDatabase.cs

@ -58,7 +58,9 @@ namespace MongoDB.Driver {
// 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

30
Driver/Core/MongoServer.cs

@ -931,24 +931,28 @@ namespace MongoDB.Driver {
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;
}
}

Loading…
Cancel
Save