Skip to content

Commit 369c8e3

Browse files
authored
---
yaml --- r: 7571 b: refs/heads/tswast-patch-1 c: f9c2471 h: refs/heads/master i: 7569: 7580ab2 7567: 389c554
1 parent 193e233 commit 369c8e3

27 files changed

Lines changed: 2401 additions & 64 deletions

File tree

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,5 @@ refs/tags/v0.18.0: 9d193c4c4b9d1c6f21515dd8e50836b9194ec9bb
5757
refs/tags/v0.19.0: e67b56e4d8dad5f9a7b38c9b2107c23c828f2ed5
5858
refs/tags/v0.20.0: 839f7fb7156535146aa1cb2c5aadd8d375d854e8
5959
refs/tags/v0.20.1: 370471f437f1f4f68a11e068df5cd6bf39edb1fa
60-
refs/heads/tswast-patch-1: 401509466efe747b6c697130b103b0a06ebdbe82
60+
refs/heads/tswast-patch-1: f9c2471f64b04a24548869b4f019dfee1b1bba62
6161
refs/heads/pubsub-streaming-pull: 19262b752ee874eb2ca3b950eb2aef44d5a5267b

branches/tswast-patch-1/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableDataWriteChannel.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,16 @@
2424
import com.google.cloud.RetryHelper;
2525
import com.google.cloud.WriteChannel;
2626

