Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/ClientBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class ClientBuilder
private bool _loadEnv = true;
private string? _envPath;
private string? _envFilePath;
private int _maxConnsPerHost = 5;
private int _maxConnsPerHost = 100;
private TimeSpan _idleTimeout = TimeSpan.FromSeconds(55);
private TimeSpan _connectTimeout = TimeSpan.FromSeconds(10);
private TimeSpan _requestTimeout = TimeSpan.FromSeconds(30);
Expand Down Expand Up @@ -85,7 +85,7 @@ public ClientBuilder EnvPath(string path)
return this;
}

/// <summary>CHA-2956: max concurrent TCP connections per host (default 5).</summary>
/// <summary>CHA-2956: max concurrent TCP connections per host (default 100).</summary>
public ClientBuilder MaxConnsPerHost(int n) { _maxConnsPerHost = n; return this; }

/// <summary>CHA-2956: how long an idle pooled connection lingers (default 55s).</summary>
Expand Down
6 changes: 3 additions & 3 deletions src/StreamOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace GetStream
/// <summary>
/// Configuration object for <see cref="BaseClient"/> covering credentials, base URL, HTTP connection-pool tuning (CHA-2956), and optional dependencies.
///
/// Defaults: MaxConnsPerHost=5, IdleTimeout=55s, ConnectTimeout=10s, RequestTimeout=30s.
/// Defaults: MaxConnsPerHost=100, IdleTimeout=55s, ConnectTimeout=10s, RequestTimeout=30s.
/// KeepAlive is always-on; the SDK never emits <c>Connection: close</c>.
/// </summary>
public class StreamOptions
Expand All @@ -21,8 +21,8 @@ public class StreamOptions
/// <summary>Base URL. Default <c>https://chat.stream-io-api.com</c>.</summary>
public string BaseUrl { get; set; } = "https://chat.stream-io-api.com";

/// <summary>Max concurrent TCP connections per host. Default <c>5</c>.</summary>
public int MaxConnsPerHost { get; set; } = 5;
/// <summary>Max concurrent TCP connections per host; extra requests wait for a free connection. Default <c>100</c>.</summary>
public int MaxConnsPerHost { get; set; } = 100;

/// <summary>How long an idle pooled connection lingers. Default <c>55s</c> (5s below the typical 60s LB idle timeout).</summary>
public TimeSpan IdleTimeout { get; set; } = TimeSpan.FromSeconds(55);
Expand Down
4 changes: 2 additions & 2 deletions tests/ClientBuilderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ public void ClientBuilder_DefaultsWhenNoPoolKnobsSet()
.SkipEnvLoad()
.BuildChatClient();
var (httpClient, handler) = GetStream.Tests.ConnectionPoolTests.UnwrapWrapperHandler(chatClient);
Assert.That(handler.MaxConnectionsPerServer, Is.EqualTo(5));
Assert.That(handler.MaxConnectionsPerServer, Is.EqualTo(100));
Assert.That(handler.PooledConnectionIdleTimeout, Is.EqualTo(TimeSpan.FromSeconds(55)));
Assert.That(handler.ConnectTimeout, Is.EqualTo(TimeSpan.FromSeconds(10)));
Assert.That(httpClient.Timeout, Is.EqualTo(TimeSpan.FromSeconds(30)));
Expand Down Expand Up @@ -196,7 +196,7 @@ public void Build_StreamClient_DefaultsWhenNoPoolKnobsSet()
.SkipEnvLoad()
.Build();
var (httpClient, handler) = GetStream.Tests.ConnectionPoolTests.UnwrapHandler(client);
Assert.That(handler.MaxConnectionsPerServer, Is.EqualTo(5));
Assert.That(handler.MaxConnectionsPerServer, Is.EqualTo(100));
Assert.That(handler.PooledConnectionIdleTimeout, Is.EqualTo(TimeSpan.FromSeconds(55)));
Assert.That(handler.ConnectTimeout, Is.EqualTo(TimeSpan.FromSeconds(10)));
Assert.That(httpClient.Timeout, Is.EqualTo(TimeSpan.FromSeconds(30)));
Expand Down
8 changes: 4 additions & 4 deletions tests/ConnectionPoolTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ public void BaseClient_WithDefaultStreamOptions_HasSpecDefaults()
var (httpClient, handler) = UnwrapHandler(client);
Assert.That(httpClient.Timeout, Is.EqualTo(TimeSpan.FromSeconds(30)),
"default RequestTimeout = 30s");
Assert.That(handler.MaxConnectionsPerServer, Is.EqualTo(5),
"default MaxConnsPerHost = 5");
Assert.That(handler.MaxConnectionsPerServer, Is.EqualTo(100),
"default MaxConnsPerHost = 100");
Assert.That(handler.PooledConnectionIdleTimeout, Is.EqualTo(TimeSpan.FromSeconds(55)),
"default IdleTimeout = 55s");
Assert.That(handler.ConnectTimeout, Is.EqualTo(TimeSpan.FromSeconds(10)),
Expand Down Expand Up @@ -63,7 +63,7 @@ public void BaseClient_PositionalConstructor_StillWorks_WithSpecDefaults()
var client = new BaseClient(DummyApiKey, DummySecret);
var (httpClient, handler) = UnwrapHandler(client);
Assert.That(httpClient.Timeout, Is.EqualTo(TimeSpan.FromSeconds(30)));
Assert.That(handler.MaxConnectionsPerServer, Is.EqualTo(5));
Assert.That(handler.MaxConnectionsPerServer, Is.EqualTo(100));
Assert.That(handler.PooledConnectionIdleTimeout, Is.EqualTo(TimeSpan.FromSeconds(55)));
Assert.That(handler.ConnectTimeout, Is.EqualTo(TimeSpan.FromSeconds(10)));
Assert.That(handler.AutomaticDecompression.HasFlag(DecompressionMethods.GZip), Is.True);
Expand Down Expand Up @@ -197,7 +197,7 @@ public void BaseClient_InfoLog_OnConstruction_WithDefaults()
Assert.That(capture.Infos.Count, Is.EqualTo(1), "exactly one INFO line on construction");
var msg = capture.Infos[0];
Assert.That(msg, Does.StartWith("client.initialized"));
Assert.That(msg, Does.Contain("stream.client.max_conns_per_host=5"));
Assert.That(msg, Does.Contain("stream.client.max_conns_per_host=100"));
Assert.That(msg, Does.Contain("stream.client.idle_timeout_seconds=55"));
Assert.That(msg, Does.Contain("stream.client.connect_timeout_seconds=10"));
Assert.That(msg, Does.Contain("stream.client.request_timeout_seconds=30"));
Expand Down
Loading