public void LoadBalanceTimeoutTest() { KdbPlusConnectionStringBuilder builder1 = new KdbPlusConnectionStringBuilder { Server = Constants.Host, Port = Constants.Port, LoadBalanceTimeout = 3 }; KdbPlusDatabaseClient innerClient1; using (PooledKdbPlusDatabaseClient client1 = (PooledKdbPlusDatabaseClient)CreateDatabaseClientFromConString(builder1.ConnectionString) ) { client1.ExecuteNonQuery("0"); innerClient1 = client1.InnerClient; Thread.Sleep(5000); } // with delay there should be new connection KdbPlusDatabaseClient innerClient2; using (PooledKdbPlusDatabaseClient client2 = (PooledKdbPlusDatabaseClient)CreateDatabaseClientFromConString(builder1.ConnectionString) ) { innerClient2 = client2.InnerClient; Assert.AreNotSame(innerClient1, innerClient2); } using (PooledKdbPlusDatabaseClient client3 = (PooledKdbPlusDatabaseClient)CreateDatabaseClientFromConString(builder1.ConnectionString) ) { // without delay connection should be the same Assert.AreSame(innerClient2, client3.InnerClient); } }
protected override IDatabaseClient CreateDatabaseClient(string host, int port) { KdbPlusConnectionStringBuilder builder = new KdbPlusConnectionStringBuilder { Server = host, Port = port }; return(new PooledKdbPlusDatabaseClient(builder.ConnectionString)); }
protected override IDatabaseClient CreateDatabaseClient(string host, int port) { KdbPlusConnectionStringBuilder builder = new KdbPlusConnectionStringBuilder { Server = host, Port = port }; return(new BalancingKdbPlusDatabaseClient(new ConnectionDispatcher(new KdbPlusConnectionStringBuilder[] { builder }))); }
public void DisabledPoolingTest() { KdbPlusConnectionStringBuilder builder = new KdbPlusConnectionStringBuilder { Server = Constants.Host, Port = Constants.Port, Pooling = false }; NonPooledKdbPlusDatabaseClient client = (NonPooledKdbPlusDatabaseClient)CreateDatabaseClientFromConString(builder.ConnectionString); client.Dispose(); }
public void DifferentCaseStringParseTest() { KdbPlusConnectionStringBuilder builder = new KdbPlusConnectionStringBuilder("Server=1;Port=2;User ID=3;Password=4;buffersize=16384"); Assert.AreEqual("1", builder.Server); Assert.AreEqual(2, builder.Port); Assert.AreEqual("3", builder.UserID); Assert.AreEqual("4", builder.Password); Assert.AreEqual(16384, builder.BufferSize); }
private static KdbPlusConnectionStringBuilder[] CreateBuilders(int count) { KdbPlusConnectionStringBuilder[] result = new KdbPlusConnectionStringBuilder[count]; for (int i = 0; i < count; i++) { result[i] = new KdbPlusConnectionStringBuilder { Server = Constants.Host, Port = Constants.Port, MinPoolSize = i + 1 }; } return(result); }
public void DefaultsTest() { KdbPlusConnectionStringBuilder builder = new KdbPlusConnectionStringBuilder("Server=1;Port=2"); Assert.AreEqual("1", builder.Server); Assert.AreEqual(2, builder.Port); Assert.AreEqual(String.Empty, builder.UserID); Assert.AreEqual(String.Empty, builder.Password); Assert.AreEqual(KdbPlusConnectionStringBuilder.DefaultBufferSize, builder.BufferSize); Assert.AreEqual(KdbPlusConnectionStringBuilder.DefaultPooling, builder.Pooling); Assert.AreEqual(KdbPlusConnectionStringBuilder.DefaultMinPoolSize, builder.MinPoolSize); Assert.AreEqual(KdbPlusConnectionStringBuilder.DefaultMaxPoolSize, builder.MaxPoolSize); Assert.AreEqual(KdbPlusConnectionStringBuilder.DefaultLoadBalanceTimeoutSeconds, builder.LoadBalanceTimeout); }
/// <summary> /// Gets the connection. /// </summary> /// <returns>Connection.</returns> public override IDatabaseClient GetConnection() { KdbPlusConnectionStringBuilder builder = new KdbPlusConnectionStringBuilder { Port = _port, Server = _host }; KdbPlusDatabaseClient client = KdbPlusDatabaseClient.Factory.CreateNonPooledClient(builder); client.SendTimeout = TimeSpan.FromMinutes(15); client.ReceiveTimeout = TimeSpan.FromMinutes(15); return(client); }
public void CorrectStringParseTest() { KdbPlusConnectionStringBuilder builder = new KdbPlusConnectionStringBuilder("server=1;port=2;user id=3;password=4;buffer size=16384;pooling=false;min pool size=10;max pool size=11;load balance timeout=10;inactivity timeout=10"); Assert.AreEqual("1", builder.Server); Assert.AreEqual(2, builder.Port); Assert.AreEqual("3", builder.UserID); Assert.AreEqual("4", builder.Password); Assert.AreEqual(16384, builder.BufferSize); Assert.AreEqual(false, builder.Pooling); Assert.AreEqual(10, builder.MinPoolSize); Assert.AreEqual(11, builder.MaxPoolSize); Assert.AreEqual(10, builder.LoadBalanceTimeout); Assert.AreEqual(10, builder.InactivityTimeout); }
public void MultiThreadedTwoPoolsTest() { const int threadCount = 1; Thread[] threads = new Thread[threadCount]; foreach (KeyValuePair <KdbPlusConnectionStringBuilder, KdbPlusDatabaseClientPool> entry in PooledKdbPlusDatabaseClient.Pools) { entry.Value.Dispose(); } PooledKdbPlusDatabaseClient.Pools.Clear(); KdbPlusConnectionStringBuilder builder1 = new KdbPlusConnectionStringBuilder { Server = Constants.Host, Port = Constants.Port }; KdbPlusConnectionStringBuilder builder2 = new KdbPlusConnectionStringBuilder { Server = Constants.Host, Port = Constants.Port, MaxPoolSize = 15 }; for (int i = 0; i < threadCount; i++) { threads[i] = new Thread( delegate() { for (int j = 0; j < threadCount; j++) { using (IDatabaseClient client = CreateDatabaseClientFromConString(builder1.ConnectionString) ) { client.ExecuteNonQuery("0"); Thread.Sleep(100); } using (IDatabaseClient client = CreateDatabaseClientFromConString(builder2.ConnectionString) ) { client.ExecuteNonQuery("0"); Thread.Sleep(100); } } } ); } for (int i = 0; i < threadCount; i++) { threads[i].Start(); } for (int i = 0; i < threadCount; i++) { threads[i].Join(); } Assert.AreEqual(2, PooledKdbPlusDatabaseClient.Pools.Keys.Count); foreach (KeyValuePair <KdbPlusConnectionStringBuilder, KdbPlusDatabaseClientPool> entry in PooledKdbPlusDatabaseClient.Pools) { Assert.AreEqual(threadCount, entry.Value.ConnectionsCount); } }
/// <summary> /// Creates the connection pool. /// </summary> /// <param name="builder">The builder.</param> /// <returns></returns> public abstract KdbPlusDatabaseClientPool CreatePool(KdbPlusConnectionStringBuilder builder);
/// <summary> /// Creates the non pooled kdb+ client. TCP connection is created and closed for each client. /// </summary> /// <param name="builder">The builder.</param> /// <returns></returns> public abstract KdbPlusDatabaseClient CreateNonPooledClient(KdbPlusConnectionStringBuilder builder);