Exemple #1
0
 /// <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;
     }
 }
Exemple #3
0
 /// <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);
        }
Exemple #5
0
 internal void SetupControllConnection(ControlConnection controlConnection)
 {
     this._controlConnection = controlConnection;
     _controlConnection.Init();
 }
Exemple #6
0
 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;
        }
Exemple #9
0
 /// <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;
     }
 }