Skip to content

Commit 79bea2c

Browse files
committed
chore: update BlobDescriptor implementation to handle redirect
The packing of BidiReadObjectRedirectedError has not yet been formalized, what is here is what is currently happening.
1 parent 9416a8f commit 79bea2c

3 files changed

Lines changed: 401 additions & 82 deletions

File tree

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

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,42 @@
1616

1717
package com.google.cloud.storage;
1818

19+
import com.google.common.collect.ImmutableList;
1920
import com.google.storage.v2.BidiReadHandle;
2021
import com.google.storage.v2.BidiReadObjectRequest;
2122
import com.google.storage.v2.Object;
23+
import com.google.storage.v2.ReadRange;
24+
import java.util.List;
2225
import java.util.Map;
2326
import java.util.concurrent.ConcurrentHashMap;
2427
import java.util.concurrent.atomic.AtomicLong;
2528
import java.util.concurrent.atomic.AtomicReference;
29+
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
30+
import org.checkerframework.checker.nullness.qual.Nullable;
2631

2732
final class BlobDescriptorState {
2833

2934
private final BidiReadObjectRequest openRequest;
30-
private final AtomicReference<BidiReadHandle> bidiReadHandle;
31-
private final AtomicReference<Object> metadata;
35+
private final AtomicReference<@Nullable BidiReadHandle> bidiReadHandle;
36+
private final AtomicReference<@Nullable String> routingToken;
37+
private final AtomicReference<@MonotonicNonNull Object> metadata;
3238
private final AtomicLong readIdSeq;
3339
private final Map<Long, BlobDescriptorStreamRead> outstandingReads;
3440

3541
BlobDescriptorState(BidiReadObjectRequest openRequest) {
3642
this.openRequest = openRequest;
3743
this.bidiReadHandle = new AtomicReference<>();
44+
this.routingToken = new AtomicReference<>();
3845
this.metadata = new AtomicReference<>();
3946
this.readIdSeq = new AtomicLong(1);
4047
this.outstandingReads = new ConcurrentHashMap<>();
4148
}
4249

50+
BidiReadObjectRequest getOpenRequest() {
51+
return openRequest;
52+
}
53+
54+
@Nullable
4355
BidiReadHandle getBidiReadHandle() {
4456
return bidiReadHandle.get();
4557
}
@@ -60,6 +72,7 @@ long newReadId() {
6072
return readIdSeq.getAndIncrement();
6173
}
6274

75+
@Nullable
6376
BlobDescriptorStreamRead getOutstandingRead(long key) {
6477
return outstandingReads.get(key);
6578
}
@@ -71,4 +84,19 @@ void putOutstandingRead(long key, BlobDescriptorStreamRead value) {
7184
void removeOutstandingRead(long key) {
7285
outstandingReads.remove(key);
7386
}
87+
88+
void setRoutingToken(String routingToken) {
89+
this.routingToken.set(routingToken);
90+
}
91+
92+
@Nullable
93+
String getRoutingToken() {
94+
return this.routingToken.get();
95+
}
96+
97+
public List<ReadRange> getOutstandingReads() {
98+
return outstandingReads.values().stream()
99+
.map(BlobDescriptorStreamRead::makeReadRange)
100+
.collect(ImmutableList.toImmutableList());
101+
}
74102
}

0 commit comments

Comments
 (0)