Skip to content

Commit a24e32a

Browse files
author
Dhriti Chopra
committed
Disabling cumulative hasher for noop
1 parent e67803a commit a24e32a

2 files changed

Lines changed: 83 additions & 2 deletions

File tree

java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/BaseObjectReadSessionStreamRead.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ private AccumulatingRead(
151151
super(rangeSpec, retryContext, onCloseCallback);
152152
this.readId = readId;
153153
this.hasher =
154-
(rangeSpec.begin() == 0)
154+
(rangeSpec.begin() == 0 && !(hasher instanceof Hasher.NoOpHasher))
155155
? new CumulativeHasher(hasher, 0, rangeSpec.maxLength())
156156
: hasher;
157157
this.complete = SettableApiFuture.create();
@@ -284,7 +284,7 @@ static class StreamingRead extends BaseObjectReadSessionStreamRead<ScatteringByt
284284
super(rangeSpec, retryContext, onCloseCallback);
285285
this.readId = new AtomicLong(readId);
286286
this.hasher =
287-
(rangeSpec.begin() == 0)
287+
(rangeSpec.begin() == 0 && !(hasher instanceof Hasher.NoOpHasher))
288288
? new CumulativeHasher(hasher, 0, rangeSpec.maxLength())
289289
: hasher;
290290
this.closed = false;

java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/ObjectReadSessionStreamTest.java

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,87 @@ public boolean isSendReady() {
556556
}
557557
}
558558

559+
@Test
560+
public void validateCumulativeChecksum_bidi_disabled_noFailureOnMismatch() throws Exception {
561+
ChecksummedTestContent testContent =
562+
ChecksummedTestContent.of(DataGenerator.base64Characters().genBytes(10));
563+
564+
Object bidiMetadata =
565+
Object.newBuilder()
566+
.setSize(testContent.length())
567+
.setChecksums(
568+
ObjectChecksums.newBuilder().setCrc32C(testContent.getCrc32c() + 1).build())
569+
.build();
570+
571+
SettableApiFuture<ResponseObserver<BidiReadObjectResponse>> observerFuture =
572+
SettableApiFuture.create();
573+
574+
ZeroCopyBidiStreamingCallable<BidiReadObjectRequest, BidiReadObjectResponse> customCallable =
575+
new ZeroCopyBidiStreamingCallable<>(
576+
new BidiStreamingCallable<BidiReadObjectRequest, BidiReadObjectResponse>() {
577+
@Override
578+
public ClientStream<BidiReadObjectRequest> internalCall(
579+
ResponseObserver<BidiReadObjectResponse> responseObserver,
580+
ClientStreamReadyObserver<BidiReadObjectRequest> onReady,
581+
ApiCallContext context) {
582+
observerFuture.set(responseObserver);
583+
responseObserver.onStart(TestUtils.nullStreamController());
584+
return new ClientStream<BidiReadObjectRequest>() {
585+
@Override
586+
public void send(BidiReadObjectRequest request) {}
587+
588+
@Override
589+
public void closeSendWithError(Throwable t) {}
590+
591+
@Override
592+
public void closeSend() {
593+
responseObserver.onComplete();
594+
}
595+
596+
@Override
597+
public boolean isSendReady() {
598+
return true;
599+
}
600+
};
601+
}
602+
},
603+
ResponseContentLifecycleManager.noopBidiReadObjectResponse());
604+
605+
try (AccumulatingRead<byte[]> read1 =
606+
ObjectReadSessionStreamRead.createByteArrayAccumulatingRead(
607+
1, RangeSpec.all(), Hasher.noop(), RetryContext.neverRetry())) {
608+
state.putOutstandingRead(1, read1);
609+
610+
try (ObjectReadSessionStream stream =
611+
ObjectReadSessionStream.create(exec, customCallable, state, RetryContext.neverRetry())) {
612+
613+
stream.send(BidiReadObjectRequest.getDefaultInstance());
614+
615+
ResponseObserver<BidiReadObjectResponse> observer = observerFuture.get(2, TimeUnit.SECONDS);
616+
617+
BidiReadObjectResponse resp =
618+
BidiReadObjectResponse.newBuilder()
619+
.setMetadata(bidiMetadata)
620+
.addObjectDataRanges(
621+
com.google.storage.v2.ObjectRangeData.newBuilder()
622+
.setReadRange(
623+
com.google.storage.v2.ReadRange.newBuilder()
624+
.setReadId(1)
625+
.setReadOffset(0)
626+
.build())
627+
.setChecksummedData(testContent.asChecksummedData())
628+
.setRangeEnd(true)
629+
.build())
630+
.build();
631+
632+
observer.onResponse(resp);
633+
634+
byte[] resultBytes = read1.get(2, TimeUnit.SECONDS);
635+
assertThat(xxd(ByteBuffer.wrap(resultBytes))).isEqualTo(xxd(testContent.asByteBuffer()));
636+
}
637+
}
638+
}
639+
559640
@Test
560641
public void validateCumulativeChecksum_bidi_skippedForRangedRead() throws Exception {
561642
ChecksummedTestContent testContent =

0 commit comments

Comments
 (0)