@@ -75,7 +75,7 @@ async def __aexit__(self, exc_type, exc_val, exc_tb):
7575
7676 def __del__ (self ):
7777 if not self ._closed :
78- self ._loop .create_task (self .close (), name = "close reader" )
78+ self ._loop .create_task (self .close (flush = False ), name = "close reader" )
7979
8080 async def receive_batch (
8181 self ,
@@ -120,12 +120,12 @@ async def commit_with_ack(
120120 waiter = self ._reconnector .commit (batch )
121121 await waiter .future
122122
123- async def close (self ):
123+ async def close (self , flush : bool = True ):
124124 if self ._closed :
125125 raise TopicReaderClosedError ()
126126
127127 self ._closed = True
128- await self ._reconnector .close ()
128+ await self ._reconnector .close (flush )
129129
130130
131131class ReaderReconnector :
@@ -199,14 +199,20 @@ def commit(
199199 ) -> datatypes .PartitionSession .CommitAckWaiter :
200200 return self ._stream_reader .commit (batch )
201201
202- async def close (self ):
202+ async def close (self , flush : bool ):
203203 if self ._stream_reader :
204+ if flush :
205+ await self .flush ()
204206 await self ._stream_reader .close ()
205207 for task in self ._background_tasks :
206208 task .cancel ()
207209
208210 await asyncio .wait (self ._background_tasks )
209211
212+ async def flush (self ):
213+ if self ._stream_reader :
214+ await self ._stream_reader .flush ()
215+
210216 def _set_first_error (self , err : issues .Error ):
211217 try :
212218 self ._first_error .set_result (err )
@@ -641,6 +647,16 @@ def _get_first_error(self) -> Optional[YdbError]:
641647 if self ._first_error .done ():
642648 return self ._first_error .result ()
643649
650+ async def flush (self ):
651+ if self ._closed :
652+ raise RuntimeError ("Flush on closed Stream" )
653+
654+ futures = []
655+ for session in self ._partition_sessions .values ():
656+ futures .extend (w .future for w in session ._ack_waiters )
657+
658+ await asyncio .gather (* futures )
659+
644660 async def close (self ):
645661 if self ._closed :
646662 return
0 commit comments