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); } }
/// <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(); }
protected DelegatingKdbPlusDatabaseClient(KdbPlusDatabaseClient innerClient) { Guard.ThrowIfNull(innerClient, "innerClient"); _innerClient = innerClient; }