@@ -11,6 +11,7 @@ namespace Ydb.Sdk.Services.Topic;
1111using InitResponse = StreamWriteMessage . Types . InitResponse ;
1212using MessageData = StreamWriteMessage . Types . WriteRequest . Types . MessageData ;
1313using MessageFromClient = StreamWriteMessage . Types . FromClient ;
14+ using MessageFromServer = StreamWriteMessage . Types . FromServer ;
1415using WriterStream = Driver . BidirectionalStream <
1516 StreamWriteMessage . Types . FromClient ,
1617 StreamWriteMessage . Types . FromServer
@@ -143,10 +144,9 @@ public async Task<WriteResult> WriteAsync(Message<TValue> message)
143144}
144145
145146// No thread safe
146- internal class WriterSession : TopicSession
147+ internal class WriterSession : TopicSession < MessageFromClient , MessageFromServer >
147148{
148149 private readonly WriterConfig _config ;
149- private readonly WriterStream _stream ;
150150
151151 private long _seqNum ;
152152
@@ -155,11 +155,10 @@ public WriterSession(
155155 WriterStream stream ,
156156 InitResponse initResponse ,
157157 Func < Task > initialize ,
158- ILogger logger ) : base ( logger , initResponse . SessionId , initialize )
158+ ILogger logger ) : base ( stream , logger , initResponse . SessionId , initialize )
159159 {
160160 _config = config ;
161- _stream = stream ;
162- _seqNum = initResponse . LastSeqNo ;
161+ Volatile . Write ( ref _seqNum , initResponse . LastSeqNo ) ; // happens-before for Volatile.Read
163162 }
164163
165164 internal async Task RunProcessingWriteAck ( ConcurrentQueue < MessageSending > inFlightMessages )
@@ -168,8 +167,9 @@ internal async Task RunProcessingWriteAck(ConcurrentQueue<MessageSending> inFlig
168167 {
169168 Logger . LogInformation ( "WriterSession[{SessionId}] is running processing writeAck" , SessionId ) ;
170169
171- await foreach ( var messageFromServer in _stream )
170+ while ( await Stream . MoveNextAsync ( ) )
172171 {
172+ var messageFromServer = Stream . Current ;
173173 var status = Status . FromProto ( messageFromServer . Status , messageFromServer . Issues ) ;
174174
175175 if ( status . IsNotSuccess )
@@ -253,7 +253,7 @@ internal async Task Write(ConcurrentQueue<MessageSending> toSendBuffer,
253253 }
254254
255255 Volatile . Write ( ref _seqNum , currentSeqNum ) ;
256- await _stream . Write ( new MessageFromClient { WriteRequest = writeMessage } ) ;
256+ await Stream . Write ( new MessageFromClient { WriteRequest = writeMessage } ) ;
257257 }
258258 catch ( TransactionException e )
259259 {
@@ -263,11 +263,6 @@ internal async Task Write(ConcurrentQueue<MessageSending> toSendBuffer,
263263 ReconnectSession ( ) ;
264264 }
265265 }
266-
267- public ValueTask DisposeAsync ( )
268- {
269- return _stream . DisposeAsync ( ) ;
270- }
271266}
272267
273268internal record MessageSending ( MessageData MessageData , TaskCompletionSource < WriteResult > TaskCompletionSource ) ;
0 commit comments