private bool ConnectionShouldBeDisposed(KdbPlusDatabaseClient connection)
        {
            // dispose connection if it's broken
            if (!connection.CanBeReused)
            {
                return(true);
            }

            return(_loadBalanceTimeout > 0 && (DateTime.Now - connection.Created).TotalSeconds > _loadBalanceTimeout);
        }
        private KdbPlusDatabaseClient GetFreeConnection()
        {
            KdbPlusDatabaseClient connection = _connectionPool.Dequeue();

            if (ConnectionShouldBeDisposed(connection))
            {
                DisposeConnection(connection);

                return(CreateNewConnection());
            }

            return(connection);
        }
        /// <summary>
        /// Returns the connection to pool.
        /// </summary>
        /// <param name="connection">The connection.</param>
        public override void ReturnConnectionToPool(KdbPlusDatabaseClient connection)
        {
            ThrowIfDisposed();

            Guard.ThrowIfNull(connection, "connection");

            lock (_locker)
            {
                if (ConnectionShouldBeDisposed(connection))
                {
                    DisposeConnection(connection);
                }
                else
                {
                    _connectionPool.Enqueue(connection);
                }

                Monitor.Pulse(_locker);
            }
        }
Example #4
0
 /// <summary>
 /// Returns the connection to pool.
 /// </summary>
 /// <param name="connection">The connection.</param>
 public abstract void ReturnConnectionToPool(KdbPlusDatabaseClient connection);
 private void DisposeConnection(KdbPlusDatabaseClient connection)
 {
     _connectionsCount--;
     _createdConnections.Remove(connection);
     connection.Dispose();
 }
Example #6
0
 protected DelegatingKdbPlusDatabaseClient(KdbPlusDatabaseClient innerClient)
 {
     Guard.ThrowIfNull(innerClient, "innerClient");
     _innerClient = innerClient;
 }