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)); }
/// <summary> /// Gets the connection. /// </summary> /// <returns></returns> public KdbPlusConnectionStringBuilder GetRandomConnection() { lock (_lock) { KdbPlusConnectionStringBuilder builder = _connections[_currentIndex]; _currentIndex = (_currentIndex + 1) % _maxValue; return(builder); } }
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(); }
/// <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); }
/// <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)); }