Skip to content

Commit 3007497

Browse files
dev: added sdk version header to any RPC call & fixes linter checks (#308)
1 parent d057e29 commit 3007497

File tree

16 files changed

+99
-107
lines changed

16 files changed

+99
-107
lines changed

slo/src/TableService/SloTableContext.cs

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@ public class SloTableContext : SloTableContext<TableClient>
1414

1515
protected override async Task Create(TableClient client, string createTableSql, int operationTimeout)
1616
{
17-
var response = await client.SessionExec(
18-
async session => await session.ExecuteSchemeQuery(createTableSql,
19-
new ExecuteSchemeQuerySettings { OperationTimeout = TimeSpan.FromSeconds(operationTimeout) }));
17+
var response = await client.SessionExec(async session => await session.ExecuteSchemeQuery(createTableSql,
18+
new ExecuteSchemeQuerySettings { OperationTimeout = TimeSpan.FromSeconds(operationTimeout) }));
2019

2120
response.Status.EnsureSuccess();
2221
}
@@ -29,21 +28,20 @@ protected override async Task Create(TableClient client, string createTableSql,
2928

3029
var attempts = 0;
3130

32-
var response = await tableClient.SessionExec(
33-
async session =>
31+
var response = await tableClient.SessionExec(async session =>
32+
{
33+
attempts++;
34+
var response = await session.ExecuteDataQuery(upsertSql, _txControl, parameters, querySettings);
35+
if (response.Status.IsSuccess)
3436
{
35-
attempts++;
36-
var response = await session.ExecuteDataQuery(upsertSql, _txControl, parameters, querySettings);
37-
if (response.Status.IsSuccess)
38-
{
39-
return response;
40-
}
37+
return response;
38+
}
4139

4240

43-
errorsGauge?.WithLabels(response.Status.StatusCode.ToString(), "retried").Inc();
41+
errorsGauge?.WithLabels(response.Status.StatusCode.ToString(), "retried").Inc();
4442

45-
return response;
46-
});
43+
return response;
44+
});
4745

4846
return (attempts, response.Status.StatusCode);
4947
}
@@ -56,22 +54,21 @@ protected override async Task Create(TableClient client, string createTableSql,
5654

5755
var attempts = 0;
5856

59-
var response = (ExecuteDataQueryResponse)await tableClient.SessionExec(
60-
async session =>
57+
var response = (ExecuteDataQueryResponse)await tableClient.SessionExec(async session =>
58+
{
59+
attempts++;
60+
var response = await session.ExecuteDataQuery(selectSql, _txControl, parameters, querySettings);
61+
if (response.Status.IsSuccess)
6162
{
62-
attempts++;
63-
var response = await session.ExecuteDataQuery(selectSql, _txControl, parameters, querySettings);
64-
if (response.Status.IsSuccess)
65-
{
66-
return response;
67-
}
63+
return response;
64+
}
6865

69-
Logger.LogWarning("{}", response.Status.ToString());
66+
Logger.LogWarning("{}", response.Status.ToString());
7067

71-
errorsGauge?.WithLabels(response.Status.StatusCode.StatusName(), "retried").Inc();
68+
errorsGauge?.WithLabels(response.Status.StatusCode.StatusName(), "retried").Inc();
7269

73-
return response;
74-
});
70+
return response;
71+
});
7572

7673
return (attempts, response.Status.StatusCode,
7774
response.Status.IsSuccess ? response.Result.ResultSets[0].Rows[0][0].GetOptionalInt32() : null);

src/EFCore.Ydb/test/EntityFrameworkCore.Ydb.FunctionalTests/Migrations/YdbMigrationsSqlGeneratorTest.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -150,17 +150,16 @@ public override void InsertDataOperation_required_args_multiple_rows()
150150
public override void InsertDataOperation_throws_for_unsupported_column_types()
151151
=> Assert.Equal(
152152
RelationalStrings.UnsupportedDataOperationStoreType("foo", "dbo.People.First Name"),
153-
Assert.Throws<InvalidOperationException>(
154-
() =>
155-
Generate(
156-
new InsertDataOperation
157-
{
158-
Table = "People",
159-
Schema = "dbo",
160-
Columns = ["First Name"],
161-
ColumnTypes = ["foo"],
162-
Values = new object?[,] { { null } }
163-
})).Message);
153+
Assert.Throws<InvalidOperationException>(() =>
154+
Generate(
155+
new InsertDataOperation
156+
{
157+
Table = "People",
158+
Schema = "dbo",
159+
Columns = ["First Name"],
160+
ColumnTypes = ["foo"],
161+
Values = new object?[,] { { null } }
162+
})).Message);
164163

