Skip to content

Commit 891c408

Browse files
KirillKurdyukovLiamHamsters
authored andcommitted
Fixed bug: Grpc.Core.StatusCode.Cancelled was mapped to server's Canceled status. (ydb-platform#478)
1 parent 17ad798 commit 891c408

File tree

6 files changed

+12
-14
lines changed

6 files changed

+12
-14
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+
- Fixed bug: Grpc.Core.StatusCode.Cancelled was mapped to server's Canceled status.
12
- ADO.NET: PoolingSessionSource 2.0 based on Npgsql pooling algorithm.
23
- Added new ADO.NET options:
34
- `MinSessionPool`: The minimum connection pool size.

src/Ydb.Sdk/src/Ado/Internal/StatusCodeUtils.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@ public static class StatusCodeUtils
77
internal static StatusCode Code(this Grpc.Core.Status rpcStatus) => rpcStatus.StatusCode switch
88
{
99
Grpc.Core.StatusCode.Unavailable => StatusCode.ClientTransportUnavailable,
10-
Grpc.Core.StatusCode.DeadlineExceeded => StatusCode.ClientTransportTimeout,
10+
Grpc.Core.StatusCode.DeadlineExceeded or Grpc.Core.StatusCode.Cancelled => StatusCode.ClientTransportTimeout,
1111
Grpc.Core.StatusCode.ResourceExhausted => StatusCode.ClientTransportResourceExhausted,
1212
Grpc.Core.StatusCode.Unimplemented => StatusCode.ClientTransportUnimplemented,
13-
Grpc.Core.StatusCode.Cancelled => StatusCode.Cancelled,
1413
_ => StatusCode.ClientTransportUnknown
1514
};
1615

