Skip to content

Commit 0cb3eee

Browse files
dev: added EnableMultipleHttp2Connections setting (#294)
1 parent 75e7112 commit 0cb3eee

File tree

5 files changed

+47
-5
lines changed

5 files changed

+47
-5
lines changed

src/Ydb.Sdk/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
- Added `EnableMultipleHttp2Connections` setting to grpc channel.
12
- `Connection.State` is set to `Broken` when the session is deactivated.
23

34
## v0.16.2

src/Ydb.Sdk/src/Ado/YdbConnectionStringBuilder.cs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ private void InitDefaultValues()
2929
_useTls = false;
3030
_keepAlivePingDelay = SocketHttpHandlerDefaults.DefaultKeepAlivePingSeconds;
3131
_keepAlivePingTimeout = SocketHttpHandlerDefaults.DefaultKeepAlivePingTimeoutSeconds;
32+
_enableMultipleHttp2Connections = false;
3233
}
3334

3435
public string Host
@@ -174,6 +175,18 @@ public int KeepAlivePingTimeout
174175

175176
private int _keepAlivePingTimeout;
176177

178+
public bool EnableMultipleHttp2Connections
179+
{
180+
get => _enableMultipleHttp2Connections;
181+
set
182+
{
183+
_enableMultipleHttp2Connections = value;
184+
SaveValue(nameof(EnableMultipleHttp2Connections), value);
185+
}
186+
}
187+
188+
private bool _enableMultipleHttp2Connections;
189+
177190
public ILoggerFactory? LoggerFactory { get; init; }
178191

179192
public ICredentialsProvider? CredentialsProvider { get; init; }
@@ -237,7 +250,8 @@ internal Task<Driver> BuildDriver()
237250
? Timeout.InfiniteTimeSpan
238251
: TimeSpan.FromSeconds(KeepAlivePingTimeout),
239252
User = User,
240-
Password = Password
253+
Password = Password,
254+
EnableMultipleHttp2Connections = EnableMultipleHttp2Connections
241255
}, LoggerFactory);
242256
}
243257

@@ -316,13 +330,16 @@ static YdbConnectionOption()
316330
AddOption(new YdbConnectionOption<int>(IntExtractor,
317331
(builder, keepAlivePingTimeout) => builder.KeepAlivePingTimeout = keepAlivePingTimeout),
318332
"KeepAlivePingTimeout", "Keep Alive Ping Timeout");
333+
AddOption(new YdbConnectionOption<bool>(BoolExtractor, (builder, enableMultipleHttp2Connections) =>
334+
builder.EnableMultipleHttp2Connections = enableMultipleHttp2Connections),
335+
"EnableMultipleHttp2Connections", "Enable Multiple Http2 Connections");
319336
}
320337

321338
private static void AddOption(YdbConnectionOption option, params string[] keys)
322339
{
323340
foreach (var key in keys)
324341
{
325-
KeyToOption.Add(key, option);
342+
KeyToOption.Add(key.Trim(), option);
326343
KeyToOption.Add(key.ToLower(), option);
327344
}
328345
}

src/Ydb.Sdk/src/DriverConfig.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ public class DriverConfig
1616
public TimeSpan KeepAlivePingTimeout { get; init; } =
1717
TimeSpan.FromSeconds(SocketHttpHandlerDefaults.DefaultKeepAlivePingTimeoutSeconds);
1818

19+
public bool EnableMultipleHttp2Connections { get; init; }
20+
1921
public string? User { get; init; }
2022
public string? Password { get; init; }
2123

src/Ydb.Sdk/src/Pool/ChannelPool.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ public GrpcChannel CreateChannel(string endpoint)
103103
// https://github.com/grpc/proposal/blob/master/A8-client-side-keepalive.md
104104
KeepAlivePingDelay = _config.KeepAlivePingDelay,
105105
KeepAlivePingTimeout = _config.KeepAlivePingTimeout,
106-
KeepAlivePingPolicy = HttpKeepAlivePingPolicy.Always
106+
KeepAlivePingPolicy = HttpKeepAlivePingPolicy.Always,
107+
EnableMultipleHttp2Connections = _config.EnableMultipleHttp2Connections
107108
};
108109

109110
// https://github.com/grpc/grpc-dotnet/issues/2312#issuecomment-1790661801

src/Ydb.Sdk/tests/Ado/YdbConnectionStringBuilderTests.cs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public void InitDefaultValues_WhenEmptyConstructorInvoke_ReturnDefaultConnection
1919
Assert.Equal(10, connectionString.KeepAlivePingDelay);
2020
Assert.Equal(10, connectionString.KeepAlivePingTimeout);
2121
Assert.Equal("", connectionString.ConnectionString);
22+
Assert.False(connectionString.EnableMultipleHttp2Connections);
2223
}
2324

2425
[Fact]
@@ -36,7 +37,8 @@ public void InitConnectionStringBuilder_WhenExpectedKeys_ReturnUpdatedConnection
3637
{
3738
var connectionString =
3839
new YdbConnectionStringBuilder("Host=server;Port=2135;Database=/my/path;User=Kirill;UseTls=true;" +
39-
"KeepAlivePingDelay=30;KeepAlivePingTimeout=60");
40+
"KeepAlivePingDelay=30;KeepAlivePingTimeout=60;" +
41+
"EnableMultipleHttp2Connections=true");
4042

4143
Assert.Equal(2135, connectionString.Port);
4244
Assert.Equal("server", connectionString.Host);
@@ -46,8 +48,10 @@ public void InitConnectionStringBuilder_WhenExpectedKeys_ReturnUpdatedConnection
4648
Assert.Equal(30, connectionString.KeepAlivePingDelay);
4749
Assert.Equal(60, connectionString.KeepAlivePingTimeout);
4850
Assert.Null(connectionString.Password);
51+
Assert.True(connectionString.EnableMultipleHttp2Connections);
4952
Assert.Equal("Host=server;Port=2135;Database=/my/path;User=Kirill;UseTls=True;" +
50-
"KeepAlivePingDelay=30;KeepAlivePingTimeout=60", connectionString.ConnectionString);
53+
"KeepAlivePingDelay=30;KeepAlivePingTimeout=60;" +
54+
"EnableMultipleHttp2Connections=True", connectionString.ConnectionString);
5155
}
5256

5357
[Fact]
@@ -62,4 +66,21 @@ public void Host_WhenSetInProperty_ReturnUpdatedConnectionString()
6266
Assert.Equal("Host=new_server;Port=2135;Database=/my/path;User=Kirill",
6367
connectionString.ConnectionString);
6468
}
69+
70+
[Fact]
71+
public void SetProperty_WhenPropertyNeedsTrimOperation_ReturnUpdatedConnectionString()
72+
{
73+
var connectionString =
74+
new YdbConnectionStringBuilder(" Host =server;Port=2135; EnableMultipleHttp2Connections =true");
75+
76+
Assert.Equal(2135, connectionString.Port);
77+
Assert.Equal("server", connectionString.Host);
78+
Assert.True(connectionString.EnableMultipleHttp2Connections);
79+
80+
Assert.Equal("Host=server;Port=2135;EnableMultipleHttp2Connections=True", connectionString.ConnectionString);
81+
82+
connectionString.EnableMultipleHttp2Connections = false;
83+
84+
Assert.Equal("Host=server;Port=2135;EnableMultipleHttp2Connections=False", connectionString.ConnectionString);
85+
}
6586
}

0 commit comments

Comments
 (0)