165164
public override void DeleteDataOperation_all_args()
166165
{

src/Ydb.Sdk/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
- Added `x-ydb-sdk-build-info` header to any RPC call.
2+
13
## v0.16.0
24

35
- **Breaking Change**: `Ydb.Sdk.Yc.Auth` version <= 0.1.0 is not compatible with newer versions.

src/Ydb.Sdk/src/Driver.cs

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Collections.Immutable;
2-
using System.Reflection;
32
using Grpc.Core;
43
using Grpc.Net.Client;
54
using Microsoft.Extensions.Logging;
@@ -16,7 +15,6 @@ public sealed class Driver : BaseDriver
1615
{
1716
private const int AttemptDiscovery = 10;
1817

19-
private readonly string _sdkInfo;
2018
private readonly GrpcChannelFactory _grpcChannelFactory;
2119
private readonly EndpointPool _endpointPool;
2220
private readonly ChannelPool<GrpcChannel> _channelPool;
@@ -35,10 +33,6 @@ public Driver(DriverConfig config, ILoggerFactory? loggerFactory = null)
3533
_grpcChannelFactory
3634
);
3735

38-
var version = Assembly.GetExecutingAssembly().GetName().Version;
39-
var versionStr = version is null ? "unknown" : version.ToString(3);
40-
_sdkInfo = $"ydb-dotnet-sdk/{versionStr}";
41-
4236
CredentialsProvider = Config.User != null
4337
? new CachedCredentialsProvider(
4438
new StaticCredentialsAuthClient(config, _grpcChannelFactory, LoggerFactory),
@@ -134,12 +128,10 @@ private async Task<Status> DiscoverEndpoints()
134128
TransportTimeout = Config.EndpointDiscoveryTimeout
135129
};
136130

137-
var options = await GetCallOptions(requestSettings);
138-
options.Headers?.Add(Metadata.RpcSdkInfoHeader, _sdkInfo);
139-
140131
var response = await client.ListEndpointsAsync(
141132
request: request,
142-
options: options);
133+
options: await GetCallOptions(requestSettings)
134+
);
143135

144136
if (!response.Operation.Ready)
145137
{
@@ -168,7 +160,8 @@ private async Task<Status> DiscoverEndpoints()
168160

169161
Logger.LogDebug(
170162
"Successfully discovered endpoints: {EndpointsCount}, self location: {SelfLocation}, sdk info: {SdkInfo}",
171-
resultProto.Endpoints.Count, resultProto.SelfLocation, _sdkInfo);
163+
resultProto.Endpoints.Count, resultProto.SelfLocation, Config.SdkVersion
164+
);
172165

