Skip to content

Commit 87906f9

Browse files
feat: disable discovery
1 parent a326320 commit 87906f9

File tree

6 files changed

+69
-33
lines changed

6 files changed

+69
-33
lines changed

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

Lines changed: 42 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
using System.Diagnostics.CodeAnalysis;
33
using System.Security.Cryptography.X509Certificates;
44
using Microsoft.Extensions.Logging;
5+
using Microsoft.Extensions.Logging.Abstractions;
56
using Ydb.Sdk.Auth;
7+
using Ydb.Sdk.Transport;
68

79
namespace Ydb.Sdk.Ado;
810

@@ -32,6 +34,7 @@ private void InitDefaultValues()
3234
_enableMultipleHttp2Connections = false;
3335
_maxSendMessageSize = GrpcDefaultSettings.MaxSendMessageSize;
3436
_maxReceiveMessageSize = GrpcDefaultSettings.MaxReceiveMessageSize;
37+
_disableDiscovery = false;
3538
}
3639

3740
public string Host
@@ -213,6 +216,18 @@ public int MaxReceiveMessageSize
213216

214217
private int _maxReceiveMessageSize;
215218

219+
public bool DisableDiscovery
220+
{
221+
get => _disableDiscovery;
222+
set
223+
{
224+
_disableDiscovery = value;
225+
SaveValue(nameof(DisableDiscovery), value);
226+
}
227+
}
228+
229+
private bool _disableDiscovery;
230+
216231
public ILoggerFactory? LoggerFactory { get; init; }
217232

218233
public ICredentialsProvider? CredentialsProvider { get; init; }
@@ -257,33 +272,34 @@ public override object this[string keyword]
257272

258273
private string Endpoint => $"{(UseTls ? "grpcs" : "grpc")}://{Host}:{Port}";
259274

260-
internal Task<Driver> BuildDriver()
275+
internal async Task<IDriver> BuildDriver()
261276
{
262277
var cert = RootCertificate != null ? X509Certificate.CreateFromCertFile(RootCertificate) : null;
278+
var driverConfig = new DriverConfig(
279+
endpoint: Endpoint,
280+
database: Database,
281+
credentials: CredentialsProvider,
282+
customServerCertificate: cert,
283+
customServerCertificates: ServerCertificates
284+
)
285+
{
286+
KeepAlivePingDelay = KeepAlivePingDelay == 0
287+
? Timeout.InfiniteTimeSpan
288+
: TimeSpan.FromSeconds(KeepAlivePingDelay),
289+
KeepAlivePingTimeout = KeepAlivePingTimeout == 0
290+
? Timeout.InfiniteTimeSpan
291+
: TimeSpan.FromSeconds(KeepAlivePingTimeout),
292+
User = User,
293+
Password = Password,
294+
EnableMultipleHttp2Connections = EnableMultipleHttp2Connections,
295+
MaxSendMessageSize = MaxSendMessageSize,
296+
MaxReceiveMessageSize = MaxReceiveMessageSize
297+
};
298+
var loggerFactory = LoggerFactory ?? NullLoggerFactory.Instance;
263299

264-
return Driver.CreateInitialized(
265-
new DriverConfig(
266-
endpoint: Endpoint,
267-
database: Database,
268-
credentials: CredentialsProvider,
269-
customServerCertificate: cert,
270-
customServerCertificates: ServerCertificates
271-
)
272-
{
273-
KeepAlivePingDelay = KeepAlivePingDelay == 0
274-
? Timeout.InfiniteTimeSpan
275-
: TimeSpan.FromSeconds(KeepAlivePingDelay),
276-
KeepAlivePingTimeout = KeepAlivePingTimeout == 0
277-
? Timeout.InfiniteTimeSpan
278-
: TimeSpan.FromSeconds(KeepAlivePingTimeout),
279-
User = User,
280-
Password = Password,
281-
EnableMultipleHttp2Connections = EnableMultipleHttp2Connections,
282-
MaxSendMessageSize = MaxSendMessageSize,
283-
MaxReceiveMessageSize = MaxReceiveMessageSize
284-
},
285-
LoggerFactory
286-
);
300+
return DisableDiscovery
301+
? new DirectGrpcChannelDriver(driverConfig, loggerFactory)
302+
: await Driver.CreateInitialized(driverConfig, loggerFactory);
287303
}
288304

289305
public override void Clear()
@@ -369,6 +385,8 @@ static YdbConnectionOption()
369385
AddOption(new YdbConnectionOption<int>(IntExtractor, (builder, maxReceiveMessageSize) =>
370386
builder.MaxReceiveMessageSize = maxReceiveMessageSize),
371387
"MaxReceiveMessageSize", "Max Receive Message Size");
388+
AddOption(new YdbConnectionOption<bool>(BoolExtractor, (builder, disableDiscovery) =>
389+
builder.DisableDiscovery = disableDiscovery), "DisableDiscovery", "Disable Discovery");
372390
}
373391

374392
private static void AddOption(YdbConnectionOption option, params string[] keys)

src/Ydb.Sdk/src/Services/Auth/StaticCredentialsAuthClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ private async Task<LoginResponse> Login()
7676

