@@ -20,9 +20,9 @@ internal class PoolingSession : IPoolingSession
2020 private static readonly TimeSpan DeleteSessionTimeout = TimeSpan . FromSeconds ( 5 ) ;
2121 private static readonly CreateSessionRequest CreateSessionRequest = new ( ) ;
2222
23- private readonly IDriver _driver ;
2423 private readonly PoolingSessionSource _poolingSessionSource ;
2524 private readonly ILogger < PoolingSession > _logger ;
25+ private readonly CancellationTokenSource _attachStreamLifecycleCts = new ( ) ;
2626
2727 private volatile bool _isBroken = true ;
2828
@@ -31,6 +31,7 @@ internal class PoolingSession : IPoolingSession
3131 private string SessionId { get ; set ; } = string . Empty ;
3232 private long NodeId { get ; set ; }
3333
34+ public IDriver Driver { get ; }
3435 public bool IsBroken => _isBroken ;
3536
3637 internal PoolingSession (
@@ -40,10 +41,10 @@ internal PoolingSession(
4041 ILogger < PoolingSession > logger
4142 )
4243 {
43- _driver = driver ;
4444 _poolingSessionSource = poolingSessionSource ;
4545 _disableServerBalancer = disableServerBalancer ;
4646 _logger = logger ;
47+ Driver = driver ;
4748 }
4849
4950 public ValueTask < IServerStream < ExecuteQueryResponsePart > > ExecuteQuery (
@@ -65,15 +66,15 @@ public ValueTask<IServerStream<ExecuteQueryResponsePart>> ExecuteQuery(
6566 } ;
6667 request . Parameters . Add ( parameters . ToDictionary ( p => p . Key , p => p . Value . GetProto ( ) ) ) ;
6768
68- return _driver . ServerStreamCall ( QueryService . ExecuteQueryMethod , request , settings ) ;
69+ return Driver . ServerStreamCall ( QueryService . ExecuteQueryMethod , request , settings ) ;
6970 }
7071
7172 public async Task CommitTransaction (
7273 string txId ,
7374 CancellationToken cancellationToken = default
7475 )
7576 {
76- var response = await _driver . UnaryCall (
77+ var response = await Driver . UnaryCall (
7778 QueryService . CommitTransactionMethod ,
7879 new CommitTransactionRequest { SessionId = SessionId , TxId = txId } ,
7980 new GrpcRequestSettings { CancellationToken = cancellationToken , NodeId = NodeId }
@@ -90,7 +91,7 @@ public async Task RollbackTransaction(
9091 CancellationToken cancellationToken = default
9192 )
9293 {
93- var response = await _driver . UnaryCall (
94+ var response = await Driver . UnaryCall (
9495 QueryService . RollbackTransactionMethod ,
9596 new RollbackTransactionRequest { SessionId = SessionId , TxId = txId } ,
9697 new GrpcRequestSettings { CancellationToken = cancellationToken , NodeId = NodeId }
@@ -126,7 +127,7 @@ public async Task Open(CancellationToken cancellationToken)
126127 requestSettings . ClientCapabilities . Add ( SessionBalancer ) ;
127128 }
128129
129- var response = await _driver . UnaryCall ( QueryService . CreateSessionMethod , CreateSessionRequest , requestSettings ) ;
130+ var response = await Driver . UnaryCall ( QueryService . CreateSessionMethod , CreateSessionRequest , requestSettings ) ;
130131
131132 if ( response . Status . IsNotSuccess ( ) )
132133 {
@@ -143,7 +144,7 @@ public async Task Open(CancellationToken cancellationToken)
143144 {
144145 try
145146 {
146- using var stream = await _driver . ServerStreamCall (
147+ using var stream = await Driver . ServerStreamCall (
147148 QueryService . AttachSessionMethod ,
148149 new AttachSessionRequest { SessionId = SessionId } ,
149150 new GrpcRequestSettings { NodeId = NodeId }
@@ -166,10 +167,12 @@ public async Task Open(CancellationToken cancellationToken)
166167
167168 completeTask . SetResult ( ) ;
168169
170+ var lifecycleAttachToken = _attachStreamLifecycleCts . Token ;
171+
169172 try
170173 {
171174 // ReSharper disable once MethodSupportsCancellation
172- while ( await stream . MoveNextAsync ( ) )
175+ while ( await stream . MoveNextAsync ( lifecycleAttachToken ) )
173176 {
174177 var sessionState = stream . Current ;
175178
@@ -220,14 +223,10 @@ public async Task DeleteSession()
220223 {
221224 try
222225 {
223- if ( _isBroken )
224- {
225- return ;
226- }
227-
228226 _isBroken = true ;
227+ _attachStreamLifecycleCts . CancelAfter ( DeleteSessionTimeout ) ;
229228
230- var deleteSessionResponse = await _driver . UnaryCall (
229+ var deleteSessionResponse = await Driver . UnaryCall (
231230 QueryService . DeleteSessionMethod ,
232231 new DeleteSessionRequest { SessionId = SessionId } ,
233232 new GrpcRequestSettings { TransportTimeout = DeleteSessionTimeout , NodeId = NodeId }
0 commit comments