Skip to content

Commit cbd8f70

Browse files
committed
---
yaml --- r: 1977 b: refs/heads/pubsub-alpha c: a27282e h: refs/heads/master i: 1975: c35cf87
1 parent e8109ce commit cbd8f70

9 files changed

Lines changed: 129 additions & 11 deletions

File tree

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ refs/heads/master: 689bbb466df4b2d5d2483d6edb8ac5c7c7f7c6fa
33
refs/heads/travis: e21ee7b88a5edc3f3d8c71f90c3fc32abf7e8dd6
44
refs/heads/gh-pages: 4e0561bb4504bf647db669a14417b2b2c87ba45d
55
refs/heads/bigquery: 762fa5830e6c398c0396177e3e7fd243bd62cfc3
6-
refs/heads/pubsub-alpha: 8ebfdf87356e9f0df3921e404b5bcafb7705b5ed
6+
refs/heads/pubsub-alpha: a27282e2804617ea020614467ad9e59e9f7b9462
77
refs/heads/resource-manager: ebf4adc5ee835cd2086c4ac5b4e78d01a5a005a7
88
refs/heads/update-datastore: 482954f2c5055231e5b3122ea91d2ba00ce8187c
99
refs/tags/0.0.9: 22f1839238f66c39e67ed4dfdcd273b1ae2e8444

branches/pubsub-alpha/README.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@ Most `gcloud-java` libraries require a project ID. There are multiple ways to s
7575
Authentication
7676
--------------
7777