173166
_endpointPool.Reset(resultProto.Endpoints
174167
.Select(endpointSettings => new EndpointSettings(
@@ -189,15 +182,16 @@ private async Task PeriodicDiscovery()
189182
try
190183
{
191184
await Task.Delay(Config.EndpointDiscoveryInterval);
185+
192186
_ = await DiscoverEndpoints();
193187
}
194188
catch (RpcException e)
195189
{
196-
Logger.LogWarning($"RPC error during endpoint discovery: {e.Status}");
190+
Logger.LogWarning("RPC error during endpoint discovery: {Status}", e.Status);
197191
}
198192
catch (Exception e)
199193
{
200-
Logger.LogError($"Unexpected exception during session pool periodic check: {e}");
194+
Logger.LogError(e, "Unexpected exception during session pool periodic check");
201195
}
202196
}
203197
}

src/Ydb.Sdk/src/DriverConfig.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Security.Cryptography.X509Certificates;
1+
using System.Reflection;
2+
using System.Security.Cryptography.X509Certificates;
23
using Ydb.Sdk.Auth;
34

45
namespace Ydb.Sdk;
@@ -21,6 +22,7 @@ public class DriverConfig
2122
internal X509Certificate2Collection CustomServerCertificates { get; } = new();
2223
internal TimeSpan EndpointDiscoveryInterval = TimeSpan.FromMinutes(1);
2324
internal TimeSpan EndpointDiscoveryTimeout = TimeSpan.FromSeconds(10);
25+
internal string SdkVersion { get; }
2426

2527
public DriverConfig(
2628
string endpoint,
@@ -42,6 +44,10 @@ public DriverConfig(
4244
{
4345
CustomServerCertificates.AddRange(customServerCertificates);
4446
}
47+
48+
var version = Assembly.GetExecutingAssembly().GetName().Version;
49+
var versionStr = version is null ? "unknown" : version.ToString(3);
50+
SdkVersion = $"ydb-dotnet-sdk/{versionStr}";
4551
}
4652

4753
private static string FormatEndpoint(string endpoint)

src/Ydb.Sdk/src/IDriver.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ protected async ValueTask<CallOptions> GetCallOptions(GrpcRequestSettings settin
138138
{
139139
var meta = new Grpc.Core.Metadata
140140
{
141-
{ Metadata.RpcDatabaseHeader, Config.Database }
141+
{ Metadata.RpcDatabaseHeader, Config.Database },
142+
{ Metadata.RpcSdkInfoHeader, Config.SdkVersion }
142143
};
143144

144145
if (CredentialsProvider != null)

src/Ydb.Sdk/src/Services/Topic/Reader/Reader.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -468,8 +468,8 @@ public async Task CommitOffsetRange(OffsetsRange offsetsRange, long partitionSes
468468
{
469469
var tcsCommit = new TaskCompletionSource();
470470

471-
await using var register = _lifecycleReaderSessionCts.Token.Register(
472-
() => tcsCommit.TrySetException(new ReaderException($"ReaderSession[{SessionId}] was deactivated"))
471+
await using var register = _lifecycleReaderSessionCts.Token.Register(() =>
472+
tcsCommit.TrySetException(new ReaderException($"ReaderSession[{SessionId}] was deactivated"))
473473
);
474474

475475
var commitSending = new CommitSending(offsetsRange, tcsCommit);

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

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -283,18 +283,18 @@ public void GetChars_WhenSelectText_MoveCharsToBuffer()
283283
Assert.Equal($"dataOffset must be between 0 and {int.MaxValue}",
284284
Assert.Throws<IndexOutOfRangeException>(() => ydbDataReader.GetChars(0, -1, null, 0, 6)).Message);
285285
Assert.Equal($"dataOffset must be between 0 and {int.MaxValue}",
286-
Assert.Throws<IndexOutOfRangeException>(
287-
() => ydbDataReader.GetChars(0, long.MaxValue, null, 0, 6)).Message);
286+
Assert.Throws<IndexOutOfRangeException>(() =>
287+
ydbDataReader.GetChars(0, long.MaxValue, null, 0, 6)).Message);
288288

289-
Assert.Equal("bufferOffset must be between 0 and 10", Assert.Throws<IndexOutOfRangeException>(
290-
() => ydbDataReader.GetChars(0, 0, bufferChars, -1, 6)).Message);
291-
Assert.Equal("bufferOffset must be between 0 and 10", Assert.Throws<IndexOutOfRangeException>(
292-
() => ydbDataReader.GetChars(0, 0, bufferChars, -1, 6)).Message);
289+
Assert.Equal("bufferOffset must be between 0 and 10",
290+
Assert.Throws<IndexOutOfRangeException>(() => ydbDataReader.GetChars(0, 0, bufferChars, -1, 6)).Message);
291+
Assert.Equal("bufferOffset must be between 0 and 10",
292+
Assert.Throws<IndexOutOfRangeException>(() => ydbDataReader.GetChars(0, 0, bufferChars, -1, 6)).Message);
293293

294-
Assert.Equal("length must be between 0 and 10", Assert.Throws<IndexOutOfRangeException>(
295-
() => ydbDataReader.GetChars(0, 0, bufferChars, 3, -1)).Message);
296-
Assert.Equal("bufferOffset must be between 0 and 5", Assert.Throws<IndexOutOfRangeException>(
297-
() => ydbDataReader.GetChars(0, 0, bufferChars, 8, 5)).Message);
294+
Assert.Equal("length must be between 0 and 10",
295+
Assert.Throws<IndexOutOfRangeException>(() => ydbDataReader.GetChars(0, 0, bufferChars, 3, -1)).Message);
296+
Assert.Equal("bufferOffset must be between 0 and 5",
297+
Assert.Throws<IndexOutOfRangeException>(() => ydbDataReader.GetChars(0, 0, bufferChars, 8, 5)).Message);
298298

299299
Assert.Equal(6, ydbDataReader.GetChars(0, 0, bufferChars, 4, 6));
300300
checkBuffer[4] = 'a';
@@ -330,19 +330,18 @@ public void GetBytes_WhenSelectBytes_MoveBytesToBuffer()
330330
Assert.Equal(7, ydbDataReader.GetBytes(0, 4, null, 0, 6));
331331
Assert.Equal($"dataOffset must be between 0 and {int.MaxValue}",
332332
Assert.Throws<IndexOutOfRangeException>(() => ydbDataReader.GetBytes(0, -1, null, 0, 6)).Message);
333-
Assert.Equal($"dataOffset must be between 0 and {int.MaxValue}",
334-
Assert.Throws<IndexOutOfRangeException>(
335-
() => ydbDataReader.GetBytes(0, long.MaxValue, null, 0, 6)).Message);
336-
337-
Assert.Equal("bufferOffset must be between 0 and 10", Assert.Throws<IndexOutOfRangeException>(
338-
() => ydbDataReader.GetBytes(0, 0, bufferChars, -1, 6)).Message);
339-
Assert.Equal("bufferOffset must be between 0 and 10", Assert.Throws<IndexOutOfRangeException>(
340-
() => ydbDataReader.GetBytes(0, 0, bufferChars, -1, 6)).Message);
341-
342-
Assert.Equal("length must be between 0 and 10", Assert.Throws<IndexOutOfRangeException>(
343-
() => ydbDataReader.GetBytes(0, 0, bufferChars, 3, -1)).Message);
344-
Assert.Equal("bufferOffset must be between 0 and 5", Assert.Throws<IndexOutOfRangeException>(
345-
() => ydbDataReader.GetBytes(0, 0, bufferChars, 8, 5)).Message);
333+
Assert.Equal($"dataOffset must be between 0 and {int.MaxValue}", Assert.Throws<IndexOutOfRangeException>(() =>
334+
ydbDataReader.GetBytes(0, long.MaxValue, null, 0, 6)).Message);
335+
336+
Assert.Equal("bufferOffset must be between 0 and 10",
337+
Assert.Throws<IndexOutOfRangeException>(() => ydbDataReader.GetBytes(0, 0, bufferChars, -1, 6)).Message);
338+
Assert.Equal("bufferOffset must be between 0 and 10", Assert.Throws<IndexOutOfRangeException>(() =>
339+
ydbDataReader.GetBytes(0, 0, bufferChars, -1, 6)).Message);
340+
341+
Assert.Equal("length must be between 0 and 10", Assert.Throws<IndexOutOfRangeException>(() =>
342+
ydbDataReader.GetBytes(0, 0, bufferChars, 3, -1)).Message);
343+
Assert.Equal("bufferOffset must be between 0 and 5", Assert.Throws<IndexOutOfRangeException>(() =>
344+
ydbDataReader.GetBytes(0, 0, bufferChars, 8, 5)).Message);
346345

347346
Assert.Equal(6, ydbDataReader.GetBytes(0, 0, bufferChars, 4, 6));
348347
checkBuffer[4] = (byte)'a';

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ public void InitDefaultValues_WhenEmptyConstructorInvoke_ReturnDefaultConnection
2424
[Fact]
2525
public void InitConnectionStringBuilder_WhenUnexpectedKey_ThrowException()
2626
{
27-
Assert.Equal("Key doesn't support: unexpectedkey", Assert.Throws<ArgumentException>(
28-
() => new YdbConnectionStringBuilder("UnexpectedKey=123;Port=2135;")).Message);
27+
Assert.Equal("Key doesn't support: unexpectedkey", Assert.Throws<ArgumentException>(() =>
28+
new YdbConnectionStringBuilder("UnexpectedKey=123;Port=2135;")).Message);
2929

30-
Assert.Equal("Key doesn't support: unexpectedkey", Assert.Throws<ArgumentException>(
31-
() => new YdbConnectionStringBuilder { ConnectionString = "UnexpectedKey=123;Port=2135;" }).Message);
30+
Assert.Equal("Key doesn't support: unexpectedkey", Assert.Throws<ArgumentException>(() =>
31+
new YdbConnectionStringBuilder { ConnectionString = "UnexpectedKey=123;Port=2135;" }).Message);
3232
}
3333

3434
[Fact]

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,8 @@ public async Task BasedIteration_WhenNotCallMethodRead_ThrowException()
4848
public async Task CreateYdbDataReader_WhenAbortedStatus_ThrowException()
4949
{
5050
var statuses = new List<Status>();
51-
Assert.Equal("Status: Aborted", (await Assert.ThrowsAsync<YdbException>(
52-
() => YdbDataReader.CreateYdbDataReader(SingleEnumeratorFailed, statuses.Add)))
53-
.Message);
51+
Assert.Equal("Status: Aborted", (await Assert.ThrowsAsync<YdbException>(() =>
52+
YdbDataReader.CreateYdbDataReader(SingleEnumeratorFailed, statuses.Add))).Message);
5453
Assert.Single(statuses);
5554
Assert.Equal(StatusCode.Aborted, statuses[0].StatusCode);
5655
}

0 commit comments

Comments
 (0)