// methods private ICluster CreateCluster(ClusterKey clusterKey) { var builder = new ClusterBuilder() .ConfigureCluster(settings => ConfigureCluster(settings, clusterKey)) .ConfigureServer(settings => ConfigureServer(settings, clusterKey)) .ConfigureConnectionPool(settings => ConfigureConnectionPool(settings, clusterKey)) .ConfigureConnection(settings => ConfigureConnection(settings, clusterKey)) .ConfigureTcp(settings => ConfigureTcp(settings, clusterKey)); if (clusterKey.UseSsl) { builder.ConfigureSsl(settings => ConfigureSsl(settings, clusterKey)); } if (clusterKey.ClusterConfigurator != null) { clusterKey.ClusterConfigurator(builder); } var cluster = builder.BuildCluster(); cluster.Initialize(); return(cluster); }
private static bool IsReplicaSet(string uri) { var clusterBuilder = new ClusterBuilder(); clusterBuilder.ConfigureWithConnectionString(uri); using (var cluster = clusterBuilder.BuildCluster()) { cluster.Initialize(); var serverSelector = new ReadPreferenceServerSelector(ReadPreference.PrimaryPreferred); var server = cluster.SelectServer(serverSelector, CancellationToken.None); return(server.Description.Type.IsReplicaSetMember()); } }
public void Run(int numConcurrentWorkers, Action <ClusterBuilder> configurator) { try { var clusterBuilder = new ClusterBuilder(); configurator(clusterBuilder); using (var cluster = clusterBuilder.BuildCluster()) { RunAsync(numConcurrentWorkers, cluster).GetAwaiter().GetResult(); } } catch (Exception ex) { Console.WriteLine("Unhandled exception:"); Console.WriteLine(ex.ToString()); } Console.WriteLine("Press Enter to exit"); Console.ReadLine(); }
public static ICluster CreateCluster(ClusterBuilder builder) { var hasWritableServer = 0; var cluster = builder.BuildCluster(); cluster.DescriptionChanged += (o, e) => { var anyWritableServer = e.NewClusterDescription.Servers.Any( description => description.Type.IsWritable()); if (__traceSource != null) { __traceSource.TraceEvent(TraceEventType.Information, 0, $"CreateCluster: DescriptionChanged event handler called."); __traceSource.TraceEvent(TraceEventType.Information, 0, $"CreateCluster: anyWritableServer = {anyWritableServer}."); __traceSource.TraceEvent(TraceEventType.Information, 0, $"CreateCluster: new description: {e.NewClusterDescription.ToString()}."); } Interlocked.Exchange(ref hasWritableServer, anyWritableServer ? 1 : 0); }; if (__traceSource != null) { __traceSource.TraceEvent(TraceEventType.Information, 0, "CreateCluster: initializing cluster."); } cluster.Initialize(); // wait until the cluster has connected to a writable server SpinWait.SpinUntil(() => Interlocked.CompareExchange(ref hasWritableServer, 0, 0) != 0, TimeSpan.FromSeconds(30)); if (Interlocked.CompareExchange(ref hasWritableServer, 0, 0) == 0) { var message = string.Format( "Test cluster has no writable server. Client view of the cluster is {0}.", cluster.Description.ToString()); throw new Exception(message); } if (__traceSource != null) { __traceSource.TraceEvent(TraceEventType.Information, 0, "CreateCluster: writable server found."); } return(cluster); }