Skip to content

Commit 8c88e2e

Browse files
Delete ClientBase.cs (#85)
* Make ClientBase abstract class * Delete ClientBase.cs * fix linter * fix linter
1 parent c9f4a4f commit 8c88e2e

27 files changed

+193
-161
lines changed

src/Ydb.Sdk/src/Client/ClientBase.cs

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/Ydb.Sdk/src/Driver.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ public static async Task<Driver> CreateInitialized(DriverConfig config, ILoggerF
4040

4141
public ILoggerFactory LoggerFactory { get; }
4242

43+
~Driver()
44+
{
45+
Dispose(_disposed);
46+
}
47+
4348
public void Dispose()
4449
{
4550
Dispose(true);

src/Ydb.Sdk/src/RequestSettings.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
namespace Ydb.Sdk;
1+
using Google.Protobuf.WellKnownTypes;
2+
using Ydb.Operations;
3+
4+
namespace Ydb.Sdk;
25

36
public class RequestSettings
47
{
@@ -10,4 +13,16 @@ public class RequestSettings
1013
public class OperationRequestSettings : RequestSettings
1114
{
1215
public TimeSpan? OperationTimeout { get; set; }
16+
17+
internal OperationParams MakeOperationParams()
18+
{
19+
var opParams = new OperationParams();
20+
21+
if (OperationTimeout != null)
22+
{
23+
opParams.OperationTimeout = Duration.FromTimeSpan(OperationTimeout.Value);
24+
}
25+
26+
return opParams;
27+
}
1328
}
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
using Ydb.Sdk.Client;
2-
31
namespace Ydb.Sdk.Services.Auth;
42

5-
public partial class AuthClient : ClientBase
3+
public partial class AuthClient
64
{
7-
public AuthClient(Driver driver) : base(driver)
5+
private readonly Driver _driver;
6+
7+
public AuthClient(Driver driver)
88
{
9+
_driver = driver;
910
}
1011
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Ydb.Auth;
22
using Ydb.Auth.V1;
33
using Ydb.Sdk.Client;
4+
using Ydb.Sdk.Services.Operations;
45

56
namespace Ydb.Sdk.Services.Auth;
67

@@ -39,7 +40,7 @@ public async Task<LoginResponse> Login(string user, string? password, LoginSetti
3940
settings ??= new LoginSettings();
4041
var request = new LoginRequest
4142
{
42-
OperationParams = MakeOperationParams(settings),
43+
OperationParams = settings.MakeOperationParams(),
4344
User = user
4445
};
4546
if (password is not null)
@@ -49,13 +50,13 @@ public async Task<LoginResponse> Login(string user, string? password, LoginSetti
4950

5051
try
5152
{
52-
var response = await Driver.UnaryCall(
53+
var response = await _driver.UnaryCall(
5354
method: AuthService.LoginMethod,
5455
request: request,
5556
settings: settings
5657
);
5758

58-
var status = UnpackOperation(response.Data.Operation, out LoginResult? resultProto);
59+
var status = response.Data.Operation.TryUnpack(out LoginResult? resultProto);
5960

6061
LoginResponse.ResultData? result = null;
6162

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using Google.Protobuf;
2+
using Ydb.Sdk.Client;
3+
4+
namespace Ydb.Sdk.Services.Operations;
5+
6+
internal static class OperationExtensions
7+
{
8+
internal static Status Unpack(this Ydb.Operations.Operation operationProto)
9+
{
10+
var operation = ClientOperation.FromProto(operationProto);
11+
operation.EnsureReady();
12+
13+
return operation.Status;
14+
}
15+
16+
internal static Status TryUnpack<TResult>(this Ydb.Operations.Operation operationProto, out TResult? result)
17+
where TResult : class, IMessage, new()
18+
{
19+
var operation = ClientOperation.FromProto(operationProto);
20+
operation.EnsureReady();
21+
22+
var status = operation.Status;
23+
result = null;
24+
25+
if (operation.HasResult)
26+
{
27+
result = operation.UnpackResult<TResult>();
28+
}
29+
30+
return status;
31+
}
32+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public QueryClient(Driver driver, QueryClientConfig? config = null) : base(drive
2727
{
2828
config ??= new QueryClientConfig();
2929

30-
_logger = Driver.LoggerFactory.CreateLogger<QueryClient>();
30+
_logger = driver.LoggerFactory.CreateLogger<QueryClient>();
3131

3232
_sessionPool = new SessionPool(driver, config.SessionPoolConfig);
3333
}

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

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
using Microsoft.Extensions.Logging;
22
using Ydb.Query;
33
using Ydb.Query.V1;
4-
using Ydb.Sdk.Client;
54
using Ydb.Sdk.Value;
65

76
namespace Ydb.Sdk.Services.Query;
87

9-
public abstract class QueryClientGrpc : ClientBase
8+
public abstract class QueryClientGrpc
109
{
11-
private protected QueryClientGrpc(Driver driver) : base(driver)
10+
private readonly Driver _driver;
11+
12+
private protected QueryClientGrpc(Driver driver)
1213
{
13-
Driver.LoggerFactory.CreateLogger<QueryClient>();
14+
_driver = driver;
15+
_driver.LoggerFactory.CreateLogger<QueryClient>();
1416
}
1517

1618
internal async Task<CreateSessionResponse> CreateSession(CreateSessionSettings? settings = null)
@@ -20,7 +22,7 @@ internal async Task<CreateSessionResponse> CreateSession(CreateSessionSettings?
2022

2123
try
2224
{
23-
var response = await Driver.UnaryCall(
25+
var response = await _driver.UnaryCall(
2426
method: QueryService.CreateSessionMethod,
2527
request: request,
2628
settings: settings);
@@ -31,7 +33,7 @@ internal async Task<CreateSessionResponse> CreateSession(CreateSessionSettings?
3133

3234
if (status.IsSuccess)
3335
{
34-
result = CreateSessionResponse.ResultData.FromProto(response.Data, Driver, response.UsedEndpoint);
36+
result = CreateSessionResponse.ResultData.FromProto(response.Data, _driver, response.UsedEndpoint);
3537
}
3638

3739
return new CreateSessionResponse(status, result);
@@ -52,11 +54,11 @@ internal async Task<DeleteSessionResponse> DeleteSession(string sessionId, Delet
5254

5355
try
5456
{
55-
var response = await Driver.UnaryCall(
57+
var response = await _driver.UnaryCall(
5658
method: QueryService.DeleteSessionMethod,
5759
request: request,
58-
settings: settings);
59-
60+
settings: settings
61+
);
6062

6163
return DeleteSessionResponse.FromProto(response.Data);
6264
}
@@ -72,7 +74,7 @@ internal SessionStateStream AttachSession(string sessionId, AttachSessionSetting
7274

7375
var request = new AttachSessionRequest { SessionId = sessionId };
7476

75-
var streamIterator = Driver.StreamCall(
77+
var streamIterator = _driver.StreamCall(
7678
method: QueryService.AttachSessionMethod,
7779
request: request,
7880
settings: settings
@@ -90,11 +92,12 @@ private protected async Task<BeginTransactionResponse> BeginTransaction(
9092
var request = new BeginTransactionRequest { SessionId = sessionId, TxSettings = tx.ToProto().BeginTx };
9193
try
9294
{
93-
var response = await Driver.UnaryCall(
95+
var response = await _driver.UnaryCall(
9496
QueryService.BeginTransactionMethod,
9597
request: request,
9698
settings: settings
9799
);
100+
98101
return BeginTransactionResponse.FromProto(response.Data, this, sessionId);
99102
}
100103
catch (Driver.TransportException e)
@@ -114,11 +117,12 @@ private protected async Task<CommitTransactionResponse> CommitTransaction(
114117

115118
try
116119
{
117-
var response = await Driver.UnaryCall(
120+
var response = await _driver.UnaryCall(
118121
QueryService.CommitTransactionMethod,
119122
request: request,
120123
settings: settings
121124
);
125+
122126
return CommitTransactionResponse.FromProto(response.Data);
123127
}
124128
catch (Driver.TransportException e)
@@ -137,7 +141,7 @@ private protected async Task<RollbackTransactionResponse> RollbackTransaction(
137141
var request = new RollbackTransactionRequest { SessionId = sessionId, TxId = tx.TxId };
138142
try
139143
{
140-
var response = await Driver.UnaryCall(
144+
var response = await _driver.UnaryCall(
141145
QueryService.RollbackTransactionMethod,
142146
request: request,
143147
settings: settings
@@ -172,7 +176,7 @@ protected internal ExecuteQueryStream ExecuteQuery(
172176

173177
request.Parameters.Add(parameters.ToDictionary(p => p.Key, p => p.Value.GetProto()));
174178

175-
var streamIterator = Driver.StreamCall(
179+
var streamIterator = _driver.StreamCall(
176180
method: QueryService.ExecuteQueryMethod,
177181
request: request,
178182
settings: settings);

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

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,20 @@ namespace Ydb.Sdk.Services.Query;
66
using GetSessionResponse = GetSessionResponse<Session>;
77
using NoPool = NoPool<Session>;
88

9-
internal class SessionPool : SessionPoolBase<Session, QueryClient>
9+
internal class SessionPool : SessionPoolBase<Session>
1010
{
1111
private readonly Dictionary<string, CancellationTokenSource> _attachedSessions = new();
12+
private readonly QueryClient _client;
1213

1314
public SessionPool(Driver driver, SessionPoolConfig config) :
14-
base(
15-
driver: driver,
16-
config: config,
17-
client: new QueryClient(driver, new NoPool()),
18-
logger: driver.LoggerFactory.CreateLogger<SessionPool>())
15+
base(driver, config, driver.LoggerFactory.CreateLogger<SessionPool>())
1916
{
17+
_client = new QueryClient(driver, new NoPool());
2018
}
2119

2220
private protected override async Task<GetSessionResponse> CreateSession()
2321
{
24-
var createSessionResponse = await Client.CreateSession(new CreateSessionSettings
22+
var createSessionResponse = await _client.CreateSession(new CreateSessionSettings
2523
{ TransportTimeout = Config.CreateSessionTimeout });
2624

2725
lock (Lock)
@@ -54,7 +52,7 @@ private protected override async Task<GetSessionResponse> CreateSession()
5452

5553
private async Task AttachAndMonitor(string sessionId)
5654
{
57-
var stream = Client.AttachSession(sessionId);
55+
var stream = _client.AttachSession(sessionId);
5856

5957
var cts = new CancellationTokenSource();
6058
cts.CancelAfter(Config.CreateSessionTimeout);
@@ -157,7 +155,7 @@ private protected override async Task DeleteSession(string id)
157155
{
158156
DetachSession(id);
159157

160-
await Client.DeleteSession(id, new DeleteSessionSettings
158+
await _client.DeleteSession(id, new DeleteSessionSettings
161159
{
162160
TransportTimeout = SessionBase.DeleteSessionTimeout
163161
});

src/Ydb.Sdk/src/Services/Scheme/SchemeClient.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Ydb.Scheme;
22
using Ydb.Scheme.V1;
33
using Ydb.Sdk.Client;
4+
using Ydb.Sdk.Services.Operations;
45

56
namespace Ydb.Sdk.Services.Scheme;
67

@@ -117,11 +118,13 @@ internal static ResultData FromProto(ListDirectoryResult resultProto)
117118
}
118119
}
119120

120-
public class SchemeClient : ClientBase
121+
public class SchemeClient
121122
{
123+
private readonly Driver _driver;
124+
122125
public SchemeClient(Driver driver)
123-
: base(driver)
124126
{
127+
_driver = driver;
125128
}
126129

127130
public async Task<ListDirectoryResponse> ListDirectory(string path, ListDirectorySettings? settings = null)
@@ -130,19 +133,19 @@ public async Task<ListDirectoryResponse> ListDirectory(string path, ListDirector
130133

131134
var request = new ListDirectoryRequest
132135
{
133-
OperationParams = MakeOperationParams(settings),
136+
OperationParams = settings.MakeOperationParams(),
134137
Path = path
135138
};
136139

137140
try
138141
{
139-
var response = await Driver.UnaryCall(
142+
var response = await _driver.UnaryCall(
140143
method: SchemeService.ListDirectoryMethod,
141144
request: request,
142-
settings: settings);
145+
settings: settings
146+
);
143147

144-
ListDirectoryResult? resultProto;
145-
var status = UnpackOperation(response.Data.Operation, out resultProto);
148+
var status = response.Data.Operation.TryUnpack(out ListDirectoryResult? resultProto);
146149

147150
ListDirectoryResponse.ResultData? result = null;
148151
if (status.IsSuccess && resultProto != null)

0 commit comments

Comments
 (0)