src/Ydb.Sdk/src/Pool/SessionPool.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,12 +225,10 @@ internal void OnNotSuccessStatusCode(StatusCode code)
225225
{
226226
// ReSharper disable once InvertIf
227227
if (code is
228-
StatusCode.Cancelled or
229228
StatusCode.BadSession or
230229
StatusCode.SessionBusy or
231-
StatusCode.InternalError or
230+
StatusCode.SessionExpired or
232231
StatusCode.ClientTransportTimeout or
233-
StatusCode.Unavailable or
234232
StatusCode.ClientTransportUnavailable)
235233
{
236234
_logger.LogWarning("Session[{SessionId}] is deactivated. Reason StatusCode: {Code}", SessionId, code);

src/Ydb.Sdk/test/Ydb.Sdk.Ado.Specification.Tests/YdbCommandTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public override async Task ExecuteReaderAsync_is_canceled()
6060
await using var command = connection.CreateCommand();
6161
command.CommandText = "SELECT 1;";
6262
var task = command.ExecuteReaderAsync(CanceledToken);
63-
Assert.Equal(StatusCode.Cancelled,
63+
Assert.Equal(StatusCode.ClientTransportTimeout,
6464
(await Assert.ThrowsAnyAsync<YdbException>(() => task)).Code);
6565
}
6666

@@ -70,7 +70,7 @@ public override async Task ExecuteNonQueryAsync_is_canceled()
7070
await using var command = connection.CreateCommand();
7171
command.CommandText = "SELECT 1;";
7272
var task = command.ExecuteNonQueryAsync(CanceledToken);
73-
Assert.Equal(StatusCode.Cancelled,
73+
Assert.Equal(StatusCode.ClientTransportTimeout,
7474
(await Assert.ThrowsAnyAsync<YdbException>(() => task)).Code);
7575
}
7676

@@ -80,7 +80,7 @@ public override async Task ExecuteScalarAsync_is_canceled()
8080
await using var command = connection.CreateCommand();
8181
command.CommandText = "SELECT 1;";
8282
var task = command.ExecuteScalarAsync(CanceledToken);
83-
Assert.Equal(StatusCode.Cancelled,
83+
Assert.Equal(StatusCode.ClientTransportTimeout,
8484
(await Assert.ThrowsAnyAsync<YdbException>(() => task)).Code);
8585
}
8686
}

src/Ydb.Sdk/test/Ydb.Sdk.Ado.Tests/Internal/StatusCodeTestUtils.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class StatusCodeTestUtils
1111
[InlineData(Grpc.Core.StatusCode.DeadlineExceeded, StatusCode.ClientTransportTimeout)]
1212
[InlineData(Grpc.Core.StatusCode.ResourceExhausted, StatusCode.ClientTransportResourceExhausted)]
1313
[InlineData(Grpc.Core.StatusCode.Unimplemented, StatusCode.ClientTransportUnimplemented)]
14-
[InlineData(Grpc.Core.StatusCode.Cancelled, StatusCode.Cancelled)]
14+
[InlineData(Grpc.Core.StatusCode.Cancelled, StatusCode.ClientTransportTimeout)]
1515
public void Code_GrpcCoreStatusCodeConvertToStatusCode_Assert(
1616
Grpc.Core.StatusCode statusCode,
1717
StatusCode expectedStatusCode

src/Ydb.Sdk/test/Ydb.Sdk.Ado.Tests/YdbConnectionTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ public async Task YdbDataReader_WhenCancelTokenIsCanceled_ThrowYdbException()
238238
Assert.False(ydbDataReader.IsClosed);
239239
Assert.Equal(1, ydbDataReader.GetValue(0));
240240
Assert.Equal(ConnectionState.Open, connection.State);
241-
Assert.Equal(StatusCode.Cancelled,
241+
Assert.Equal(StatusCode.ClientTransportTimeout,
242242
(await Assert.ThrowsAsync<YdbException>(async () => await ydbDataReader.NextResultAsync(cts.Token))).Code);
243243
Assert.True(ydbDataReader.IsClosed);
244244
Assert.Equal(ConnectionState.Broken, connection.State);
@@ -254,7 +254,7 @@ public async Task YdbDataReader_WhenCancelTokenIsCanceled_ThrowYdbException()
254254
Assert.Equal(1, ydbDataReader.GetValue(0));
255255
Assert.False(ydbDataReader.IsClosed);
256256

257-
Assert.Equal(StatusCode.Cancelled,
257+
Assert.Equal(StatusCode.ClientTransportTimeout,
258258
(await Assert.ThrowsAsync<YdbException>(async () => await ydbDataReader.NextResultAsync(cts.Token))).Code);
259259
Assert.True(ydbDataReader.IsClosed);
260260
Assert.Equal(ConnectionState.Broken, connection.State);
@@ -268,17 +268,17 @@ public async Task ExecuteMethods_WhenCancelTokenIsCanceled_ConnectionIsBroken()
268268
using var cts = new CancellationTokenSource();
269269
cts.Cancel();
270270

271-
Assert.Equal(StatusCode.Cancelled,
271+
Assert.Equal(StatusCode.ClientTransportTimeout,
272272
(await Assert.ThrowsAsync<YdbException>(async () => await command.ExecuteReaderAsync(cts.Token))).Code);
273273
Assert.Equal(ConnectionState.Broken, connection.State);
274274
// ReSharper disable once MethodSupportsCancellation
275275
await connection.OpenAsync();
276-
Assert.Equal(StatusCode.Cancelled,
276+
Assert.Equal(StatusCode.ClientTransportTimeout,
277277
(await Assert.ThrowsAsync<YdbException>(async () => await command.ExecuteScalarAsync(cts.Token))).Code);
278278
Assert.Equal(ConnectionState.Broken, connection.State);
279279
// ReSharper disable once MethodSupportsCancellation
280280
await connection.OpenAsync();
281-
Assert.Equal(StatusCode.Cancelled,
281+
Assert.Equal(StatusCode.ClientTransportTimeout,
282282
(await Assert.ThrowsAsync<YdbException>(async () => await command.ExecuteNonQueryAsync(cts.Token))).Code);
283283
Assert.Equal(ConnectionState.Broken, connection.State);
284284
}

0 commit comments

Comments
 (0)