Skip to content

Commit 65f2c2e

Browse files
committed
fix: readBlocksRecursive should not throw N5NoSuchKeyException
* rather return, leaving the request's blocks as null
1 parent 83afd9a commit 65f2c2e

1 file changed

Lines changed: 20 additions & 15 deletions

File tree

src/main/java/org/janelia/saalfeldlab/n5/shard/DefaultDatasetAccess.java

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -146,24 +146,29 @@ private void readBlocksRecursive(
146146

147147
final int level = requests.level();
148148
@SuppressWarnings("unchecked")
149-
final BlockCodec<RawShard> codec = (BlockCodec<RawShard>) codecs[level];
150-
final RawShard shard = codec.decode(readData, requests.gridPosition()).getData();
149+
final BlockCodec<RawShard> codec = (BlockCodec<RawShard>)codecs[level];
150+
try {
151151

152-
if (level == 1 ) {
153-
//Base case; read the blocks
154-
for (final DataBlockRequest<T> request : requests) {
155-
final long[] elementPos = request.position.relative(0);
156-
final ReadData elementData = shard.getElementData(elementPos);
157-
request.block = readBlockRecursive(elementData, request.position, 0);
158-
}
159-
} else { // level > 1
160-
final List<DataBlockRequests<T>> split = requests.split();
161-
for (final DataBlockRequests<T> subRequests : split) {
162-
final long[] subShardPosition = subRequests.relativeGridPosition();
163-
final ReadData elementData = shard.getElementData(subShardPosition);
164-
readBlocksRecursive(elementData, subRequests);
152+
final RawShard shard = codec.decode(readData, requests.gridPosition()).getData();
153+
if (level == 1) {
154+
// Base case; read the blocks
155+
for (final DataBlockRequest<T> request : requests) {
156+
final long[] elementPos = request.position.relative(0);
157+
final ReadData elementData = shard.getElementData(elementPos);
158+
request.block = readBlockRecursive(elementData, request.position, 0);
159+
}
160+
} else { // level > 1
161+
final List<DataBlockRequests<T>> split = requests.split();
162+
for (final DataBlockRequests<T> subRequests : split) {
163+
final long[] subShardPosition = subRequests.relativeGridPosition();
164+
final ReadData elementData = shard.getElementData(subShardPosition);
165+
readBlocksRecursive(elementData, subRequests);
166+
}
165167
}
168+
} catch (N5NoSuchKeyException e) {
169+
// the shard does not exist
166170
}
171+
167172
}
168173

169174
//

0 commit comments

Comments
 (0)