78-
There are multiple ways to authenticate to use Google Cloud services.
78+
First, ensure that the necessary Google Cloud APIs are enabled for your project. To do this, follow the instructions on the [authentication document](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/authentication/readme.md#authentication) shared by all the gcloud language libraries.
79+
80+
Next, choose a method for authenticating API requests from within your project:
7981

8082
1. When using `gcloud-java` libraries from within Compute/App Engine, no additional authentication steps are necessary.
8183
2. When using `gcloud-java` libraries elsewhere, there are two options:
@@ -180,6 +182,11 @@ if (blob == null) {
180182
}
181183
```
182184
185+
Troubleshooting
186+
---------------
187+
188+
To get help, follow the `gcloud-java` links in the `gcloud-*` [shared Troubleshooting document](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/troubleshooting/readme.md#troubleshooting).
189+
183190
Java Versions
184191
-------------
185192
@@ -206,7 +213,7 @@ Contributing
206213
207214
Contributions to this library are always welcome and highly encouraged.
208215
209-
See [CONTRIBUTING] for more information on how to get started.
216+
See `gcloud-java`'s [CONTRIBUTING] documentation and the `gcloud-*` [shared documentation](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/contributing/readme.md#how-to-contribute-to-gcloud) for more information on how to get started.
210217
211218
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more information.
212219
@@ -217,7 +224,7 @@ Apache 2.0 - See [LICENSE] for more information.
217224
218225
219226
[CONTRIBUTING]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CONTRIBUTING.md
220-
[code-of-conduct]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CODE_OF_CONDUCT.md
227+
[code-of-conduct]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CODE_OF_CONDUCT.md#contributor-code-of-conduct
221228
[LICENSE]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/LICENSE
222229
[TESTING]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/TESTING.md
223230
[cloud-platform]: https://cloud.google.com/

branches/pubsub-alpha/gcloud-java-core/README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ If you are using SBT, add this to your dependencies
2929
libraryDependencies += "com.google.gcloud" % "gcloud-java-core" % "0.0.12"
3030
```
3131

32+
Troubleshooting
33+
---------------
34+
35+
To get help, follow the `gcloud-java` links in the `gcloud-*` [shared Troubleshooting document](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/troubleshooting/readme.md#troubleshooting).
36+
3237
Java Versions
3338
-------------
3439

@@ -39,7 +44,9 @@ Contributing
3944

4045
Contributions to this library are always welcome and highly encouraged.
4146

42-
See [CONTRIBUTING] for more information on how to get started.
47+
See `gcloud-java`'s [CONTRIBUTING] documentation and the `gcloud-*` [shared documentation](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/contributing/readme.md#how-to-contribute-to-gcloud) for more information on how to get started.
48+
49+
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more information.
4350

4451
Versioning
4552
----------
@@ -57,5 +64,6 @@ Apache 2.0 - See [LICENSE] for more information.
5764

5865

5966
[CONTRIBUTING]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CONTRIBUTING.md
67+
[code-of-conduct]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CODE_OF_CONDUCT.md#contributor-code-of-conduct
6068
[LICENSE]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/LICENSE
6169
[cloud-platform]: https://cloud.google.com/

branches/pubsub-alpha/gcloud-java-datastore/README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,11 @@ public class GcloudJavaDatastoreExample {
189189
}
190190
```
191191

192+
Troubleshooting
193+
---------------
194+
195+
To get help, follow the `gcloud-java` links in the `gcloud-*` [shared Troubleshooting document](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/troubleshooting/readme.md#troubleshooting).
196+
192197
Java Versions
193198
-------------
194199

@@ -215,7 +220,9 @@ Contributing
215220

216221
Contributions to this library are always welcome and highly encouraged.
217222

218-
See [CONTRIBUTING] for more information on how to get started.
223+
See `gcloud-java`'s [CONTRIBUTING] documentation and the `gcloud-*` [shared documentation](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/contributing/readme.md#how-to-contribute-to-gcloud) for more information on how to get started.
224+
225+
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more information.
219226

220227
License
221228
-------
@@ -224,6 +231,7 @@ Apache 2.0 - See [LICENSE] for more information.
224231

225232

226233
[CONTRIBUTING]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CONTRIBUTING.md
234+
[code-of-conduct]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CODE_OF_CONDUCT.md#contributor-code-of-conduct
227235
[LICENSE]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/LICENSE
228236
[TESTING]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/TESTING.md#testing-code-that-uses-datastore
229237
[cloud-platform]: https://cloud.google.com/

branches/pubsub-alpha/gcloud-java-examples/README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ To run examples from your command line:
5858
$mvn exec:java -Dexec.mainClass="com.google.gcloud.examples.StorageExample" -Dexec.args="delete <bucket_name> test.txt"
5959
```
6060

61+
Troubleshooting
62+
---------------
63+
64+
To get help, follow the `gcloud-java` links in the `gcloud-*` [shared Troubleshooting document](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/troubleshooting/readme.md#troubleshooting).
65+
6166
Java Versions
6267
-------------
6368

@@ -77,7 +82,9 @@ Contributing
7782

7883
Contributions to this library are always welcome and highly encouraged.
7984

80-
See [CONTRIBUTING] for more information on how to get started.
85+
See `gcloud-java`'s [CONTRIBUTING] documentation and the `gcloud-*` [shared documentation](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/contributing/readme.md#how-to-contribute-to-gcloud) for more information on how to get started.
86+
87+
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more information.
8188

8289
License
8390
-------
@@ -86,6 +93,7 @@ Apache 2.0 - See [LICENSE] for more information.
8693

8794

8895
[CONTRIBUTING]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CONTRIBUTING.md
96+
[code-of-conduct]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CODE_OF_CONDUCT.md#contributor-code-of-conduct
8997
[LICENSE]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/LICENSE
9098
[cloud-platform]: https://cloud.google.com/
9199
[developers-console]:https://console.developers.google.com/

branches/pubsub-alpha/gcloud-java-storage/README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,11 @@ public class GcloudStorageExample {
191191
}
192192
```
193193

194+
Troubleshooting
195+
---------------
196+
197+
To get help, follow the `gcloud-java` links in the `gcloud-*` [shared Troubleshooting document](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/troubleshooting/readme.md#troubleshooting).
198+
194199
Java Versions
195200
-------------
196201

@@ -217,7 +222,9 @@ Contributing
217222

218223
Contributions to this library are always welcome and highly encouraged.
219224

220-
See [CONTRIBUTING] for more information on how to get started.
225+
See `gcloud-java`'s [CONTRIBUTING] documentation and the `gcloud-*` [shared documentation](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/contributing/readme.md#how-to-contribute-to-gcloud) for more information on how to get started.
226+
227+
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more information.
221228

222229
License
223230
-------
@@ -226,6 +233,7 @@ Apache 2.0 - See [LICENSE] for more information.
226233

227234

228235
[CONTRIBUTING]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CONTRIBUTING.md
236+
[code-of-conduct]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CODE_OF_CONDUCT.md#contributor-code-of-conduct
229237
[LICENSE]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/LICENSE
230238
[TESTING]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/TESTING.md#testing-code-that-uses-storage
231239
[cloud-platform]: https://cloud.google.com/
@@ -234,3 +242,4 @@ Apache 2.0 - See [LICENSE] for more information.
234242
[cloud-storage-docs]: https://cloud.google.com/storage/docs/overview
235243
[cloud-storage-create-bucket]: https://cloud.google.com/storage/docs/cloud-console#_creatingbuckets
236244
[storage-api]: http://googlecloudplatform.github.io/gcloud-java/apidocs/index.html?com/google/gcloud/storage/package-summary.html
245+
[cloud-storage-activation]:https://cloud.google.com/storage/docs/signup?hl=en

branches/pubsub-alpha/gcloud-java-storage/src/main/java/com/google/gcloud/spi/DefaultStorageRpc.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import com.google.api.client.googleapis.batch.json.JsonBatchCallback;
3636
import com.google.api.client.googleapis.json.GoogleJsonError;
3737
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
38-
import com.google.api.client.googleapis.media.MediaHttpDownloader;
3938
import com.google.api.client.http.ByteArrayContent;
4039
import com.google.api.client.http.GenericUrl;
4140
import com.google.api.client.http.HttpHeaders;
@@ -59,16 +58,18 @@
5958
import com.google.api.services.storage.model.Objects;
6059
import com.google.api.services.storage.model.StorageObject;
6160
import com.google.common.base.MoreObjects;
61+
import com.google.common.collect.ImmutableList;
6262
import com.google.common.collect.ImmutableSet;
63+
import com.google.common.collect.Lists;
6364
import com.google.common.collect.Maps;
64-
import com.google.common.primitives.Ints;
6565
import com.google.gcloud.storage.StorageException;
6666
import com.google.gcloud.storage.StorageOptions;
6767

6868
import java.io.ByteArrayOutputStream;
6969
import java.io.IOException;
7070
import java.io.InputStream;
7171
import java.util.ArrayList;
72+
import java.util.Iterator;
7273
import java.util.List;
7374
import java.util.Map;
7475
import java.util.Set;
@@ -82,6 +83,7 @@ public class DefaultStorageRpc implements StorageRpc {
8283
// see: https://cloud.google.com/storage/docs/concepts-techniques#practices
8384
private static final Set<Integer> RETRYABLE_CODES = ImmutableSet.of(504, 503, 502, 500, 429, 408);
8485
private static final long MEGABYTE = 1024L * 1024L;
86+
private static final int MAX_BATCH_DELETES = 100;
8587

8688
public DefaultStorageRpc(StorageOptions options) {
8789
HttpTransport transport = options.httpTransportFactory().create();
@@ -361,6 +363,24 @@ public byte[] load(StorageObject from, Map<Option, ?> options)
361363

362364
@Override
363365
public BatchResponse batch(BatchRequest request) throws StorageException {
366+
List<List<Tuple<StorageObject, Map<Option, ?>>>> partitionedToDelete =
367+
Lists.partition(request.toDelete, MAX_BATCH_DELETES);
368+
Iterator<List<Tuple<StorageObject, Map<Option, ?>>>> iterator = partitionedToDelete.iterator();
369+
BatchRequest chunkRequest = new BatchRequest(iterator.hasNext() ? iterator.next() :
370+
ImmutableList.<Tuple<StorageObject, Map<Option, ?>>>of(), request.toUpdate, request.toGet);
371+
BatchResponse response = batchChunk(chunkRequest);
372+
Map<StorageObject, Tuple<Boolean, StorageException>> deletes =
373+
Maps.newHashMapWithExpectedSize(request.toDelete.size());
374+
deletes.putAll(response.deletes);
375+
while (iterator.hasNext()) {
376+
chunkRequest = new BatchRequest(iterator.next(), null, null);
377+
BatchResponse deleteBatchResponse = batchChunk(chunkRequest);
378+
deletes.putAll(deleteBatchResponse.deletes);
379+
}
380+
return new BatchResponse(deletes, response.updates, response.gets);
381+
}
382+
383+
private BatchResponse batchChunk(BatchRequest request) {
364384
com.google.api.client.googleapis.batch.BatchRequest batch = storage.batch();
365385
final Map<StorageObject, Tuple<Boolean, StorageException>> deletes =
366386
Maps.newConcurrentMap();

branches/pubsub-alpha/gcloud-java-storage/src/test/java/com/google/gcloud/storage/ITStorageTest.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import static org.junit.Assert.assertTrue;
2626
import static org.junit.Assert.fail;
2727

28+
import com.google.api.client.util.Lists;
2829
import com.google.common.collect.ImmutableList;
2930
import com.google.common.collect.ImmutableMap;
3031
import com.google.gcloud.Page;
@@ -65,6 +66,7 @@ public class ITStorageTest {
6566
private static final String CONTENT_TYPE = "text/plain";
6667
private static final byte[] BLOB_BYTE_CONTENT = {0xD, 0xE, 0xA, 0xD};
6768
private static final String BLOB_STRING_CONTENT = "Hello Google Cloud Storage!";
69+
private static final int MAX_BATCH_DELETES = 100;
6870

6971
@BeforeClass
7072
public static void beforeClass() {
@@ -623,6 +625,54 @@ public void testBatchRequest() {
623625
assertTrue(deleteResponse.deletes().get(1).get());
624626
}
625627

628+
@Test
629+
public void testBatchRequestManyDeletes() {
630+
List<BlobId> blobsToDelete = Lists.newArrayListWithCapacity(2 * MAX_BATCH_DELETES);
631+
for (int i = 0; i < 2 * MAX_BATCH_DELETES; i++) {
632+
blobsToDelete.add(BlobId.of(BUCKET, "test-batch-request-many-deletes-blob-" + i));
633+
}
634+
BatchRequest.Builder builder = BatchRequest.builder();
635+
for (BlobId blob : blobsToDelete) {
636+
builder.delete(blob);
637+
}
638+
String sourceBlobName1 = "test-batch-request-many-deletes-source-blob-1";
639+
String sourceBlobName2 = "test-batch-request-many-deletes-source-blob-2";
640+
BlobInfo sourceBlob1 = BlobInfo.builder(BUCKET, sourceBlobName1).build();
641+
BlobInfo sourceBlob2 = BlobInfo.builder(BUCKET, sourceBlobName2).build();
642+
assertNotNull(storage.create(sourceBlob1));
643+
assertNotNull(storage.create(sourceBlob2));
644+
BlobInfo updatedBlob2 = sourceBlob2.toBuilder().contentType(CONTENT_TYPE).build();
645+
646+
BatchRequest updateRequest = builder
647+
.get(BUCKET, sourceBlobName1)
648+
.update(updatedBlob2)
649+
.build();
650+
BatchResponse response = storage.apply(updateRequest);
651+
assertEquals(2 * MAX_BATCH_DELETES, response.deletes().size());
652+
assertEquals(1, response.updates().size());
653+
assertEquals(1, response.gets().size());
654+
655+
// Check deletes
656+
for (BatchResponse.Result<Boolean> deleteResult : response.deletes()) {
657+
assertFalse(deleteResult.failed());
658+
assertFalse(deleteResult.get());
659+
}
660+
661+
// Check updates
662+
BlobInfo remoteUpdatedBlob2 = response.updates().get(0).get();
663+
assertEquals(sourceBlob2.bucket(), remoteUpdatedBlob2.bucket());
664+
assertEquals(sourceBlob2.name(), remoteUpdatedBlob2.name());
665+
assertEquals(updatedBlob2.contentType(), remoteUpdatedBlob2.contentType());
666+
667+
// Check gets
668+
BlobInfo remoteBlob1 = response.gets().get(0).get();
669+
assertEquals(sourceBlob1.bucket(), remoteBlob1.bucket());
670+
assertEquals(sourceBlob1.name(), remoteBlob1.name());
671+
672+
assertTrue(storage.delete(BUCKET, sourceBlobName1));
673+
assertTrue(storage.delete(BUCKET, sourceBlobName2));
674+
}
675+
626676
@Test
627677
public void testBatchRequestFail() {
628678
String blobName = "test-batch-request-blob-fail";

branches/pubsub-alpha/gcloud-java/README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ If you are using SBT, add this to your dependencies
3737
libraryDependencies += "com.google.gcloud" % "gcloud-java" % "0.0.12"
3838
```
3939

40+
Troubleshooting
41+
---------------
42+
43+
To get help, follow the `gcloud-java` links in the `gcloud-*` [shared Troubleshooting document](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/troubleshooting/readme.md#troubleshooting).
44+
4045
Java Versions
4146
-------------
4247

@@ -56,7 +61,9 @@ Contributing
5661

5762
Contributions to this library are always welcome and highly encouraged.
5863

59-
See [CONTRIBUTING] for more information on how to get started.
64+
See `gcloud-java`'s [CONTRIBUTING] documentation and the `gcloud-*` [shared documentation](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/contributing/readme.md#how-to-contribute-to-gcloud) for more information on how to get started.
65+
66+
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more information.
6067

6168
License
6269
-------
@@ -65,6 +72,7 @@ Apache 2.0 - See [LICENSE] for more information.
6572

6673

6774
[CONTRIBUTING]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CONTRIBUTING.md
75+
[code-of-conduct]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CODE_OF_CONDUCT.md#contributor-code-of-conduct
6876
[LICENSE]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/LICENSE
6977
[cloud-platform]: https://cloud.google.com/
7078
[cloud-datastore]: https://cloud.google.com/datastore/docs

0 commit comments

Comments
 (0)