Skip to content

Commit 98c91ab

Browse files
committed
Fix race condition in CreateCluster.
1 parent b9e5320 commit 98c91ab

File tree

2 files changed

+27
-10
lines changed

2 files changed

+27
-10
lines changed

src/MongoDB.Driver.Core.TestHelpers/CoreTestConfiguration.cs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public static class CoreTestConfiguration
4444
private static ConnectionString __connectionString = GetConnectionString();
4545
private static DatabaseNamespace __databaseNamespace = GetDatabaseNamespace();
4646
private static MessageEncoderSettings __messageEncoderSettings = new MessageEncoderSettings();
47+
private static TraceSource __traceSource;
4748

4849
// static properties
4950
public static ICluster Cluster
@@ -75,6 +76,11 @@ public static SemanticVersion ServerVersion
7576
}
7677
}
7778

79+
public static TraceSource TraceSource
80+
{
81+
get { return __traceSource; }
82+
}
83+
7884
// static methods
7985
public static ClusterBuilder ConfigureCluster()
8086
{
@@ -133,12 +139,12 @@ public static ClusterBuilder ConfigureLogging(ClusterBuilder builder)
133139
return builder;
134140
}
135141

136-
var traceSource = new TraceSource("mongodb-tests", defaultLevel);
137-
traceSource.Listeners.Clear(); // remove the default listener
142+
__traceSource = new TraceSource("mongodb-tests", defaultLevel);
143+
__traceSource.Listeners.Clear(); // remove the default listener
138144
var listener = new ConsoleTraceListener();
139145
listener.TraceOutputOptions = TraceOptions.DateTime;
140-
traceSource.Listeners.Add(listener);
141-
return builder.TraceWith(traceSource);
146+
__traceSource.Listeners.Add(listener);
147+
return builder.TraceWith(__traceSource);
142148
}
143149

144150
public static ICluster CreateCluster()
@@ -150,8 +156,18 @@ public static ICluster CreateCluster()
150156
{
151157
var anyWritableServer = e.NewClusterDescription.Servers.Any(
152158
description => description.Type.IsWritable());
159+
if (__traceSource != null)
160+
{
161+
__traceSource.TraceEvent(TraceEventType.Information, 0, $"CreateCluster: DescriptionChanged event handler called.");
162+
__traceSource.TraceEvent(TraceEventType.Information, 0, $"CreateCluster: anyWritableServer = {anyWritableServer}.");
163+
__traceSource.TraceEvent(TraceEventType.Information, 0, $"CreateCluster: new description: {e.NewClusterDescription.ToString()}.");
164+
}
153165
Interlocked.Exchange(ref hasWritableServer, anyWritableServer ? 1 : 0);
154166
};
167+
if (__traceSource != null)
168+
{
169+
__traceSource.TraceEvent(TraceEventType.Information, 0, "CreateCluster: initializing cluster.");
170+
}
155171
cluster.Initialize();
156172

157173
// wait until the cluster has connected to a writable server
@@ -164,6 +180,11 @@ public static ICluster CreateCluster()
164180
throw new Exception(message);
165181
}
166182

183+
if (__traceSource != null)
184+
{
185+
__traceSource.TraceEvent(TraceEventType.Information, 0, "CreateCluster: writable server found.");
186+
}
187+
167188
return cluster;
168189
}
169190

src/MongoDB.Driver.Core/Core/Clusters/ClusterFactory.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,12 @@ public ICluster CreateCluster()
6767

6868
private MultiServerCluster CreateMultiServerCluster(ClusterSettings settings)
6969
{
70-
var shardedCluster = new MultiServerCluster(settings, _serverFactory, _eventSubscriber);
71-
shardedCluster.Initialize();
72-
return shardedCluster;
70+
return new MultiServerCluster(settings, _serverFactory, _eventSubscriber);
7371
}
7472

7573
private SingleServerCluster CreateSingleServerCluster(ClusterSettings settings)
7674
{
77-
var standaloneCluster = new SingleServerCluster(settings, _serverFactory, _eventSubscriber);
78-
standaloneCluster.Initialize();
79-
return standaloneCluster;
75+
return new SingleServerCluster(settings, _serverFactory, _eventSubscriber);
8076
}
8177
}
8278
}

0 commit comments

Comments
 (0)