5151-export ([format_osiris_event /2 ]).
5252-export ([update_stream_conf /2 ]).
5353-export ([readers /1 ]).
54+ -export ([read_ahead_on /0 ]).
5455
5556-export ([parse_offset_arg /1 ,
5657 filter_spec /1 ]).
@@ -463,10 +464,11 @@ query_local_pid(#stream_client{stream_id = StreamId} = State) ->
463464begin_stream (# stream_client {name = QName ,
464465 readers = Readers0 ,
465466 local_pid = LocalPid } = State ,
466- Tag , Offset , Mode , AckRequired , Filter , Options )
467+ Tag , Offset , Mode , AckRequired , Filter , Options0 )
467468 when is_pid (LocalPid ) ->
468469 CounterSpec = {{? MODULE , QName , Tag , self ()}, []},
469- {ok , Seg0 } = osiris :init_reader (LocalPid , Offset , CounterSpec , Options ),
470+ Options1 = Options0 #{read_ahead => read_ahead_on ()},
471+ {ok , Seg0 } = osiris :init_reader (LocalPid , Offset , CounterSpec , Options1 ),
470472 NextOffset = osiris_log :next_offset (Seg0 ) - 1 ,
471473 osiris :register_offset_listener (LocalPid , NextOffset ),
472474 StartOffset = case Offset of
@@ -491,7 +493,7 @@ begin_stream(#stream_client{name = QName,
491493 last_consumed_offset = StartOffset ,
492494 log = Seg0 ,
493495 filter = Filter ,
494- reader_options = Options },
496+ reader_options = Options1 },
495497 {ok , State # stream_client {readers = Readers0 #{Tag => Str0 }}}.
496498
497499cancel (_Q , #{consumer_tag := ConsumerTag ,
@@ -659,8 +661,8 @@ handle_event(_QName, {stream_local_member_change, Pid},
659661 osiris_log :close (Log0 ),
660662 CounterSpec = {{? MODULE , QName , self ()}, []},
661663 ? LOG_DEBUG (" Re-creating Osiris reader for consumer ~tp at offset ~tp "
662- " with options ~tp " ,
663- [T , Offset , Options ]),
664+ " with options ~tp " ,
665+ [T , Offset , Options ]),
664666 {ok , Log1 } = osiris :init_reader (Pid , Offset , CounterSpec , Options ),
665667 NextOffset = osiris_log :next_offset (Log1 ) - 1 ,
666668 ? LOG_DEBUG (" Registering offset listener at offset ~tp " , [NextOffset ]),
@@ -1176,7 +1178,7 @@ stream_entries(QName, Name, CTag, LocalPid,
11761178 credit = Credit } = Str0 ) ->
11771179 case Credit > 0 of
11781180 true ->
1179- case chunk_iterator (Str0 , LocalPid ) of
1181+ case chunk_iterator (Str0 , LocalPid , undefined ) of
11801182 {ok , Str } ->
11811183 stream_entries (QName , Name , CTag , LocalPid , Str );
11821184 {end_of_stream , Str } ->
@@ -1229,7 +1231,7 @@ stream_entries(QName, Name, CTag, LocalPid,
12291231 gen_server :cast (self (), queue_event (QName , {resume_filtering , CTag })),
12301232 {Str0 # stream {filtering_paused = true }, lists :reverse (Acc0 )};
12311233 end_of_chunk ->
1232- case chunk_iterator (Str0 , LocalPid ) of
1234+ case chunk_iterator (Str0 , LocalPid , Iter0 ) of
12331235 {ok , Str } ->
12341236 stream_entries (QName , Name , CTag , LocalPid , Str , Acc0 );
12351237 {end_of_stream , Str } ->
@@ -1294,8 +1296,8 @@ stream_entries(QName, Name, CTag, LocalPid,
12941296
12951297chunk_iterator (# stream {credit = Credit ,
12961298 listening_offset = LOffs ,
1297- log = Log0 } = Str0 , LocalPid ) ->
1298- case osiris_log :chunk_iterator (Log0 , Credit ) of
1299+ log = Log0 } = Str0 , LocalPid , PrevIterator ) ->
1300+ case osiris_log :chunk_iterator (Log0 , Credit , PrevIterator ) of
12991301 {ok , _ChunkHeader , Iter , Log } ->
13001302 {ok , Str0 # stream {chunk_iterator = Iter ,
13011303 log = Log }};
@@ -1527,3 +1529,6 @@ queue_vm_stats_sups() ->
15271529queue_vm_ets () ->
15281530 {[],
15291531 []}.
1532+
1533+ read_ahead_on () ->
1534+ application :get_env (rabbit , stream_read_ahead , true ).
0 commit comments