@@ -37,8 +37,12 @@ internal Producer(ProducerConfig producerConfig, ISerializer<TValue> serializer)
3737
3838 internal async Task Initialize ( )
3939 {
40- var stream = _config . Driver . BidirectionalStreamCall ( TopicService . StreamWriteMethod ,
41- GrpcRequestSettings . DefaultInstance ) ;
40+ _logger . LogInformation ( "Producer session initialization started. ProducerConfig: {ProducerConfig}" , _config ) ;
41+
42+ var stream = _config . Driver . BidirectionalStreamCall (
43+ TopicService . StreamWriteMethod ,
44+ GrpcRequestSettings . DefaultInstance
45+ ) ;
4246
4347 var initRequest = new StreamWriteMessage . Types . InitRequest { Path = _config . TopicPath } ;
4448 if ( _config . ProducerId != null )
@@ -54,7 +58,8 @@ internal async Task Initialize()
5458 await stream . Write ( new MessageFromClient { InitRequest = initRequest } ) ;
5559 if ( ! await stream . MoveNextAsync ( ) )
5660 {
57- throw new YdbProducerException ( "Write stream is closed by YDB server" ) ;
61+ throw new YdbProducerException (
62+ $ "Stream unexpectedly closed by YDB server. Current InitRequest: { initRequest } ") ;
5863 }
5964
6065 var receivedInitMessage = stream . Current ;
@@ -139,26 +144,41 @@ public ProducerSession(
139144
140145 internal async Task RunProcessingWriteAck ( ConcurrentQueue < MessageSending > inFlightMessages )
141146 {
142- await foreach ( var messageFromServer in _stream )
147+ try
143148 {
144- var status = Status . FromProto ( messageFromServer . Status , messageFromServer . Issues ) ;
145-
146- if ( status . IsNotSuccess )
149+ Logger . LogInformation ( "ProducerSession[{SessionId}] is running processing writeAck" , SessionId ) ;
150+
151+ await foreach ( var messageFromServer in _stream )
147152 {
148- Logger . LogWarning ( "" ) ;
149- return ;
150- }
153+ var status = Status . FromProto ( messageFromServer . Status , messageFromServer . Issues ) ;
151154
152- foreach ( var ack in messageFromServer . WriteResponse . Acks )
153- {
154- if ( ! inFlightMessages . TryDequeue ( out var messageFromClient ) )
155+ if ( status . IsNotSuccess )
155156 {
156- break ;
157+ Logger . LogWarning (
158+ "ProducerSession[{SessionId}] received unsuccessful status while processing writeAck: {Status}" ,
159+ SessionId , status ) ;
160+ return ;
157161 }
158162
159- messageFromClient . TaskCompletionSource . SetResult ( new SendResult ( ack ) ) ;
163+ foreach ( var ack in messageFromServer . WriteResponse . Acks )
164+ {
165+ if ( ! inFlightMessages . TryDequeue ( out var messageFromClient ) )
166+ {
167+ break ;
168+ }
169+
170+ messageFromClient . TaskCompletionSource . SetResult ( new SendResult ( ack ) ) ;
171+ }
160172 }
161173 }
174+ catch ( Exception e )
175+ {
176+ Logger . LogError ( e , "ProducerSession[{SessionId}] have error on processing writeAck" , SessionId ) ;
177+ }
178+ finally
179+ {
180+ ReconnectSession ( ) ;
181+ }
162182 }
163183
164184 internal async Task Write ( ConcurrentQueue < MessageSending > toSendBuffer ,
0 commit comments