/// <summary> /// Initializes once (Thread-safe) the control connection and metadata associated with the Cluster instance /// </summary> private void Init() { if (_initialized) { //It was already initialized return; } lock (_initLock) { if (_initialized) { //It was initialized when waiting on the lock return; } if (_initException != null) { //There was an exception that is not possible to recover from throw _initException; } try { // Only abort the async operations when at least twice the time for ConnectTimeout per host passed var initialAbortTimeout = Configuration.SocketOptions.ConnectTimeoutMillis * 2 * _metadata.Hosts.Count; initialAbortTimeout = Math.Max(initialAbortTimeout, ControlConnection.MetadataAbortTimeout); TaskHelper.WaitToComplete(_controlConnection.Init(), initialAbortTimeout); // Initialize policies Configuration.Policies.LoadBalancingPolicy.Initialize(this); Configuration.Policies.SpeculativeExecutionPolicy.Initialize(this); Configuration.Policies.InitializeRetryPolicy(this); } catch (NoHostAvailableException) { //No host available now, maybe later it can recover from throw; } catch (TimeoutException ex) { _initException = ex; throw new TimeoutException( "Cluster initialization was aborted after timing out. This mechanism is put in place to" + " avoid blocking the calling thread forever. This usually caused by a networking issue" + " between the client driver instance and the cluster.", ex); } catch (Exception ex) { //There was an error that the driver is not able to recover from //Store the exception for the following times _initException = ex; //Throw the actual exception for the first time throw; } _logger.Info("Cluster Connected using binary protocol version: [" + _serializer.ProtocolVersion + "]"); _initialized = true; _metadata.Hosts.Added += OnHostAdded; _metadata.Hosts.Removed += OnHostRemoved; } }
/// <summary> /// Initializes once (Thread-safe) the control connection and metadata associated with the Cluster instance /// </summary> private void Init() { if (_initialized) { //It was already initialized return; } lock (_initLock) { if (_initialized) { //It was initialized when waiting on the lock return; } if (_initException != null) { //There was an exception that is not possible to recover from throw _initException; } var protocolVersion = (byte)MaxProtocolVersion; if (Configuration.ProtocolOptions.MaxProtocolVersion != null && Configuration.ProtocolOptions.MaxProtocolVersion < MaxProtocolVersion ) { protocolVersion = Configuration.ProtocolOptions.MaxProtocolVersion.Value; } //create the buffer pool with 16KB for small buffers and 256Kb for large buffers. Configuration.BufferPool = new RecyclableMemoryStreamManager(16 * 1024, 256 * 1024, ProtocolOptions.MaximumFrameLength); _controlConnection = new ControlConnection(protocolVersion, Configuration, _metadata); _metadata.ControlConnection = _controlConnection; try { _controlConnection.Init(); _serializer = _controlConnection.Serializer; //Initialize policies Configuration.Policies.LoadBalancingPolicy.Initialize(this); Configuration.Policies.SpeculativeExecutionPolicy.Initialize(this); } catch (NoHostAvailableException) { //No host available now, maybe later it can recover from throw; } catch (Exception ex) { //There was an error that the driver is not able to recover from //Store the exception for the following times _initException = ex; //Throw the actual exception for the first time throw; } Configuration.Timer = new HashedWheelTimer(); _logger.Info("Cluster Connected using binary protocol version: [" + _serializer.ProtocolVersion + "]"); _initialized = true; _metadata.Hosts.Added += OnHostAdded; _metadata.Hosts.Removed += OnHostRemoved; } }
/// <summary> /// Initializes once (Thread-safe) the control connection and metadata associated with the Cluster instance /// </summary> private void Init() { if (_initialized) { //It was already initialized return; } lock (_initLock) { if (_initialized) { //It was initialized when waiting on the lock return; } if (_initException != null) { //There was an exception that is not possible to recover from throw _initException; } _protocolVersion = (byte)MaxProtocolVersion; if (Configuration.ProtocolOptions.MaxProtocolVersion != null && Configuration.ProtocolOptions.MaxProtocolVersion < MaxProtocolVersion ) { _protocolVersion = Configuration.ProtocolOptions.MaxProtocolVersion.Value; } _controlConnection = new ControlConnection(_protocolVersion, Configuration, _metadata); _metadata.ControlConnection = _controlConnection; try { _controlConnection.Init(); _protocolVersion = _controlConnection.ProtocolVersion; //Initialize policies Configuration.Policies.LoadBalancingPolicy.Initialize(this); Configuration.Policies.SpeculativeExecutionPolicy.Initialize(this); } catch (NoHostAvailableException) { //No host available now, maybe later it can recover from throw; } catch (Exception ex) { //There was an error that the driver is not able to recover from //Store the exception for the following times _initException = ex; //Throw the actual exception for the first time throw; } Configuration.Timer = new HashedWheelTimer(); _logger.Info("Cluster Connected using binary protocol version: [" + _protocolVersion + "]"); _initialized = true; _metadata.Hosts.Added += OnHostAdded; _metadata.Hosts.Removed += OnHostRemoved; } }
/// <summary> /// Creates a new session on this cluster and sets a keyspace to use. /// </summary> /// <param name="keyspace"> The name of the keyspace to use for the created <code>Session</code>. </param> /// <returns>a new session on this cluster set to keyspace: /// <code>keyspaceName</code>. </returns> public Session Connect(string keyspace) { bool controlConnectionCreated = false; lock (_controlConnectionGuard) { if (_controlConnection == null) { controlConnectionCreated = true; var controlpolicies = new Cassandra.Policies( _configuration.Policies.LoadBalancingPolicy, new ExponentialReconnectionPolicy(2 * 1000, 5 * 60 * 1000), Cassandra.Policies.DefaultRetryPolicy); _hosts = new Hosts(_configuration.Policies.ReconnectionPolicy); foreach (var ep in _contactPoints) { _hosts.AddIfNotExistsOrBringUpIfDown(ep); } var poolingOptions = new PoolingOptions().SetCoreConnectionsPerHost(HostDistance.Local, 1); _controlConnection = new ControlConnection(this, new List <IPAddress>(), controlpolicies, _configuration.ProtocolOptions, poolingOptions, _configuration.SocketOptions, new ClientOptions( _configuration.ClientOptions.WithoutRowSetBuffering, _configuration.ClientOptions.QueryAbortTimeout, null, _configuration.ClientOptions.AsyncCallAbortTimeout), _configuration.AuthInfoProvider, _configuration.MetricsEnabled); _metadata = new Metadata(_hosts, _controlConnection); _controlConnection.Init(); } } var scs = new Session(this, _contactPoints, _configuration.Policies, _configuration.ProtocolOptions, _configuration.PoolingOptions, _configuration.SocketOptions, _configuration.ClientOptions, _configuration.AuthInfoProvider, _configuration.MetricsEnabled, keyspace, _hosts); scs.Init(); lock (_connectedSessions) _connectedSessions.Add(scs); _logger.Info("Session connected!"); if (controlConnectionCreated) { RefreshSchema(); } return(scs); }
internal void SetupControllConnection(ControlConnection controlConnection) { this._controlConnection = controlConnection; _controlConnection.Init(); }
internal void SetupControllConnection(ControlConnection controlConnection) { this._controlConnection = controlConnection; _controlConnection.Init(); }
/// <summary> /// Initializes once (Thread-safe) the control connection and metadata associated with the Cluster instance /// </summary> private void Init() { if (_initialized) { //It was already initialized return; } lock (_initLock) { if (_initialized) { //It was initialized when waiting on the lock return; } if (_initException != null) { //There was an exception that is not possible to recover from throw _initException; } _protocolVersion = (byte) MaxProtocolVersion; if (Configuration.ProtocolOptions.MaxProtocolVersion != null && Configuration.ProtocolOptions.MaxProtocolVersion < MaxProtocolVersion ) { _protocolVersion = Configuration.ProtocolOptions.MaxProtocolVersion.Value; } _controlConnection = new ControlConnection(_protocolVersion, Configuration, _metadata); _metadata.ControlConnection = _controlConnection; try { _controlConnection.Init(); _protocolVersion = _controlConnection.ProtocolVersion; //Initialize policies Configuration.Policies.LoadBalancingPolicy.Initialize(this); Configuration.Policies.SpeculativeExecutionPolicy.Initialize(this); } catch (NoHostAvailableException) { //No host available now, maybe later it can recover from throw; } catch (Exception ex) { //There was an error that the driver is not able to recover from //Store the exception for the following times _initException = ex; //Throw the actual exception for the first time throw; } Configuration.Timer = new HashedWheelTimer(); _logger.Info("Cluster Connected using binary protocol version: [" + _protocolVersion + "]"); _initialized = true; _metadata.Hosts.Added += OnHostAdded; _metadata.Hosts.Removed += OnHostRemoved; } }
/// <summary> /// Creates a new session on this cluster and sets a keyspace to use. /// </summary> /// <param name="keyspace"> The name of the keyspace to use for the created <code>Session</code>. </param> /// <returns>a new session on this cluster set to keyspace: /// <code>keyspaceName</code>. </returns> public Session Connect(string keyspace) { bool controlConnectionCreated = false; lock (_controlConnectionGuard) { if (_controlConnection == null) { controlConnectionCreated = true; var controlpolicies = new Cassandra.Policies( _configuration.Policies.LoadBalancingPolicy, new ExponentialReconnectionPolicy(2 * 1000, 5 * 60 * 1000), Cassandra.Policies.DefaultRetryPolicy); _hosts = new Hosts(_configuration.Policies.ReconnectionPolicy); foreach (var ep in _contactPoints) _hosts.AddIfNotExistsOrBringUpIfDown(ep); var poolingOptions = new PoolingOptions().SetCoreConnectionsPerHost(HostDistance.Local, 1); _controlConnection = new ControlConnection(this, new List<IPAddress>(), controlpolicies, _configuration.ProtocolOptions, poolingOptions, _configuration.SocketOptions, new ClientOptions( _configuration.ClientOptions.WithoutRowSetBuffering, _configuration.ClientOptions.QueryAbortTimeout, null, _configuration.ClientOptions.AsyncCallAbortTimeout), _configuration.AuthInfoProvider, _configuration.MetricsEnabled); _metadata = new Metadata(_hosts, _controlConnection); _controlConnection.Init(); } } var scs = new Session(this, _contactPoints, _configuration.Policies, _configuration.ProtocolOptions, _configuration.PoolingOptions, _configuration.SocketOptions, _configuration.ClientOptions, _configuration.AuthInfoProvider, _configuration.MetricsEnabled, keyspace, _hosts); scs.Init(); lock (_connectedSessions) _connectedSessions.Add(scs); _logger.Info("Session connected!"); if (controlConnectionCreated) RefreshSchema(); return scs; }
/// <summary> /// Initializes once (Thread-safe) the control connection and metadata associated with the Cluster instance /// </summary> private void Init() { if (_initialized) { //It was already initialized return; } lock (_initLock) { if (_initialized) { //It was initialized when waiting on the lock return; } if (_initException != null) { //There was an exception that is not possible to recover from throw _initException; } var protocolVersion = (byte) MaxProtocolVersion; if (Configuration.ProtocolOptions.MaxProtocolVersion != null && Configuration.ProtocolOptions.MaxProtocolVersion < MaxProtocolVersion ) { protocolVersion = Configuration.ProtocolOptions.MaxProtocolVersion.Value; } //create the buffer pool with 16KB for small buffers and 256Kb for large buffers. Configuration.BufferPool = new RecyclableMemoryStreamManager(16 * 1024, 256 * 1024, ProtocolOptions.MaximumFrameLength); _controlConnection = new ControlConnection(protocolVersion, Configuration, _metadata); _metadata.ControlConnection = _controlConnection; try { _controlConnection.Init(); _serializer = _controlConnection.Serializer; //Initialize policies Configuration.Policies.LoadBalancingPolicy.Initialize(this); Configuration.Policies.SpeculativeExecutionPolicy.Initialize(this); } catch (NoHostAvailableException) { //No host available now, maybe later it can recover from throw; } catch (Exception ex) { //There was an error that the driver is not able to recover from //Store the exception for the following times _initException = ex; //Throw the actual exception for the first time throw; } Configuration.Timer = new HashedWheelTimer(); _logger.Info("Cluster Connected using binary protocol version: [" + _serializer.ProtocolVersion + "]"); _initialized = true; _metadata.Hosts.Added += OnHostAdded; _metadata.Hosts.Removed += OnHostRemoved; } }