@@ -538,19 +538,28 @@ async fn try_push(
538
538
539
539
let mut frame_no = start_frame_no;
540
540
while frame_no <= end_frame_no {
541
- let frame = conn. wal_get_frame ( frame_no, page_size) ?;
541
+ let batch_size = 128 . min ( end_frame_no - frame_no + 1 ) ;
542
+ let mut frames = conn. wal_get_frame ( frame_no, page_size) ?;
543
+ if batch_size > 1 {
544
+ frames. reserve ( ( batch_size - 1 ) as usize * frames. len ( ) ) ;
545
+ }
546
+ for idx in 1 ..batch_size {
547
+ let frame = conn. wal_get_frame ( frame_no + idx, page_size) ?;
548
+ frames. extend_from_slice ( frame. as_ref ( ) )
549
+ }
542
550
543
551
// The server returns its maximum frame number. To avoid resending
544
552
// frames the server already knows about, we need to update the
545
553
// frame number to the one returned by the server.
546
554
let max_frame_no = sync_ctx
547
- . push_frames ( frame . freeze ( ) , generation, frame_no, 1 )
555
+ . push_frames ( frames . freeze ( ) , generation, frame_no, batch_size )
548
556
. await ?;
549
557
550
558
if max_frame_no > frame_no {
551
- frame_no = max_frame_no;
559
+ frame_no = max_frame_no + 1 ;
560
+ } else {
561
+ frame_no += batch_size;
552
562
}
553
- frame_no += 1 ;
554
563
}
555
564
556
565
sync_ctx. write_metadata ( ) . await ?;
0 commit comments