7777
try
7878
{
79-
await using var transport = new AuthGrpcChannelDriver(_config, _grpcChannelFactory, _loggerFactory);
79+
await using var transport = new DirectGrpcChannelDriver(_config, _grpcChannelFactory, _loggerFactory);
8080

8181
var response = await transport.UnaryCall(
8282
method: AuthService.LoginMethod,

src/Ydb.Sdk/src/Services/Query/SessionPool.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ internal sealed class SessionPool : SessionPool<Session>, IAsyncDisposable
2424
TransportTimeout = TimeSpan.FromMinutes(2)
2525
};
2626

27-
private readonly Driver _driver;
27+
private readonly IDriver _driver;
2828
private readonly bool _disposingDriver;
2929
private readonly ILogger<Session> _loggerSession;
3030

31-
internal SessionPool(Driver driver, int? maxSessionPool = null, bool disposingDriver = false)
31+
internal SessionPool(IDriver driver, int? maxSessionPool = null, bool disposingDriver = false)
3232
: base(driver.LoggerFactory.CreateLogger<SessionPool>(), maxSessionPool)
3333
{
3434
_driver = driver;
@@ -120,10 +120,10 @@ protected override async Task<Session> CreateSession()
120120

121121
internal class Session : SessionBase<Session>
122122
{
123-
internal Driver Driver { get; }
123+
internal IDriver Driver { get; }
124124

125125
internal Session(
126-
Driver driver,
126+
IDriver driver,
127127
SessionPool<Session> sessionPool,
128128
string sessionId,
129129
long nodeId,

src/Ydb.Sdk/src/Transport/AuthGrpcChannelDriver.cs renamed to src/Ydb.Sdk/src/Transport/DirectGrpcChannelDriver.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66

77
namespace Ydb.Sdk.Transport;
88

9-
internal class AuthGrpcChannelDriver : BaseDriver
9+
internal class DirectGrpcChannelDriver : BaseDriver
1010
{
1111
private readonly GrpcChannel _channel;
1212

13-
public AuthGrpcChannelDriver(
13+
public DirectGrpcChannelDriver(
1414
DriverConfig driverConfig,
1515
GrpcChannelFactory grpcChannelFactory,
1616
ILoggerFactory loggerFactory
@@ -19,11 +19,16 @@ ILoggerFactory loggerFactory
1919
endpoint: driverConfig.Endpoint,
2020
database: driverConfig.Database,
2121
customServerCertificates: driverConfig.CustomServerCertificates
22-
), loggerFactory, loggerFactory.CreateLogger<AuthGrpcChannelDriver>())
22+
), loggerFactory, loggerFactory.CreateLogger<DirectGrpcChannelDriver>())
2323
{
2424
_channel = grpcChannelFactory.CreateChannel(Config.Endpoint);
2525
}
2626

27+
public DirectGrpcChannelDriver(DriverConfig driverConfig, ILoggerFactory loggerFactory) :
28+
this(driverConfig, new GrpcChannelFactory(loggerFactory, driverConfig), loggerFactory)
29+
{
30+
}
31+
2732
protected override (string, GrpcChannel) GetChannel(long nodeId) => (Config.Endpoint, _channel);
2833

2934
protected override void OnRpcError(string endpoint, RpcException e)

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public void InitDefaultValues_WhenEmptyConstructorInvoke_ReturnDefaultConnection
2222
Assert.False(ydbConnectionStringBuilder.EnableMultipleHttp2Connections);
2323
Assert.Equal(64 * 1024 * 1024, ydbConnectionStringBuilder.MaxSendMessageSize);
2424
Assert.Equal(64 * 1024 * 1024, ydbConnectionStringBuilder.MaxReceiveMessageSize);
25+
Assert.False(ydbConnectionStringBuilder.DisableDiscovery);
2526
}
2627

2728
[Fact]
@@ -41,7 +42,8 @@ public void InitConnectionStringBuilder_WhenExpectedKeys_ReturnUpdatedConnection
4142
new YdbConnectionStringBuilder("Host=server;Port=2135;Database=/my/path;User=Kirill;UseTls=true;" +
4243
"KeepAlivePingDelay=30;KeepAlivePingTimeout=60;" +
4344
"EnableMultipleHttp2Connections=true;" +
44-
"MaxSendMessageSize=1000000;MaxReceiveMessageSize=1000000");
45+
"MaxSendMessageSize=1000000;MaxReceiveMessageSize=1000000" +
46+
"DisableDiscovery=true");
4547

4648
Assert.Equal(2135, connectionString.Port);
4749
Assert.Equal("server", connectionString.Host);
@@ -58,6 +60,7 @@ public void InitConnectionStringBuilder_WhenExpectedKeys_ReturnUpdatedConnection
5860
"KeepAlivePingDelay=30;KeepAlivePingTimeout=60;" +
5961
"EnableMultipleHttp2Connections=True;" +
6062
"MaxSendMessageSize=1000000;MaxReceiveMessageSize=1000000", connectionString.ConnectionString);
63+
Assert.True(connectionString.DisableDiscovery);
6164
}
6265

6366
[Fact]

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,16 @@ INSERT INTO {tableName}
202202
await ydbCommand.ExecuteNonQueryAsync();
203203
}
204204

205+
[Fact]
206+
public async Task DisableDiscovery_WhenPropertyIsTrue_SimpleWorking()
207+
{
208+
await using var connection = CreateConnection();
209+
connection.ConnectionString += ";DisableDiscovery=true";
210+
await connection.OpenAsync();
211+
Assert.True((bool)(await new YdbCommand(connection) { CommandText = "SELECT TRUE;" }.ExecuteScalarAsync())!);
212+
await YdbConnection.ClearPool(connection);
213+
}
214+
205215
private List<Task> GenerateTasks() => Enumerable.Range(0, 100).Select(async i =>
206216
{
207217
await using var connection = await CreateOpenConnectionAsync();

0 commit comments

Comments
 (0)