27+
import java.util.concurrent.Callable;
28+
2729
/**
2830
* WriteChannel implementation to stream data into a BigQuery table.
2931
*/
3032
class TableDataWriteChannel extends BaseWriteChannel<BigQueryOptions, WriteChannelConfiguration> {
3133

3234
TableDataWriteChannel(BigQueryOptions options,
3335
WriteChannelConfiguration writeChannelConfiguration) {
34-
this(options, writeChannelConfiguration, options.rpc().open(writeChannelConfiguration.toPb()));
36+
this(options, writeChannelConfiguration, open(options, writeChannelConfiguration));
3537
}
3638

3739
TableDataWriteChannel(BigQueryOptions options, WriteChannelConfiguration config,
@@ -58,6 +60,20 @@ protected StateImpl.Builder stateBuilder() {
5860
return StateImpl.builder(options(), entity(), uploadId());
5961
}
6062

63+
private static String open(final BigQueryOptions options,
64+
final WriteChannelConfiguration writeChannelConfiguration) {
65+
try {
66+
return runWithRetries(new Callable<String>() {
67+
@Override
68+
public String call() {
69+
return options.rpc().open(writeChannelConfiguration.toPb());
70+
}
71+
}, options.retryParams(), BigQueryImpl.EXCEPTION_HANDLER, options.clock());
72+
} catch (RetryHelper.RetryHelperException e) {
73+
throw BigQueryException.translateAndThrow(e);
74+
}
75+
}
76+
6177
static class StateImpl
6278
extends BaseWriteChannel.BaseState<BigQueryOptions, WriteChannelConfiguration> {
6379

branches/tswast-patch-1/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableDataWriteChannelTest.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,12 @@
3939
import org.easymock.CaptureType;
4040
import org.junit.After;
4141
import org.junit.Before;
42+
import org.junit.Rule;
4243
import org.junit.Test;
44+
import org.junit.rules.ExpectedException;
4345

4446
import java.io.IOException;
47+
import java.net.SocketException;
4548
import java.nio.ByteBuffer;
4649
import java.util.Arrays;
4750
import java.util.Random;
@@ -63,6 +66,9 @@ public class TableDataWriteChannelTest {
6366
private static final int CUSTOM_CHUNK_SIZE = 4 * MIN_CHUNK_SIZE;
6467
private static final Random RANDOM = new Random();
6568

69+
@Rule
70+
public ExpectedException thrown = ExpectedException.none();
71+
6672
private BigQueryOptions options;
6773
private BigQueryRpcFactory rpcFactoryMock;
6874
private BigQueryRpc bigqueryRpcMock;
@@ -72,8 +78,7 @@ public class TableDataWriteChannelTest {
7278
public void setUp() {
7379
rpcFactoryMock = createMock(BigQueryRpcFactory.class);
7480
bigqueryRpcMock = createMock(BigQueryRpc.class);
75-
expect(rpcFactoryMock.create(anyObject(BigQueryOptions.class)))
76-
.andReturn(bigqueryRpcMock);
81+
expect(rpcFactoryMock.create(anyObject(BigQueryOptions.class))).andReturn(bigqueryRpcMock);
7782
replay(rpcFactoryMock);
7883
options = BigQueryOptions.builder()
7984
.projectId("projectid")
@@ -94,6 +99,24 @@ public void testCreate() {
9499
assertTrue(writer.isOpen());
95100
}
96101

102+
@Test
103+
public void testCreateRetryableError() {
104+
BigQueryException exception = new BigQueryException(new SocketException("Socket closed"));
105+
expect(bigqueryRpcMock.open(LOAD_CONFIGURATION.toPb())).andThrow(exception);
106+
expect(bigqueryRpcMock.open(LOAD_CONFIGURATION.toPb())).andReturn(UPLOAD_ID);
107+
replay(bigqueryRpcMock);
108+
writer = new TableDataWriteChannel(options, LOAD_CONFIGURATION);
109+
assertTrue(writer.isOpen());
110+
}
111+
112+
@Test
113+
public void testCreateNonRetryableError() {
114+
expect(bigqueryRpcMock.open(LOAD_CONFIGURATION.toPb())).andThrow(new RuntimeException());
115+
replay(bigqueryRpcMock);
116+
thrown.expect(RuntimeException.class);
117+
new TableDataWriteChannel(options, LOAD_CONFIGURATION);
118+
}
119+
97120
@Test
98121
public void testWriteWithoutFlush() throws IOException {
99122
expect(bigqueryRpcMock.open(LOAD_CONFIGURATION.toPb())).andReturn(UPLOAD_ID);

branches/tswast-patch-1/google-cloud-contrib/google-cloud-nio/src/test/java/com/google/cloud/storage/contrib/nio/FakeStorageRpc.java

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package com.google.cloud.storage.contrib.nio;
1818

1919
import com.google.api.services.storage.model.Bucket;
20+
import com.google.api.services.storage.model.BucketAccessControl;
21+
import com.google.api.services.storage.model.ObjectAccessControl;
2022
import com.google.api.services.storage.model.StorageObject;
2123
import com.google.cloud.storage.Storage;
2224
import com.google.cloud.storage.StorageException;
@@ -336,6 +338,81 @@ public RewriteResponse continueRewrite(RewriteResponse previousResponse) throws
336338
throw new UnsupportedOperationException();
337339
}
338340

341+
@Override
342+
public BucketAccessControl getAcl(String bucket, String entity) {
343+
throw new UnsupportedOperationException();
344+
}
345+
346+
@Override
347+
public boolean deleteAcl(String bucket, String entity) {
348+
throw new UnsupportedOperationException();
349+
}
350+
351+
@Override
352+
public BucketAccessControl createAcl(BucketAccessControl acl) {
353+
throw new UnsupportedOperationException();
354+
}
355+
356+
@Override
357+
public BucketAccessControl patchAcl(BucketAccessControl acl) {
358+
throw new UnsupportedOperationException();
359+
}
360+
361+
@Override
362+
public List<BucketAccessControl> listAcls(String bucket) {
363+
throw new UnsupportedOperationException();
364+
}
365+
366+
@Override
367+
public ObjectAccessControl getDefaultAcl(String bucket, String entity) {
368+
throw new UnsupportedOperationException();
369+
}
370+
371+
@Override
372+
public boolean deleteDefaultAcl(String bucket, String entity) {
373+
throw new UnsupportedOperationException();
374+
}
375+
376+
@Override
377+
public ObjectAccessControl createDefaultAcl(ObjectAccessControl acl) {
378+
throw new UnsupportedOperationException();
379+
}
380+
381+
@Override
382+
public ObjectAccessControl patchDefaultAcl(ObjectAccessControl acl) {
383+
throw new UnsupportedOperationException();
384+
}
385+
386+
@Override
387+
public List<ObjectAccessControl> listDefaultAcls(String bucket) {
388+
throw new UnsupportedOperationException();
389+
}
390+
391+
@Override
392+
public ObjectAccessControl getAcl(String bucket, String object, Long generation, String entity) {
393+
throw new UnsupportedOperationException();
394+
}
395+
396+
@Override
397+
public boolean deleteAcl(String bucket, String object, Long generation, String entity) {
398+
throw new UnsupportedOperationException();
399+
}
400+
401+
@Override
402+
public ObjectAccessControl createAcl(ObjectAccessControl acl) {
403+
throw new UnsupportedOperationException();
404+
}
405+
406+
@Override
407+
public ObjectAccessControl patchAcl(ObjectAccessControl acl) {
408+
throw new UnsupportedOperationException();
409+
}
410+
411+
@Override
412+
public List<ObjectAccessControl> listAcls(String bucket, String object, Long generation) {
413+
throw new UnsupportedOperationException();
414+
}
415+
339416
private String fullname(StorageObject so) {
340417
return (so.getBucket() + "/" + so.getName());
341418
}

branches/tswast-patch-1/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/StorageExample.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -582,24 +582,18 @@ public void run(Storage storage, Tuple<BlobId, Acl> params) {
582582
System.out.printf("Bucket %s does not exist%n", blobId.bucket());
583583
return;
584584
}
585-
bucket.toBuilder().acl(addAcl(bucket.acl(), acl)).build().update();
585+
acl = bucket.createAcl(acl);
586586
System.out.printf("Added ACL %s to bucket %s%n", acl, blobId.bucket());
587587
} else {
588588
Blob blob = storage.get(blobId);
589589
if (blob == null) {
590590
System.out.printf("Blob %s does not exist%n", blobId);
591591
return;
592592
}
593-
blob.toBuilder().acl(addAcl(blob.acl(), acl)).build().update();
593+
acl = blob.createAcl(acl);
594594
System.out.printf("Added ACL %s to blob %s%n", acl, blobId);
595595
}
596596
}
597-
598-
private static List<Acl> addAcl(List<Acl> acls, Acl newAcl) {
599-
List<Acl> newAcls = new LinkedList<>(acls);
600-
newAcls.add(newAcl);
601-
return newAcls;
602-
}
603597
}
604598

605599
/**

branches/tswast-patch-1/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/BlobSnippets.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import com.google.cloud.ReadChannel;
2929
import com.google.cloud.ServiceAccountSigner;
3030
import com.google.cloud.WriteChannel;
31+
import com.google.cloud.storage.Acl;
32+
import com.google.cloud.storage.Acl.User;
3133
import com.google.cloud.storage.Blob;
3234
import com.google.cloud.storage.Blob.BlobSourceOption;
3335
import com.google.cloud.storage.BlobId;
@@ -40,6 +42,7 @@
4042
import java.net.URL;
4143
import java.nio.ByteBuffer;
4244
import java.util.HashMap;
45+
import java.util.List;
4346
import java.util.Map;
4447
import java.util.concurrent.TimeUnit;
4548

@@ -228,4 +231,67 @@ public URL signUrlWithSigner(String keyPath) throws IOException {
228231
// [END signUrlWithSigner]
229232
return signedUrl;
230233
}
234+
235+
/**
236+
* Example of getting the ACL entry for an entity.
237+
*/
238+
// [TARGET getAcl(Entity)]
239+
public Acl getAcl() {
240+
// [START getAcl]
241+
Acl acl = blob.getAcl(User.ofAllAuthenticatedUsers());
242+
// [END getAcl]
243+
return acl;
244+
}
245+
246+
/**
247+
* Example of deleting the ACL entry for an entity.
248+
*/
249+
// [TARGET deleteAcl(Entity)]
250+
public boolean deleteAcl() {
251+
// [START deleteAcl]
252+
boolean deleted = blob.deleteAcl(User.ofAllAuthenticatedUsers());
253+
if (deleted) {
254+
// the acl entry was deleted
255+
} else {
256+
// the acl entry was not found
257+
}
258+
// [END deleteAcl]
259+
return deleted;
260+
}
261+
262+
/**
263+
* Example of creating a new ACL entry.
264+
*/
265+
// [TARGET createAcl(Acl)]
266+
public Acl createAcl() {
267+
// [START createAcl]
268+
Acl acl = blob.createAcl(Acl.of(User.ofAllAuthenticatedUsers(), Acl.Role.READER));
269+
// [END createAcl]
270+
return acl;
271+
}
272+
273+
/**
274+
* Example of updating a new ACL entry.
275+
*/
276+
// [TARGET updateAcl(Acl)]
277+
public Acl updateAcl() {
278+
// [START updateAcl]
279+
Acl acl = blob.updateAcl(Acl.of(User.ofAllAuthenticatedUsers(), Acl.Role.OWNER));
280+
// [END updateAcl]
281+
return acl;
282+
}
283+
284+
/**
285+
* Example of listing the ACL entries.
286+
*/
287+
// [TARGET listAcls()]
288+
public List<Acl> listAcls() {
289+
// [START listAcls]
290+
List<Acl> acls = blob.listAcls();
291+
for (Acl acl : acls) {
292+
// do something with ACL entry
293+
}
294+
// [END listAcls]
295+
return acls;
296+
}
231297
}

0 commit comments

Comments
 (0)