Skip to content

Commit 76aacb8

Browse files
committed
less requests to store on read
1 parent e4514b2 commit 76aacb8

1 file changed

Lines changed: 6 additions & 2 deletions

File tree

src/main/java/dev/zarr/zarrjava/core/Array.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
import java.nio.file.Path;
1717
import java.nio.file.Paths;
1818
import java.util.Arrays;
19+
import java.util.List;
20+
import java.util.Set;
21+
import java.util.stream.Collectors;
1922
import java.util.stream.Stream;
2023

2124
public abstract class Array extends AbstractNode {
@@ -289,6 +292,8 @@ public ucar.ma2.Array read(final long[] offset, final int[] shape, final boolean
289292
if (parallel) {
290293
chunkStream = chunkStream.parallel();
291294
}
295+
final Set<List<String>> existingKeys = storeHandle.list().map(Arrays::asList).collect(Collectors.toSet());
296+
292297
chunkStream.forEach(
293298
chunkCoords -> {
294299
try {
@@ -306,9 +311,8 @@ public ucar.ma2.Array read(final long[] offset, final int[] shape, final boolean
306311

307312
final String[] chunkKeys = metadata.chunkKeyEncoding().encodeChunkKey(chunkCoords);
308313
final StoreHandle chunkHandle = storeHandle.resolve(chunkKeys);
309-
if (!chunkHandle.exists()) {
314+
if (existingKeys.stream().noneMatch(Arrays.asList(chunkKeys)::equals))
310315
return;
311-
}
312316
if (codecPipeline.supportsPartialDecode()) {
313317
final ucar.ma2.Array chunkArray = codecPipeline.decodePartial(chunkHandle,
314318
Utils.toLongArray(chunkProjection.chunkOffset), chunkProjection.shape);

0 commit comments

Comments
 (0)