3232import com .google .api .core .ApiFuture ;
3333import com .google .api .core .ApiFutures ;
3434import com .google .api .core .BetaApi ;
35- import com .google .api .gax .core .InstantiatingExecutorProvider ;
3635import com .google .api .gax .grpc .GrpcCallContext ;
3736import com .google .api .gax .paging .AbstractPage ;
3837import com .google .api .gax .paging .Page ;
39- import com .google .api .gax .retrying .BasicResultRetryAlgorithm ;
4038import com .google .api .gax .retrying .ResultRetryAlgorithm ;
4139import com .google .api .gax .rpc .ApiException ;
4240import com .google .api .gax .rpc .ApiExceptions ;
4341import com .google .api .gax .rpc .ClientStreamingCallable ;
4442import com .google .api .gax .rpc .NotFoundException ;
45- import com .google .api .gax .rpc .OutOfRangeException ;
4643import com .google .api .gax .rpc .StatusCode ;
4744import com .google .api .gax .rpc .UnaryCallable ;
4845import com .google .cloud .BaseService ;
5249import com .google .cloud .storage .BlobWriteSessionConfig .WriterFactory ;
5350import com .google .cloud .storage .BufferedWritableByteChannelSession .BufferedWritableByteChannel ;
5451import com .google .cloud .storage .Conversions .Decoder ;
55- import com .google .cloud .storage .GrpcUtils .ZeroCopyBidiStreamingCallable ;
5652import com .google .cloud .storage .GrpcUtils .ZeroCopyServerStreamingCallable ;
57- import com .google .cloud .storage .Hasher .UncheckedChecksumMismatchException ;
5853import com .google .cloud .storage .HmacKey .HmacKeyMetadata ;
5954import com .google .cloud .storage .HmacKey .HmacKeyState ;
6055import com .google .cloud .storage .PostPolicyV4 .PostConditionsV4 ;
6156import com .google .cloud .storage .PostPolicyV4 .PostFieldsV4 ;
62- import com .google .cloud .storage .RetryContext .RetryContextProvider ;
6357import com .google .cloud .storage .Storage .ComposeRequest .SourceBlob ;
6458import com .google .cloud .storage .UnbufferedReadableByteChannelSession .UnbufferedReadableByteChannel ;
6559import com .google .cloud .storage .UnbufferedWritableByteChannelSession .UnbufferedWritableByteChannel ;
8680import com .google .iam .v1 .SetIamPolicyRequest ;
8781import com .google .iam .v1 .TestIamPermissionsRequest ;
8882import com .google .storage .v2 .BidiReadObjectRequest ;
89- import com .google .storage .v2 .BidiReadObjectResponse ;
9083import com .google .storage .v2 .BidiReadObjectSpec ;
9184import com .google .storage .v2 .BidiWriteObjectRequest ;
9285import com .google .storage .v2 .BidiWriteObjectResponse ;
111104import com .google .storage .v2 .RewriteObjectRequest ;
112105import com .google .storage .v2 .RewriteResponse ;
113106import com .google .storage .v2 .StorageClient ;
114- import com .google .storage .v2 .StorageSettings ;
115107import com .google .storage .v2 .UpdateBucketRequest ;
116108import com .google .storage .v2 .UpdateObjectRequest ;
117109import com .google .storage .v2 .WriteObjectRequest ;
141133import java .util .Spliterators .AbstractSpliterator ;
142134import java .util .concurrent .Callable ;
143135import java .util .concurrent .ExecutionException ;
144- import java .util .concurrent .ScheduledExecutorService ;
145136import java .util .concurrent .TimeUnit ;
146137import java .util .function .Consumer ;
147138import java .util .function .Predicate ;
@@ -175,59 +166,34 @@ final class GrpcStorageImpl extends BaseService<StorageOptions>
175166 .collect (ImmutableSet .toImmutableSet ())));
176167
177168 final StorageClient storageClient ;
169+ final StorageDataClient storageDataClient ;
178170 final ResponseContentLifecycleManager <ReadObjectResponse > responseContentLifecycleManager ;
179- final ResponseContentLifecycleManager <BidiReadObjectResponse > bidiResponseContentLifecycleManager ;
180171 final WriterFactory writerFactory ;
181172 final GrpcConversions codecs ;
182173 final GrpcRetryAlgorithmManager retryAlgorithmManager ;
183174 final SyntaxDecoders syntaxDecoders ;
184- final ScheduledExecutorService executor ;
185175
186176 // workaround for https://github.com/googleapis/java-storage/issues/1736
187177 private final Opts <UserProject > defaultOpts ;
188178 @ Deprecated private final Supplier <ProjectId > defaultProjectId ;
189- private final RetryContextProvider retryContextProvider ;
190179
191180 GrpcStorageImpl (
192181 GrpcStorageOptions options ,
193182 StorageClient storageClient ,
183+ StorageDataClient storageDataClient ,
194184 ResponseContentLifecycleManager <ReadObjectResponse > responseContentLifecycleManager ,
195- ResponseContentLifecycleManager <BidiReadObjectResponse > bidiResponseContentLifecycleManager ,
196185 WriterFactory writerFactory ,
197186 Opts <UserProject > defaultOpts ) {
198187 super (options );
199188 this .storageClient = storageClient ;
189+ this .storageDataClient = storageDataClient ;
200190 this .responseContentLifecycleManager = responseContentLifecycleManager ;
201- this .bidiResponseContentLifecycleManager = bidiResponseContentLifecycleManager ;
202191 this .writerFactory = writerFactory ;
203192 this .defaultOpts = defaultOpts ;
204193 this .codecs = Conversions .grpc ();
205194 this .retryAlgorithmManager = options .getRetryAlgorithmManager ();
206195 this .syntaxDecoders = new SyntaxDecoders ();
207196 this .defaultProjectId = Suppliers .memoize (() -> UnifiedOpts .projectId (options .getProjectId ()));
208- this .executor =
209- Utils .firstNonNull (
210- () -> {
211- if (storageClient == null ) {
212- return null ;
213- }
214- StorageSettings settings = storageClient .getSettings ();
215- if (settings == null ) {
216- return null ;
217- }
218- return settings .getBackgroundExecutorProvider ();
219- },
220- () -> {
221- // TODO: if we make it to here, ensure we track the need to shutdown the executor
222- // separate from StorageClient
223- return InstantiatingExecutorProvider .newBuilder ().build ();
224- })
225- .getExecutor ();
226- retryContextProvider =
227- RetryContext .providerFrom (
228- executor ,
229- getOptions (),
230- new ReadObjectRangeResultRetryAlgorithmDecorator (retryAlgorithmManager .idempotent ()));
231197 }
232198
233199 @ Override
@@ -1518,7 +1484,7 @@ public Blob moveBlob(MoveBlobRequest request) {
15181484 }
15191485
15201486 @ Override
1521- public ApiFuture <BlobDescriptor > getBlobDescriptor (BlobId id , BlobSourceOption ... options ) {
1487+ public ApiFuture <BlobReadSession > blobReadSession (BlobId id , BlobSourceOption ... options ) {
15221488 Opts <ObjectSourceOpt > opts = Opts .unwrap (options );
15231489 Object object = codecs .blobId ().encode (id );
15241490
@@ -1534,13 +1500,10 @@ public ApiFuture<BlobDescriptor> getBlobDescriptor(BlobId id, BlobSourceOption..
15341500 opts .bidiReadObjectRequest ().apply (b );
15351501 BidiReadObjectRequest req = b .build ();
15361502
1537- ZeroCopyBidiStreamingCallable <BidiReadObjectRequest , BidiReadObjectResponse > callable =
1538- new ZeroCopyBidiStreamingCallable <>(
1539- storageClient .bidiReadObjectCallable (), bidiResponseContentLifecycleManager );
1540-
15411503 GrpcCallContext context = opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
1504+ ApiFuture <ObjectReadSession > session = storageDataClient .readSession (req , context );
15421505
1543- return BlobDescriptorImpl . create ( req , context , callable , executor , retryContextProvider );
1506+ return BlobReadSessionAdapter . wrap ( session );
15441507 }
15451508
15461509 @ Override
@@ -2084,22 +2047,4 @@ private ZeroCopyServerStreamingCallable<ReadObjectRequest, ReadObjectResponse> r
20842047 storageClient .readObjectCallable ().withDefaultCallContext (grpcCallContext ),
20852048 responseContentLifecycleManager );
20862049 }
2087-
2088- private static class ReadObjectRangeResultRetryAlgorithmDecorator
2089- extends BasicResultRetryAlgorithm <Object > {
2090-
2091- private final ResultRetryAlgorithm <?> delegate ;
2092-
2093- private ReadObjectRangeResultRetryAlgorithmDecorator (ResultRetryAlgorithm <?> delegate ) {
2094- this .delegate = delegate ;
2095- }
2096-
2097- @ Override
2098- public boolean shouldRetry (Throwable previousThrowable , Object previousResponse ) {
2099- // this is only retryable with read object range, not other requests
2100- return previousThrowable instanceof UncheckedChecksumMismatchException
2101- || previousThrowable instanceof OutOfRangeException
2102- || delegate .shouldRetry (StorageException .coalesce (previousThrowable ), null );
2103- }
2104- }
21052050}
0 commit comments