Skip to content

Commit 6bc2686

Browse files
Test that parallel range reads are joined in range order
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent d1a5f85 commit 6bc2686

1 file changed

Lines changed: 23 additions & 0 deletions

File tree

‎tests/pyathena/filesystem/test_s3.py‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3291,6 +3291,29 @@ def test_read_to_end(self, size, offset, open_kwargs):
32913291
assert f.read(size) == data[offset:]
32923292
assert f.read(size) == b""
32933293

3294+
def test_read_parallel_ranges_in_order(self):
3295+
# The ranges of a parallel read are joined in their order, also when
3296+
# the first range finishes last.
3297+
data = bytes(range(64))
3298+
fs, ranges = self._make_object_fs(data)
3299+
get_object = fs._client.get_object.side_effect
3300+
others_done = threading.Semaphore(0)
3301+
3302+
def answer_first_range_last(**request):
3303+
if request["Range"].startswith("bytes=0-"):
3304+
for _ in range(3):
3305+
assert others_done.acquire(timeout=5)
3306+
return get_object(**request)
3307+
try:
3308+
return get_object(**request)
3309+
finally:
3310+
others_done.release()
3311+
3312+
fs._client.get_object.side_effect = answer_first_range_last
3313+
with fs.open("s3://bucket/key", "rb", cache_type="none", block_size=16, max_workers=4) as f:
3314+
assert f.read() == data
3315+
assert sorted(ranges) == ["bytes=0-15", "bytes=16-31", "bytes=32-47", "bytes=48-63"]
3316+
32943317
@pytest.mark.parametrize("cache_type", ["bytes", "all", "first"])
32953318
def test_open_directory(self, cache_type):
32963319
fs = self._make_fs()

0 commit comments

Comments
 (0)