@@ -214,7 +214,7 @@ def _fetch(self, start: int | None, end: int | None) -> bytes:
214214 if self .multi_fetcher :
215215 logger .debug (f"MMap get blocks { ranges } " )
216216 for idx , r in enumerate (self .multi_fetcher (ranges )):
217- ( sstart , send ) = ranges [idx ]
217+ sstart , send = ranges [idx ]
218218 logger .debug (f"MMap copy block ({ sstart } -{ send } " )
219219 self .cache [sstart :send ] = r
220220 else :
@@ -391,19 +391,8 @@ def _fetch(self, start: int | None, end: int | None) -> bytes:
391391 if start >= self .size or start >= end :
392392 return b""
393393
394- # byte position -> block numbers
395- start_block_number = start // self .blocksize
396- end_block_number = end // self .blocksize
397-
398- # these are cached, so safe to do multiple calls for the same start and end.
399- for block_number in range (start_block_number , end_block_number + 1 ):
400- self ._fetch_block_cached (block_number )
401-
402394 return self ._read_cache (
403- start ,
404- end ,
405- start_block_number = start_block_number ,
406- end_block_number = end_block_number ,
395+ start , end , start // self .blocksize , (end - 1 ) // self .blocksize
407396 )
408397
409398 def _fetch_block (self , block_number : int ) -> bytes :
@@ -439,6 +428,8 @@ def _read_cache(
439428 """
440429 start_pos = start % self .blocksize
441430 end_pos = end % self .blocksize
431+ if end_pos == 0 :
432+ end_pos = self .blocksize
442433
443434 self .hit_count += 1
444435 if start_block_number == end_block_number :
0 commit comments