/// <summary> /// Configures a cluster builder from a connection string. /// </summary> /// <param name="builder">The cluster builder.</param> /// <param name="connectionString">The connection string.</param> /// <returns>A reconfigured cluster builder.</returns> public static ClusterBuilder ConfigureWithConnectionString(this ClusterBuilder builder, ConnectionString connectionString) { Ensure.IsNotNull(builder, nameof(builder)); Ensure.IsNotNull(connectionString, nameof(connectionString)); connectionString = connectionString.Resolve(); // TCP if (connectionString.ConnectTimeout != null) { builder = builder.ConfigureTcp(s => s.With(connectTimeout: connectionString.ConnectTimeout.Value)); } if (connectionString.HeartbeatInterval.HasValue) { builder = builder.ConfigureServer(s => s.With(heartbeatInterval: connectionString.HeartbeatInterval.Value)); } if (connectionString.HeartbeatTimeout.HasValue) { builder = builder.ConfigureServer(s => s.With(heartbeatTimeout: connectionString.HeartbeatTimeout.Value)); } if (connectionString.Ipv6.HasValue && connectionString.Ipv6.Value) { builder = builder.ConfigureTcp(s => s.With(addressFamily: AddressFamily.InterNetworkV6)); } if (connectionString.SocketTimeout != null) { builder = builder.ConfigureTcp(s => s.With( readTimeout: connectionString.SocketTimeout.Value, writeTimeout: connectionString.SocketTimeout.Value)); } if (connectionString.Ssl != null) { builder = builder.ConfigureSsl(ssl => { if (!connectionString.SslVerifyCertificate.GetValueOrDefault(true)) { ssl = ssl.With( serverCertificateValidationCallback: new RemoteCertificateValidationCallback(AcceptAnySslCertificate)); } return(ssl); }); } // Connection if (connectionString.Username != null) { var authenticator = CreateAuthenticator(connectionString); builder = builder.ConfigureConnection(s => s.With(authenticators: new[] { authenticator })); } if (connectionString.ApplicationName != null) { builder = builder.ConfigureConnection(s => s.With(applicationName: connectionString.ApplicationName)); } if (connectionString.MaxIdleTime != null) { builder = builder.ConfigureConnection(s => s.With(maxIdleTime: connectionString.MaxIdleTime.Value)); } if (connectionString.MaxLifeTime != null) { builder = builder.ConfigureConnection(s => s.With(maxLifeTime: connectionString.MaxLifeTime.Value)); } // Connection Pool if (connectionString.MaxPoolSize != null) { builder = builder.ConfigureConnectionPool(s => s.With(maxConnections: connectionString.MaxPoolSize.Value)); } if (connectionString.MinPoolSize != null) { builder = builder.ConfigureConnectionPool(s => s.With(minConnections: connectionString.MinPoolSize.Value)); } if (connectionString.WaitQueueSize != null) { builder = builder.ConfigureConnectionPool(s => s.With(waitQueueSize: connectionString.WaitQueueSize.Value)); } else if (connectionString.WaitQueueMultiple != null) { var maxConnections = connectionString.MaxPoolSize ?? new ConnectionPoolSettings().MaxConnections; var waitQueueSize = (int)Math.Round(maxConnections * connectionString.WaitQueueMultiple.Value); builder = builder.ConfigureConnectionPool(s => s.With(waitQueueSize: waitQueueSize)); } if (connectionString.WaitQueueTimeout != null) { builder = builder.ConfigureConnectionPool(s => s.With(waitQueueTimeout: connectionString.WaitQueueTimeout.Value)); } // Server // Cluster builder = builder.ConfigureCluster(s => s.With(connectionMode: connectionString.Connect)); if (connectionString.Hosts.Count > 0) { builder = builder.ConfigureCluster(s => s.With(endPoints: Optional.Enumerable(connectionString.Hosts))); } if (connectionString.ReplicaSet != null) { builder = builder.ConfigureCluster(s => s.With( connectionMode: ClusterConnectionMode.ReplicaSet, replicaSetName: connectionString.ReplicaSet)); } if (connectionString.ServerSelectionTimeout != null) { builder = builder.ConfigureCluster(s => s.With(serverSelectionTimeout: connectionString.ServerSelectionTimeout.Value)); } return(builder); }
public static ClusterBuilder ConfigureWithConnectionString(this ClusterBuilder configuration, ConnectionString connectionString) { Ensure.IsNotNull(configuration, "configuration"); Ensure.IsNotNull(connectionString, "connectionString"); // TCP if (connectionString.ConnectTimeout != null) { // TODO: nowhere to set this } if (connectionString.Ipv6.HasValue && connectionString.Ipv6.Value) { configuration.ConfigureTcp(s => s.WithAddressFamily(AddressFamily.InterNetworkV6)); } if (connectionString.SocketTimeout != null) { configuration.ConfigureTcp(s => s .WithReadTimeout(connectionString.SocketTimeout.Value) .WithWriteTimeout(connectionString.SocketTimeout.Value)); } if (connectionString.Ssl != null) { // TODO: nowhere to set this } // Connection if (connectionString.Username != null) { // TODO: nowhere to set this... } if (connectionString.MaxIdleTime != null) { configuration.ConfigureConnection(s => s.WithMaxIdleTime(connectionString.MaxIdleTime.Value)); } if (connectionString.MaxLifeTime != null) { configuration.ConfigureConnection(s => s.WithMaxLifeTime(connectionString.MaxLifeTime.Value)); } // Connection Pool if (connectionString.MaxPoolSize != null) { configuration.ConfigureConnectionPool(s => s.WithMaxConnections(connectionString.MaxPoolSize.Value)); } if (connectionString.MinPoolSize != null) { configuration.ConfigureConnectionPool(s => s.WithMinConnections(connectionString.MinPoolSize.Value)); } if (connectionString.WaitQueueMultiple != null) { var maxConnections = connectionString.MaxPoolSize ?? new ConnectionPoolSettings().MaxConnections; var waitQueueSize = maxConnections * connectionString.WaitQueueMultiple.Value; configuration.ConfigureConnectionPool(s => s.WithWaitQueueSize(waitQueueSize)); } if (connectionString.WaitQueueTimeout != null) { configuration.ConfigureConnectionPool(s => s.WithWaitQueueTimeout(connectionString.WaitQueueTimeout.Value)); } // Server // Cluster if (connectionString.Hosts.Count > 0) { configuration.ConfigureCluster(s => s.WithEndPoints(connectionString.Hosts)); } if (connectionString.ReplicaSet != null) { configuration.ConfigureCluster(s => s .WithReplicaSetName(connectionString.ReplicaSet)); } return(configuration); }
/// <summary> /// Configures a cluster builder from a connection string. /// </summary> /// <param name="builder">The cluster builder.</param> /// <param name="connectionString">The connection string.</param> /// <returns>A reconfigured cluster builder.</returns> public static ClusterBuilder ConfigureWithConnectionString(this ClusterBuilder builder, ConnectionString connectionString) { Ensure.IsNotNull(builder, nameof(builder)); Ensure.IsNotNull(connectionString, nameof(connectionString)); if (!connectionString.IsResolved) { var connectionMode = connectionString.Connect; var resolveHosts = connectionMode == ClusterConnectionMode.Direct || connectionMode == ClusterConnectionMode.Standalone; connectionString = connectionString.Resolve(resolveHosts); } // TCP if (connectionString.ConnectTimeout != null) { builder = builder.ConfigureTcp(s => s.With(connectTimeout: connectionString.ConnectTimeout.Value)); } if (connectionString.HeartbeatInterval.HasValue) { builder = builder.ConfigureServer(s => s.With(heartbeatInterval: connectionString.HeartbeatInterval.Value)); } if (connectionString.HeartbeatTimeout.HasValue) { builder = builder.ConfigureServer(s => s.With(heartbeatTimeout: connectionString.HeartbeatTimeout.Value)); } if (connectionString.Ipv6.HasValue && connectionString.Ipv6.Value) { builder = builder.ConfigureTcp(s => s.With(addressFamily: AddressFamily.InterNetworkV6)); } if (connectionString.SocketTimeout != null) { builder = builder.ConfigureTcp(s => s.With( readTimeout: connectionString.SocketTimeout.Value, writeTimeout: connectionString.SocketTimeout.Value)); } if (connectionString.Tls != null) { builder = builder.ConfigureSsl(ssl => { if (connectionString.TlsInsecure.GetValueOrDefault(false)) { ssl = ssl.With(serverCertificateValidationCallback: new RemoteCertificateValidationCallback(AcceptAnySslCertificate)); } if (connectionString.TlsDisableCertificateRevocationCheck.HasValue) { ssl = ssl.With( checkCertificateRevocation: !connectionString.TlsDisableCertificateRevocationCheck.Value); } return(ssl); }); } // Connection if (connectionString.Username != null) { var authenticatorFactory = new AuthenticatorFactory(() => CreateAuthenticator(connectionString)); builder = builder.ConfigureConnection(s => s.With(authenticatorFactories: new[] { authenticatorFactory })); } if (connectionString.ApplicationName != null) { builder = builder.ConfigureConnection(s => s.With(applicationName: connectionString.ApplicationName)); } if (connectionString.MaxIdleTime != null) { builder = builder.ConfigureConnection(s => s.With(maxIdleTime: connectionString.MaxIdleTime.Value)); } if (connectionString.MaxLifeTime != null) { builder = builder.ConfigureConnection(s => s.With(maxLifeTime: connectionString.MaxLifeTime.Value)); } if (connectionString.Compressors != null) { builder = builder.ConfigureConnection(s => s.With(compressors: connectionString.Compressors.ToArray())); } // Connection Pool if (connectionString.MaxPoolSize != null) { builder = builder.ConfigureConnectionPool(s => s.With(maxConnections: connectionString.MaxPoolSize.Value)); } if (connectionString.MinPoolSize != null) { builder = builder.ConfigureConnectionPool(s => s.With(minConnections: connectionString.MinPoolSize.Value)); } #pragma warning disable 618 if (connectionString.WaitQueueSize != null) { builder = builder.ConfigureConnectionPool(s => s.With(waitQueueSize: connectionString.WaitQueueSize.Value)); } else if (connectionString.WaitQueueMultiple != null) { var maxConnections = connectionString.MaxPoolSize ?? new ConnectionPoolSettings().MaxConnections; var waitQueueSize = (int)Math.Round(maxConnections * connectionString.WaitQueueMultiple.Value); builder = builder.ConfigureConnectionPool(s => s.With(waitQueueSize: waitQueueSize)); } #pragma warning restore 618 if (connectionString.WaitQueueTimeout != null) { builder = builder.ConfigureConnectionPool(s => s.With(waitQueueTimeout: connectionString.WaitQueueTimeout.Value)); } // Server // Cluster builder = builder.ConfigureCluster(s => s.With(connectionMode: connectionString.Connect)); if (connectionString.Hosts.Count > 0) { builder = builder.ConfigureCluster(s => s.With(endPoints: Optional.Enumerable(connectionString.Hosts))); } if (connectionString.ReplicaSet != null) { builder = builder.ConfigureCluster(s => s.With( connectionMode: ClusterConnectionMode.ReplicaSet, replicaSetName: connectionString.ReplicaSet)); } if (connectionString.ServerSelectionTimeout != null) { builder = builder.ConfigureCluster(s => s.With(serverSelectionTimeout: connectionString.ServerSelectionTimeout.Value)); } return(builder); }
public static ClusterBuilder ConfigureWithConnectionString(this ClusterBuilder configuration, ConnectionString connectionString) { Ensure.IsNotNull(configuration, "configuration"); Ensure.IsNotNull(connectionString, "connectionString"); // TCP if (connectionString.ConnectTimeout != null) { configuration.ConfigureTcp(s => s.With(connectTimeout: connectionString.ConnectTimeout.Value)); } if (connectionString.Ipv6.HasValue && connectionString.Ipv6.Value) { configuration.ConfigureTcp(s => s.With(addressFamily: AddressFamily.InterNetworkV6)); } if (connectionString.SocketTimeout != null) { configuration.ConfigureTcp(s => s.With( readTimeout: connectionString.SocketTimeout.Value, writeTimeout: connectionString.SocketTimeout.Value)); } if (connectionString.Ssl != null) { configuration.ConfigureSsl(ssl => { if (connectionString.SslVerifyCertificate.GetValueOrDefault(true)) { ssl = ssl.With( serverCertificateValidationCallback: new RemoteCertificateValidationCallback((obj, cert, chain, errors) => true)); } return(ssl); }); } // Connection if (connectionString.Username != null) { var authenticator = CreateAuthenticator(connectionString); configuration.ConfigureConnection(s => s.With(authenticators: new[] { authenticator })); } if (connectionString.MaxIdleTime != null) { configuration.ConfigureConnection(s => s.With(maxIdleTime: connectionString.MaxIdleTime.Value)); } if (connectionString.MaxLifeTime != null) { configuration.ConfigureConnection(s => s.With(maxLifeTime: connectionString.MaxLifeTime.Value)); } // Connection Pool if (connectionString.MaxPoolSize != null) { configuration.ConfigureConnectionPool(s => s.With(maxConnections: connectionString.MaxPoolSize.Value)); } if (connectionString.MinPoolSize != null) { configuration.ConfigureConnectionPool(s => s.With(minConnections: connectionString.MinPoolSize.Value)); } if (connectionString.WaitQueueSize != null) { configuration.ConfigureConnectionPool(s => s.With(waitQueueSize: connectionString.WaitQueueSize.Value)); } else if (connectionString.WaitQueueMultiple != null) { var maxConnections = connectionString.MaxPoolSize ?? new ConnectionPoolSettings().MaxConnections; var waitQueueSize = (int)Math.Round(maxConnections * connectionString.WaitQueueMultiple.Value); configuration.ConfigureConnectionPool(s => s.With(waitQueueSize: waitQueueSize)); } if (connectionString.WaitQueueTimeout != null) { configuration.ConfigureConnectionPool(s => s.With(waitQueueTimeout: connectionString.WaitQueueTimeout.Value)); } // Server // Cluster if (connectionString.Hosts.Count > 0) { configuration.ConfigureCluster(s => s.With(endPoints: Optional.Create <IEnumerable <EndPoint> >(connectionString.Hosts))); } if (connectionString.ReplicaSet != null) { configuration.ConfigureCluster(s => s.With( replicaSetName: connectionString.ReplicaSet)); } return(configuration); }
/// <summary> /// Configures a cluster builder from a connection string. /// </summary> /// <param name="builder">The cluster builder.</param> /// <param name="connectionString">The connection string.</param> /// <param name="serverApi">The server API.</param> /// <returns>A reconfigured cluster builder.</returns> public static ClusterBuilder ConfigureWithConnectionString( this ClusterBuilder builder, ConnectionString connectionString, ServerApi serverApi) { Ensure.IsNotNull(builder, nameof(builder)); Ensure.IsNotNull(connectionString, nameof(connectionString)); if (!connectionString.IsResolved) { bool resolveHosts; #pragma warning disable CS0618 // Type or member is obsolete if (connectionString.ConnectionModeSwitch == ConnectionModeSwitch.UseDirectConnection) #pragma warning restore CS0618 // Type or member is obsolete { resolveHosts = connectionString.DirectConnection.GetValueOrDefault(); } else { #pragma warning disable CS0618 // Type or member is obsolete resolveHosts = connectionString.Connect == ClusterConnectionMode.Direct || connectionString.Connect == ClusterConnectionMode.Standalone; #pragma warning restore CS0618 // Type or member is obsolete } connectionString = connectionString.Resolve(resolveHosts); } // TCP if (connectionString.ConnectTimeout != null) { builder = builder.ConfigureTcp(s => s.With(connectTimeout: connectionString.ConnectTimeout.Value)); } if (connectionString.HeartbeatInterval.HasValue) { builder = builder.ConfigureServer(s => s.With(heartbeatInterval: connectionString.HeartbeatInterval.Value)); } if (connectionString.HeartbeatTimeout.HasValue) { builder = builder.ConfigureServer(s => s.With(heartbeatTimeout: connectionString.HeartbeatTimeout.Value)); } if (connectionString.Ipv6.HasValue && connectionString.Ipv6.Value) { builder = builder.ConfigureTcp(s => s.With(addressFamily: AddressFamily.InterNetworkV6)); } if (connectionString.SocketTimeout != null) { builder = builder.ConfigureTcp(s => s.With( readTimeout: connectionString.SocketTimeout.Value, writeTimeout: connectionString.SocketTimeout.Value)); } if (connectionString.Tls != null) { builder = builder.ConfigureSsl(ssl => { if (connectionString.TlsInsecure.GetValueOrDefault(false)) { ssl = ssl.With(serverCertificateValidationCallback: new RemoteCertificateValidationCallback(AcceptAnySslCertificate)); } if (connectionString.TlsDisableCertificateRevocationCheck.HasValue) { ssl = ssl.With( checkCertificateRevocation: !connectionString.TlsDisableCertificateRevocationCheck.Value); } return(ssl); }); } // Connection if (connectionString.Username != null) { var authenticatorFactory = new AuthenticatorFactory(() => CreateAuthenticator(connectionString, serverApi)); builder = builder.ConfigureConnection(s => s.With(authenticatorFactories: new[] { authenticatorFactory })); } if (connectionString.ApplicationName != null) { builder = builder.ConfigureConnection(s => s.With(applicationName: connectionString.ApplicationName)); } if (connectionString.LoadBalanced) { builder = builder.ConfigureConnection(s => s.With(loadBalanced: connectionString.LoadBalanced)); } if (connectionString.MaxIdleTime != null) { builder = builder.ConfigureConnection(s => s.With(maxIdleTime: connectionString.MaxIdleTime.Value)); } if (connectionString.MaxLifeTime != null) { builder = builder.ConfigureConnection(s => s.With(maxLifeTime: connectionString.MaxLifeTime.Value)); } if (connectionString.Compressors != null) { builder = builder.ConfigureConnection(s => s.With(compressors: connectionString.Compressors.ToArray())); } // Connection Pool if (connectionString.MaxPoolSize != null) { var effectiveMaxConnections = ConnectionStringConversions.GetEffectiveMaxConnections(connectionString.MaxPoolSize.Value); builder = builder.ConfigureConnectionPool(s => s.With(maxConnections: effectiveMaxConnections)); } if (connectionString.MinPoolSize != null) { builder = builder.ConfigureConnectionPool(s => s.With(minConnections: connectionString.MinPoolSize.Value)); } #pragma warning disable 618 if (connectionString.WaitQueueSize != null) { builder = builder.ConfigureConnectionPool(s => s.With(waitQueueSize: connectionString.WaitQueueSize.Value)); } else if (connectionString.WaitQueueMultiple != null) { var effectiveMaxConnections = ConnectionStringConversions.GetEffectiveMaxConnections(connectionString.MaxPoolSize) ?? new ConnectionPoolSettings().MaxConnections; var computedWaitQueueSize = ConnectionStringConversions.GetComputedWaitQueueSize(effectiveMaxConnections, connectionString.WaitQueueMultiple.Value); builder = builder.ConfigureConnectionPool(s => s.With(waitQueueSize: computedWaitQueueSize)); } #pragma warning restore 618 if (connectionString.WaitQueueTimeout != null) { builder = builder.ConfigureConnectionPool(s => s.With(waitQueueTimeout: connectionString.WaitQueueTimeout.Value)); } // Server // Cluster #pragma warning disable CS0618 // Type or member is obsolete var connectionModeSwitch = connectionString.ConnectionModeSwitch; var connectionMode = connectionModeSwitch == ConnectionModeSwitch.UseConnectionMode ? connectionString.Connect : default; var directConnection = connectionModeSwitch == ConnectionModeSwitch.UseDirectConnection ? connectionString.DirectConnection : default; builder = builder.ConfigureCluster( s => s.With( connectionMode: connectionMode, connectionModeSwitch: connectionModeSwitch, directConnection: directConnection, scheme: connectionString.Scheme, loadBalanced: connectionString.LoadBalanced)); #pragma warning restore CS0618 // Type or member is obsolete if (connectionString.Hosts.Count > 0) { builder = builder.ConfigureCluster(s => s.With(endPoints: Optional.Enumerable(connectionString.Hosts))); } if (connectionString.ReplicaSet != null) { builder = builder.ConfigureCluster(s => s.With(replicaSetName: connectionString.ReplicaSet)); } if (connectionString.ServerSelectionTimeout != null) { builder = builder.ConfigureCluster(s => s.With(serverSelectionTimeout: connectionString.ServerSelectionTimeout.Value)); } if (serverApi != null) { builder = builder.ConfigureCluster(s => s.With(serverApi: serverApi)); } return(builder); }
public static ClusterBuilder ConfigureWithConnectionString(this ClusterBuilder configuration, ConnectionString connectionString) { Ensure.IsNotNull(configuration, "configuration"); Ensure.IsNotNull(connectionString, "connectionString"); // TCP if (connectionString.ConnectTimeout != null) { // TODO: nowhere to set this } if (connectionString.Ipv6.HasValue && connectionString.Ipv6.Value) { configuration.ConfigureTcp(s => s.WithAddressFamily(AddressFamily.InterNetworkV6)); } if (connectionString.SocketTimeout != null) { configuration.ConfigureTcp(s => s .WithReadTimeout(connectionString.SocketTimeout.Value) .WithWriteTimeout(connectionString.SocketTimeout.Value)); } if (connectionString.Ssl != null) { configuration.ConfigureSsl(ssl => { if (connectionString.SslVerifyCertificate.GetValueOrDefault(true)) { ssl = ssl.With( serverCertificateValidator: new RemoteCertificateValidationCallback((obj, cert, chain, errors) => true)); } return(ssl); }); } // Connection if (connectionString.Username != null) { var authenticator = CreateAuthenticator(connectionString); configuration.ConfigureConnection(s => s.WithAuthenticators(new[] { authenticator })); } if (connectionString.MaxIdleTime != null) { configuration.ConfigureConnection(s => s.WithMaxIdleTime(connectionString.MaxIdleTime.Value)); } if (connectionString.MaxLifeTime != null) { configuration.ConfigureConnection(s => s.WithMaxLifeTime(connectionString.MaxLifeTime.Value)); } // Connection Pool if (connectionString.MaxPoolSize != null) { configuration.ConfigureConnectionPool(s => s.WithMaxConnections(connectionString.MaxPoolSize.Value)); } if (connectionString.MinPoolSize != null) { configuration.ConfigureConnectionPool(s => s.WithMinConnections(connectionString.MinPoolSize.Value)); } if (connectionString.WaitQueueMultiple != null) { var maxConnections = connectionString.MaxPoolSize ?? new ConnectionPoolSettings().MaxConnections; var waitQueueSize = maxConnections * connectionString.WaitQueueMultiple.Value; configuration.ConfigureConnectionPool(s => s.WithWaitQueueSize(waitQueueSize)); } if (connectionString.WaitQueueTimeout != null) { configuration.ConfigureConnectionPool(s => s.WithWaitQueueTimeout(connectionString.WaitQueueTimeout.Value)); } // Server // Cluster if (connectionString.Hosts.Count > 0) { configuration.ConfigureCluster(s => s.WithEndPoints(connectionString.Hosts)); } if (connectionString.ReplicaSet != null) { configuration.ConfigureCluster(s => s .WithReplicaSetName(connectionString.ReplicaSet)); } return(configuration); }