67
67
import com .google .cloud .storage .UnifiedOpts .ObjectTargetOpt ;
68
68
import com .google .cloud .storage .UnifiedOpts .Opts ;
69
69
import com .google .cloud .storage .UnifiedOpts .ProjectId ;
70
+ import com .google .cloud .storage .UnifiedOpts .UserProject ;
70
71
import com .google .common .annotations .VisibleForTesting ;
71
72
import com .google .common .collect .ImmutableList ;
72
73
import com .google .common .collect .ImmutableSet ;
@@ -159,11 +160,15 @@ final class GrpcStorageImpl extends BaseService<StorageOptions> implements Stora
159
160
final GrpcRetryAlgorithmManager retryAlgorithmManager ;
160
161
final SyntaxDecoders syntaxDecoders ;
161
162
163
+ // workaround for https://github.com/googleapis/java-storage/issues/1736
164
+ private final Opts <UserProject > defaultOpts ;
162
165
@ Deprecated private final ProjectId defaultProjectId ;
163
166
164
- GrpcStorageImpl (GrpcStorageOptions options , StorageClient storageClient ) {
167
+ GrpcStorageImpl (
168
+ GrpcStorageOptions options , StorageClient storageClient , Opts <UserProject > defaultOpts ) {
165
169
super (options );
166
170
this .storageClient = storageClient ;
171
+ this .defaultOpts = defaultOpts ;
167
172
this .codecs = Conversions .grpc ();
168
173
this .retryAlgorithmManager = options .getRetryAlgorithmManager ();
169
174
this .syntaxDecoders = new SyntaxDecoders ();
@@ -182,7 +187,7 @@ public void close() throws Exception {
182
187
183
188
@ Override
184
189
public Bucket create (BucketInfo bucketInfo , BucketTargetOption ... options ) {
185
- Opts <BucketTargetOpt > opts = Opts .unwrap (options ).resolveFrom (bucketInfo );
190
+ Opts <BucketTargetOpt > opts = Opts .unwrap (options ).resolveFrom (bucketInfo ). prepend ( defaultOpts ) ;
186
191
GrpcCallContext grpcCallContext =
187
192
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
188
193
com .google .storage .v2 .Bucket bucket = codecs .bucketInfo ().encode (bucketInfo );
@@ -215,7 +220,7 @@ public Blob create(
215
220
BlobInfo blobInfo , byte [] content , int offset , int length , BlobTargetOption ... options ) {
216
221
requireNonNull (blobInfo , "blobInfo must be non null" );
217
222
requireNonNull (content , "content must be non null" );
218
- Opts <ObjectTargetOpt > opts = Opts .unwrap (options ).resolveFrom (blobInfo );
223
+ Opts <ObjectTargetOpt > opts = Opts .unwrap (options ).resolveFrom (blobInfo ). prepend ( defaultOpts ) ;
219
224
GrpcCallContext grpcCallContext =
220
225
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
221
226
WriteObjectRequest req = getWriteObjectRequest (blobInfo , opts );
@@ -267,7 +272,7 @@ public Blob createFrom(BlobInfo blobInfo, Path path, int bufferSize, BlobWriteOp
267
272
throw new StorageException (0 , path + " is a directory" );
268
273
}
269
274
270
- Opts <ObjectTargetOpt > opts = Opts .unwrap (options ).resolveFrom (blobInfo );
275
+ Opts <ObjectTargetOpt > opts = Opts .unwrap (options ).resolveFrom (blobInfo ). prepend ( defaultOpts ) ;
271
276
GrpcCallContext grpcCallContext =
272
277
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
273
278
WriteObjectRequest req = getWriteObjectRequest (blobInfo , opts );
@@ -335,7 +340,7 @@ public Blob createFrom(
335
340
throws IOException {
336
341
requireNonNull (blobInfo , "blobInfo must be non null" );
337
342
338
- Opts <ObjectTargetOpt > opts = Opts .unwrap (options ).resolveFrom (blobInfo );
343
+ Opts <ObjectTargetOpt > opts = Opts .unwrap (options ).resolveFrom (blobInfo ). prepend ( defaultOpts ) ;
339
344
GrpcCallContext grpcCallContext =
340
345
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
341
346
WriteObjectRequest req = getWriteObjectRequest (blobInfo , opts );
@@ -369,7 +374,7 @@ public Blob createFrom(
369
374
370
375
@ Override
371
376
public Bucket get (String bucket , BucketGetOption ... options ) {
372
- Opts <BucketSourceOpt > opts = Opts .unwrap (options );
377
+ Opts <BucketSourceOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
373
378
GrpcCallContext grpcCallContext =
374
379
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
375
380
GetBucketRequest .Builder builder =
@@ -384,7 +389,7 @@ public Bucket get(String bucket, BucketGetOption... options) {
384
389
385
390
@ Override
386
391
public Bucket lockRetentionPolicy (BucketInfo bucket , BucketTargetOption ... options ) {
387
- Opts <BucketTargetOpt > opts = Opts .unwrap (options ).resolveFrom (bucket );
392
+ Opts <BucketTargetOpt > opts = Opts .unwrap (options ).resolveFrom (bucket ). prepend ( defaultOpts ) ;
388
393
GrpcCallContext grpcCallContext =
389
394
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
390
395
LockBucketRetentionPolicyRequest .Builder builder =
@@ -406,7 +411,7 @@ public Blob get(String bucket, String blob, BlobGetOption... options) {
406
411
407
412
@ Override
408
413
public Blob get (BlobId blob , BlobGetOption ... options ) {
409
- Opts <ObjectSourceOpt > opts = Opts .unwrap (options ).resolveFrom (blob );
414
+ Opts <ObjectSourceOpt > opts = Opts .unwrap (options ).resolveFrom (blob ). prepend ( defaultOpts ) ;
410
415
GrpcCallContext grpcCallContext =
411
416
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
412
417
GetObjectRequest .Builder builder =
@@ -435,7 +440,7 @@ public Blob get(BlobId blob) {
435
440
436
441
@ Override
437
442
public Page <Bucket > list (BucketListOption ... options ) {
438
- Opts <BucketListOpt > opts = Opts .unwrap (options );
443
+ Opts <BucketListOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
439
444
GrpcCallContext grpcCallContext =
440
445
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
441
446
ListBucketsRequest request =
@@ -462,7 +467,7 @@ public Page<Bucket> list(BucketListOption... options) {
462
467
463
468
@ Override
464
469
public Page <Blob > list (String bucket , BlobListOption ... options ) {
465
- Opts <ObjectListOpt > opts = Opts .unwrap (options );
470
+ Opts <ObjectListOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
466
471
GrpcCallContext grpcCallContext =
467
472
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
468
473
ListObjectsRequest .Builder builder =
@@ -481,7 +486,7 @@ public Page<Blob> list(String bucket, BlobListOption... options) {
481
486
482
487
@ Override
483
488
public Bucket update (BucketInfo bucketInfo , BucketTargetOption ... options ) {
484
- Opts <BucketTargetOpt > opts = Opts .unwrap (options ).resolveFrom (bucketInfo );
489
+ Opts <BucketTargetOpt > opts = Opts .unwrap (options ).resolveFrom (bucketInfo ). prepend ( defaultOpts ) ;
485
490
GrpcCallContext grpcCallContext =
486
491
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
487
492
com .google .storage .v2 .Bucket bucket = codecs .bucketInfo ().encode (bucketInfo );
@@ -503,7 +508,7 @@ public Bucket update(BucketInfo bucketInfo, BucketTargetOption... options) {
503
508
504
509
@ Override
505
510
public Blob update (BlobInfo blobInfo , BlobTargetOption ... options ) {
506
- Opts <ObjectTargetOpt > opts = Opts .unwrap (options ).resolveFrom (blobInfo );
511
+ Opts <ObjectTargetOpt > opts = Opts .unwrap (options ).resolveFrom (blobInfo ). prepend ( defaultOpts ) ;
507
512
GrpcCallContext grpcCallContext =
508
513
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
509
514
Object object = codecs .blobInfo ().encode (blobInfo );
@@ -530,7 +535,7 @@ public Blob update(BlobInfo blobInfo) {
530
535
531
536
@ Override
532
537
public boolean delete (String bucket , BucketSourceOption ... options ) {
533
- Opts <BucketSourceOpt > opts = Opts .unwrap (options );
538
+ Opts <BucketSourceOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
534
539
GrpcCallContext grpcCallContext =
535
540
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
536
541
DeleteBucketRequest .Builder builder =
@@ -555,7 +560,7 @@ public boolean delete(String bucket, String blob, BlobSourceOption... options) {
555
560
556
561
@ Override
557
562
public boolean delete (BlobId blob , BlobSourceOption ... options ) {
558
- Opts <ObjectSourceOpt > opts = Opts .unwrap (options ).resolveFrom (blob );
563
+ Opts <ObjectSourceOpt > opts = Opts .unwrap (options ).resolveFrom (blob ). prepend ( defaultOpts ) ;
559
564
GrpcCallContext grpcCallContext =
560
565
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
561
566
DeleteObjectRequest .Builder builder =
@@ -587,7 +592,9 @@ public boolean delete(BlobId blob) {
587
592
@ Override
588
593
public Blob compose (ComposeRequest composeRequest ) {
589
594
Opts <ObjectTargetOpt > opts =
590
- Opts .unwrap (composeRequest .getTargetOptions ()).resolveFrom (composeRequest .getTarget ());
595
+ Opts .unwrap (composeRequest .getTargetOptions ())
596
+ .resolveFrom (composeRequest .getTarget ())
597
+ .prepend (defaultOpts );
591
598
GrpcCallContext grpcCallContext =
592
599
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
593
600
ComposeObjectRequest .Builder builder = ComposeObjectRequest .newBuilder ();
@@ -609,8 +616,12 @@ public CopyWriter copy(CopyRequest copyRequest) {
609
616
BlobId src = copyRequest .getSource ();
610
617
BlobInfo dst = copyRequest .getTarget ();
611
618
Opts <ObjectSourceOpt > srcOpts =
612
- Opts .unwrap (copyRequest .getSourceOptions ()).projectAsSource ().resolveFrom (src );
613
- Opts <ObjectTargetOpt > dstOpts = Opts .unwrap (copyRequest .getTargetOptions ()).resolveFrom (dst );
619
+ Opts .unwrap (copyRequest .getSourceOptions ())
620
+ .projectAsSource ()
621
+ .resolveFrom (src )
622
+ .prepend (defaultOpts );
623
+ Opts <ObjectTargetOpt > dstOpts =
624
+ Opts .unwrap (copyRequest .getTargetOptions ()).resolveFrom (dst ).prepend (defaultOpts );
614
625
615
626
Mapper <RewriteObjectRequest .Builder > mapper =
616
627
srcOpts .rewriteObjectsRequest ().andThen (dstOpts .rewriteObjectsRequest ());
@@ -684,7 +695,7 @@ public GrpcBlobReadChannel reader(String bucket, String blob, BlobSourceOption..
684
695
685
696
@ Override
686
697
public GrpcBlobReadChannel reader (BlobId blob , BlobSourceOption ... options ) {
687
- Opts <ObjectSourceOpt > opts = Opts .unwrap (options ).resolveFrom (blob );
698
+ Opts <ObjectSourceOpt > opts = Opts .unwrap (options ).resolveFrom (blob ). prepend ( defaultOpts ) ;
688
699
ReadObjectRequest request = getReadObjectRequest (blob , opts );
689
700
Set <StatusCode .Code > codes = resultRetryAlgorithmToCodes (retryAlgorithmManager .getFor (request ));
690
701
GrpcCallContext grpcCallContext = GrpcCallContext .createDefault ().withRetryableCodes (codes );
@@ -722,7 +733,7 @@ public void downloadTo(BlobId blob, OutputStream outputStream, BlobSourceOption.
722
733
723
734
@ Override
724
735
public GrpcBlobWriteChannel writer (BlobInfo blobInfo , BlobWriteOption ... options ) {
725
- Opts <ObjectTargetOpt > opts = Opts .unwrap (options ).resolveFrom (blobInfo );
736
+ Opts <ObjectTargetOpt > opts = Opts .unwrap (options ).resolveFrom (blobInfo ). prepend ( defaultOpts ) ;
726
737
GrpcCallContext grpcCallContext =
727
738
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
728
739
WriteObjectRequest req = getWriteObjectRequest (blobInfo , opts );
@@ -844,7 +855,7 @@ public List<Boolean> delete(Iterable<BlobId> blobIds) {
844
855
@ Override
845
856
public Acl getAcl (String bucket , Entity entity , BucketSourceOption ... options ) {
846
857
try {
847
- Opts <BucketSourceOpt > opts = Opts .unwrap (options );
858
+ Opts <BucketSourceOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
848
859
com .google .storage .v2 .Bucket resp = getBucketWithAcls (bucket , opts );
849
860
850
861
Predicate <BucketAccessControl > entityPredicate =
@@ -874,7 +885,7 @@ public Acl getAcl(String bucket, Entity entity) {
874
885
@ Override
875
886
public boolean deleteAcl (String bucket , Entity entity , BucketSourceOption ... options ) {
876
887
try {
877
- Opts <BucketSourceOpt > opts = Opts .unwrap (options );
888
+ Opts <BucketSourceOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
878
889
com .google .storage .v2 .Bucket resp = getBucketWithAcls (bucket , opts );
879
890
String encode = codecs .entity ().encode (entity );
880
891
@@ -928,7 +939,7 @@ public Acl createAcl(String bucket, Acl acl) {
928
939
@ Override
929
940
public Acl updateAcl (String bucket , Acl acl , BucketSourceOption ... options ) {
930
941
try {
931
- Opts <BucketSourceOpt > opts = Opts .unwrap (options );
942
+ Opts <BucketSourceOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
932
943
com .google .storage .v2 .Bucket resp = getBucketWithAcls (bucket , opts );
933
944
BucketAccessControl encode = codecs .bucketAcl ().encode (acl );
934
945
String entity = encode .getEntity ();
@@ -966,7 +977,7 @@ public Acl updateAcl(String bucket, Acl acl) {
966
977
@ Override
967
978
public List <Acl > listAcls (String bucket , BucketSourceOption ... options ) {
968
979
try {
969
- Opts <BucketSourceOpt > opts = Opts .unwrap (options );
980
+ Opts <BucketSourceOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
970
981
com .google .storage .v2 .Bucket resp = getBucketWithAcls (bucket , opts );
971
982
return resp .getAclList ().stream ()
972
983
.map (codecs .bucketAcl ()::decode )
@@ -1211,7 +1222,7 @@ public List<Acl> listAcls(BlobId blob) {
1211
1222
1212
1223
@ Override
1213
1224
public HmacKey createHmacKey (ServiceAccount serviceAccount , CreateHmacKeyOption ... options ) {
1214
- Opts <HmacKeyTargetOpt > opts = Opts .unwrap (options );
1225
+ Opts <HmacKeyTargetOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
1215
1226
GrpcCallContext grpcCallContext =
1216
1227
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
1217
1228
CreateHmacKeyRequest request =
@@ -1236,7 +1247,7 @@ public HmacKey createHmacKey(ServiceAccount serviceAccount, CreateHmacKeyOption.
1236
1247
1237
1248
@ Override
1238
1249
public Page <HmacKeyMetadata > listHmacKeys (ListHmacKeysOption ... options ) {
1239
- Opts <HmacKeyListOpt > opts = Opts .unwrap (options );
1250
+ Opts <HmacKeyListOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
1240
1251
GrpcCallContext grpcCallContext =
1241
1252
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
1242
1253
@@ -1264,7 +1275,7 @@ public Page<HmacKeyMetadata> listHmacKeys(ListHmacKeysOption... options) {
1264
1275
1265
1276
@ Override
1266
1277
public HmacKeyMetadata getHmacKey (String accessId , GetHmacKeyOption ... options ) {
1267
- Opts <HmacKeySourceOpt > opts = Opts .unwrap (options );
1278
+ Opts <HmacKeySourceOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
1268
1279
GrpcCallContext grpcCallContext =
1269
1280
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
1270
1281
GetHmacKeyRequest request =
@@ -1283,7 +1294,7 @@ public HmacKeyMetadata getHmacKey(String accessId, GetHmacKeyOption... options)
1283
1294
1284
1295
@ Override
1285
1296
public void deleteHmacKey (HmacKeyMetadata hmacKeyMetadata , DeleteHmacKeyOption ... options ) {
1286
- Opts <HmacKeyTargetOpt > opts = Opts .unwrap (options );
1297
+ Opts <HmacKeyTargetOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
1287
1298
GrpcCallContext grpcCallContext =
1288
1299
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
1289
1300
DeleteHmacKeyRequest req =
@@ -1304,7 +1315,7 @@ public void deleteHmacKey(HmacKeyMetadata hmacKeyMetadata, DeleteHmacKeyOption..
1304
1315
@ Override
1305
1316
public HmacKeyMetadata updateHmacKeyState (
1306
1317
HmacKeyMetadata hmacKeyMetadata , HmacKeyState state , UpdateHmacKeyOption ... options ) {
1307
- Opts <HmacKeyTargetOpt > opts = Opts .unwrap (options );
1318
+ Opts <HmacKeyTargetOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
1308
1319
GrpcCallContext grpcCallContext =
1309
1320
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
1310
1321
com .google .storage .v2 .HmacKeyMetadata encode =
@@ -1323,7 +1334,7 @@ public HmacKeyMetadata updateHmacKeyState(
1323
1334
1324
1335
@ Override
1325
1336
public Policy getIamPolicy (String bucket , BucketSourceOption ... options ) {
1326
- Opts <BucketSourceOpt > opts = Opts .unwrap (options );
1337
+ Opts <BucketSourceOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
1327
1338
GrpcCallContext grpcCallContext =
1328
1339
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
1329
1340
GetIamPolicyRequest .Builder builder =
@@ -1338,7 +1349,7 @@ public Policy getIamPolicy(String bucket, BucketSourceOption... options) {
1338
1349
1339
1350
@ Override
1340
1351
public Policy setIamPolicy (String bucket , Policy policy , BucketSourceOption ... options ) {
1341
- Opts <BucketSourceOpt > opts = Opts .unwrap (options );
1352
+ Opts <BucketSourceOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
1342
1353
GrpcCallContext grpcCallContext =
1343
1354
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
1344
1355
SetIamPolicyRequest req =
@@ -1356,7 +1367,7 @@ public Policy setIamPolicy(String bucket, Policy policy, BucketSourceOption... o
1356
1367
@ Override
1357
1368
public List <Boolean > testIamPermissions (
1358
1369
String bucket , List <String > permissions , BucketSourceOption ... options ) {
1359
- Opts <BucketSourceOpt > opts = Opts .unwrap (options );
1370
+ Opts <BucketSourceOpt > opts = Opts .unwrap (options ). prepend ( defaultOpts ) ;
1360
1371
GrpcCallContext grpcCallContext =
1361
1372
opts .grpcMetadataMapper ().apply (GrpcCallContext .createDefault ());
1362
1373
TestIamPermissionsRequest req =
@@ -1706,7 +1717,7 @@ private WriteObjectRequest getWriteObjectRequest(BlobInfo info, Opts<ObjectTarge
1706
1717
1707
1718
private UnbufferedReadableByteChannelSession <Object > unbufferedReadSession (
1708
1719
BlobId blob , BlobSourceOption [] options ) {
1709
- Opts <ObjectSourceOpt > opts = Opts .unwrap (options ).resolveFrom (blob );
1720
+ Opts <ObjectSourceOpt > opts = Opts .unwrap (options ).resolveFrom (blob ). prepend ( defaultOpts ) ;
1710
1721
ReadObjectRequest readObjectRequest = getReadObjectRequest (blob , opts );
1711
1722
Set <StatusCode .Code > codes =
1712
1723
resultRetryAlgorithmToCodes (retryAlgorithmManager .getFor (readObjectRequest ));
0 commit comments