1616
1717package com .google .cloud .storage ;
1818
19+ import com .google .common .collect .ImmutableList ;
1920import com .google .storage .v2 .BidiReadHandle ;
2021import com .google .storage .v2 .BidiReadObjectRequest ;
2122import com .google .storage .v2 .Object ;
23+ import com .google .storage .v2 .ReadRange ;
24+ import java .util .List ;
2225import java .util .Map ;
2326import java .util .concurrent .ConcurrentHashMap ;
2427import java .util .concurrent .atomic .AtomicLong ;
2528import java .util .concurrent .atomic .AtomicReference ;
29+ import org .checkerframework .checker .nullness .qual .MonotonicNonNull ;
30+ import org .checkerframework .checker .nullness .qual .Nullable ;
2631
2732final 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