Skip to content

Commit deb1de1

Browse files
committed
fixed checksum Error
1 parent 3eb5e08 commit deb1de1

2 files changed

Lines changed: 42 additions & 9 deletions

File tree

zarr-java-core/src/main/java/dev/zarr/zarrjava/store/S3Store.java

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
11
package dev.zarr.zarrjava.store;
22

3-
import dev.zarr.zarrjava.utils.Utils;
4-
import software.amazon.awssdk.core.ResponseInputStream;
5-
import software.amazon.awssdk.core.sync.RequestBody;
6-
import software.amazon.awssdk.services.s3.S3Client;
7-
import software.amazon.awssdk.services.s3.model.*;
8-
9-
import javax.annotation.Nonnull;
10-
import javax.annotation.Nullable;
113
import java.io.IOException;
124
import java.io.InputStream;
135
import java.nio.ByteBuffer;
146
import java.util.stream.Stream;
157

8+
import javax.annotation.Nonnull;
9+
import javax.annotation.Nullable;
10+
11+
import dev.zarr.zarrjava.utils.Utils;
12+
import software.amazon.awssdk.core.ResponseInputStream;
13+
import software.amazon.awssdk.core.sync.RequestBody;
14+
import software.amazon.awssdk.services.s3.S3Client;
15+
import software.amazon.awssdk.services.s3.model.CommonPrefix;
16+
import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
17+
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
18+
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
19+
import software.amazon.awssdk.services.s3.model.HeadObjectRequest;
20+
import software.amazon.awssdk.services.s3.model.ListObjectsV2Request;
21+
import software.amazon.awssdk.services.s3.model.ListObjectsV2Response;
22+
import software.amazon.awssdk.services.s3.model.NoSuchKeyException;
23+
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
24+
import software.amazon.awssdk.services.s3.model.S3Exception;
25+
import software.amazon.awssdk.services.s3.model.S3Object;
26+
1627
public class S3Store implements Store, Store.ListableStore {
1728

1829
@Nonnull
@@ -82,7 +93,9 @@ public ByteBuffer get(String[] keys, long start) {
8293
GetObjectRequest req = GetObjectRequest.builder()
8394
.bucket(bucketName)
8495
.key(resolveKeys(keys))
85-
.range(String.format("bytes=%d-", start))
96+
.range(start < 0 //dependant on where we start either fetch last or first bytes
97+
? String.format("bytes=%d", start)
98+
: String.format("bytes=%d-", start))
8699
.build();
87100
return get(req);
88101
}

zarr-java-core/src/test/java/dev/zarr/zarrjava/store/StoreTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,26 @@ public void testGetWithStartEnd() {
105105
Assertions.assertArrayEquals(expectedBytes, actualBytes);
106106
}
107107

108+
@Test
109+
public void testReadSuffix() {
110+
StoreHandle storeHandle = storeHandleWithData();
111+
ByteBuffer fullBuffer = storeHandle.read();
112+
long size = fullBuffer.remaining();
113+
if (size < 20) {
114+
Assertions.fail("Store size is too small to test suffix read");
115+
}
116+
117+
ByteBuffer suffixBuffer = storeHandle.read(-10);
118+
Assertions.assertEquals(10, suffixBuffer.remaining());
119+
120+
byte[] expectedBytes = new byte[10];
121+
fullBuffer.position((int) (size - 10));
122+
fullBuffer.get(expectedBytes);
123+
byte[] actualBytes = new byte[10];
124+
suffixBuffer.get(actualBytes);
125+
Assertions.assertArrayEquals(expectedBytes, actualBytes);
126+
}
127+
108128
@Test
109129
public abstract void testList() throws ZarrException, IOException;
110130

0 commit comments

Comments
 (0)