@@ -213,6 +213,16 @@ def create_message(
213
213
)
214
214
215
215
async def send_message (self , stream_reader , message : PublicMessage ):
216
+ await self .send_batch (stream_reader , [message ])
217
+
218
+ async def send_batch (self , stream_reader , batch : typing .List [PublicMessage ]):
219
+ if len (batch ) == 0 :
220
+ return
221
+
222
+ first_message = batch [0 ]
223
+ for message in batch :
224
+ assert message ._partition_session is first_message ._partition_session
225
+
216
226
def batch_count ():
217
227
return len (stream_reader ._message_batches )
218
228
@@ -225,7 +235,7 @@ def batch_count():
225
235
server_message = StreamReadMessage .ReadResponse (
226
236
partition_data = [
227
237
StreamReadMessage .ReadResponse .PartitionData (
228
- partition_session_id = message ._partition_session .id ,
238
+ partition_session_id = first_message ._partition_session .id ,
229
239
batches = [
230
240
StreamReadMessage .ReadResponse .Batch (
231
241
message_data = [
@@ -237,11 +247,12 @@ def batch_count():
237
247
uncompresed_size = len (message .data ),
238
248
message_group_id = message .message_group_id ,
239
249
)
250
+ for message in batch
240
251
],
241
- producer_id = message .producer_id ,
242
- write_session_meta = message .session_metadata ,
252
+ producer_id = first_message .producer_id ,
253
+ write_session_meta = first_message .session_metadata ,
243
254
codec = Codec .CODEC_RAW ,
244
- written_at = message .written_at ,
255
+ written_at = first_message .written_at ,
245
256
)
246
257
],
247
258
)
@@ -1066,13 +1077,15 @@ async def test_read_message(
1066
1077
async def test_receive_batch_nowait (self , stream , stream_reader , partition_session ):
1067
1078
assert stream_reader .receive_batch_nowait () is None
1068
1079
1080
+ initial_buffer_size = stream_reader ._buffer_size_bytes
1081
+
1069
1082
mess1 = self .create_message (partition_session , 1 , 1 )
1070
1083
await self .send_message (stream_reader , mess1 )
1071
1084
1072
1085
mess2 = self .create_message (partition_session , 2 , 1 )
1073
1086
await self .send_message (stream_reader , mess2 )
1074
1087
1075
- initial_buffer_size = stream_reader ._buffer_size_bytes
1088
+ assert stream_reader ._buffer_size_bytes == initial_buffer_size - 2 * self . default_batch_size
1076
1089
1077
1090
received = stream_reader .receive_batch_nowait ()
1078
1091
assert received == PublicBatch (
@@ -1090,14 +1103,37 @@ async def test_receive_batch_nowait(self, stream, stream_reader, partition_sessi
1090
1103
_codec = Codec .CODEC_RAW ,
1091
1104
)
1092
1105
1093
- assert stream_reader ._buffer_size_bytes == initial_buffer_size + 2 * self . default_batch_size
1106
+ assert stream_reader ._buffer_size_bytes == initial_buffer_size
1094
1107
1095
1108
assert StreamReadMessage .ReadRequest (self .default_batch_size ) == stream .from_client .get_nowait ().client_message
1096
1109
assert StreamReadMessage .ReadRequest (self .default_batch_size ) == stream .from_client .get_nowait ().client_message
1097
1110
1098
1111
with pytest .raises (asyncio .QueueEmpty ):
1099
1112
stream .from_client .get_nowait ()
1100
1113
1114
+ async def test_receive_message_nowait (self , stream , stream_reader , partition_session ):
1115
+ assert stream_reader .receive_batch_nowait () is None
1116
+
1117
+ initial_buffer_size = stream_reader ._buffer_size_bytes
1118
+
1119
+ await self .send_batch (
1120
+ stream_reader , [self .create_message (partition_session , 1 , 1 ), self .create_message (partition_session , 2 , 1 )]
1121
+ )
1122
+ await self .send_batch (
1123
+ stream_reader ,
1124
+ [
1125
+ self .create_message (partition_session , 10 , 1 ),
1126
+ ],
1127
+ )
1128
+
1129
+ assert stream_reader ._buffer_size_bytes == initial_buffer_size - 2 * self .default_batch_size
1130
+
1131
+ for expected_seqno in [1 , 2 , 10 ]:
1132
+ mess = stream_reader .receive_message_nowait ()
1133
+ assert mess .seqno == expected_seqno
1134
+
1135
+ assert stream_reader ._buffer_size_bytes == initial_buffer_size
1136
+
1101
1137
async def test_update_token (self , stream ):
1102
1138
settings = PublicReaderSettings (
1103
1139
consumer = "test-consumer" ,
0 commit comments