public NonPooledKdbPlusDatabaseClient(KdbPlusConnectionStringBuilder builder)
        {
            Guard.ThrowIfNull(builder, "builder");

            _builder = builder;

            Initialize(builder.Server, builder.Port, builder.UserID, builder.Password, builder.BufferSize, builder.SendTimeout, builder.ReceiveTimeout);
        }
        public override KdbPlusDatabaseClient CreateNewClient(KdbPlusConnectionStringBuilder builder)
        {
            Guard.ThrowIfNull(builder, "builder");

            if (builder.Pooling)
            {
                return(new PooledKdbPlusDatabaseClient(builder));
            }
            return(new NonPooledKdbPlusDatabaseClient(builder));
        }
Beispiel #3
0
        /// <summary>
        /// Gets the connection.
        /// </summary>
        /// <returns></returns>
        public KdbPlusConnectionStringBuilder GetRandomConnection()
        {
            lock (_lock)
            {
                KdbPlusConnectionStringBuilder builder = _connections[_currentIndex];

                _currentIndex = (_currentIndex + 1) % _maxValue;

                return(builder);
            }
        }
Beispiel #4
0
        private void GetClientFromPool(KdbPlusConnectionStringBuilder builder)
        {
            // get existing pool
            try
            {
                _locker.AcquireReaderLock(-1);
                if (_pools.TryGetValue(builder, out _pool))
                {
                    InnerClient = _pool.GetConnection();
                    return;
                }
            }
            finally
            {
                _locker.ReleaseReaderLock();
            }

            // create new pool
            try
            {
                _locker.AcquireWriterLock(-1);

                if (!_pools.TryGetValue(builder, out _pool))
                {
                    _pool = Factory.CreatePool(builder);
                    _pools.Add(builder, _pool);
                }
            }
            finally
            {
                _locker.ReleaseWriterLock();
            }


            InnerClient = _pool.GetConnection();
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="DefaultKdbPlusDatabaseClientPool"/> class.
        /// </summary>
        /// <param name="builder">The builder.</param>
        public DefaultKdbPlusDatabaseClientPool(KdbPlusConnectionStringBuilder builder)
        {
            Guard.ThrowIfNull(builder, "builder");

            int minPoolSize = builder.MinPoolSize;

            if (minPoolSize < 0)
            {
                throw new ArgumentException("Value of minPoolSize should be >= 0.");
            }

            int maxPoolSize = builder.MaxPoolSize;

            if (maxPoolSize < minPoolSize || maxPoolSize <= 0)
            {
                throw new ArgumentException("Value of maxPoolSize should be >= 0 and >= minPoolSize.");
            }

            int loadBalanceTimeout = builder.LoadBalanceTimeout;

            if (loadBalanceTimeout < 0)
            {
                throw new ArgumentException("Value of loadBalanceTimeout should be >=0.");
            }

            _builder            = builder;
            _minPoolSize        = minPoolSize;
            _maxPoolSize        = maxPoolSize;
            _loadBalanceTimeout = loadBalanceTimeout;

            AppDomain.CurrentDomain.DomainUnload += CurrentDomainUnload;

            InitializeConnectionPool();

            InitializeConnectionCleaning();
        }
Beispiel #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PooledKdbPlusDatabaseClient"/> class.
        /// To disable connection pooling - use Pooling=false in the connection string.
        /// </summary>
        /// <param name="builder">The builder.</param>
        public PooledKdbPlusDatabaseClient(KdbPlusConnectionStringBuilder builder)
        {
            Guard.ThrowIfNull(builder, "builder");

            GetClientFromPool(builder);
        }
Beispiel #7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="KdbPlusConnection"/> class.
 /// </summary>
 /// <param name="connectionString">The connection string.</param>
 public KdbPlusConnection(string connectionString)
 {
     _builder = new KdbPlusConnectionStringBuilder(connectionString);
 }
 public override KdbPlusDatabaseClientPool CreatePool(KdbPlusConnectionStringBuilder builder)
 {
     return(new DefaultKdbPlusDatabaseClientPool(builder));
 }
 public override KdbPlusDatabaseClient CreatePooledClient(KdbPlusConnectionStringBuilder builder)
 {
     return(new PooledKdbPlusDatabaseClient(builder));
 }