embulk-input-gcs 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +23 -0
- data/CHANGELOG.md +49 -0
- data/README.md +1 -0
- data/build.gradle +1 -1
- data/src/main/java/org/embulk/input/gcs/GcsAuthentication.java +85 -11
- data/src/main/java/org/embulk/input/gcs/GcsFileInputPlugin.java +12 -4
- data/src/test/java/org/embulk/input/gcs/TestGcsAuthentication.java +8 -7
- data/src/test/java/org/embulk/input/gcs/TestGcsFileInputPlugin.java +2 -1
- data/src/test/resources/secretkeys.tar.enc +0 -0
- metadata +6 -4
- data/ChangeLog +0 -48
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e9248a8e1b730f9885caa93b24cbf47dfb8a8c0
|
4
|
+
data.tar.gz: 6405b783b5d7ea6a6b74f017946f69e9b7c5b3a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbbce0c9ba052477d392ba00586d6951f00924a9d163409b3394ac393035b9b33c5acb2aeecc2111b1a3febc8d59ab0b9401a4b680ed6e578cfc5e57ab844e3d
|
7
|
+
data.tar.gz: 23604910383ac32a7aa66b0afb94144cd23bea0b26866748d24ec8189f27ea313e4a9cda0a599a1aefce8be84e0bcc3957754dbe95e6d5755dfc517666685806
|
data/.travis.yml
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
language: java
|
2
|
+
|
3
|
+
jdk:
|
4
|
+
- oraclejdk8
|
5
|
+
- oraclejdk7
|
6
|
+
- openjdk7
|
7
|
+
|
8
|
+
before_install:
|
9
|
+
- openssl aes-256-cbc -K $encrypted_79f1af2a2546_key -iv $encrypted_79f1af2a2546_iv
|
10
|
+
-in src/test/resources/secretkeys.tar.enc -out secretkeys.tar -d
|
11
|
+
- tar xvf secretkeys.tar
|
12
|
+
|
13
|
+
env:
|
14
|
+
global:
|
15
|
+
- GCP_EMAIL=unittest@embulk-input-gcs-test.iam.gserviceaccount.com
|
16
|
+
- GCP_BUCKET=embulk-input-gcs-test
|
17
|
+
- GCP_BUCKET_DIRECTORY=unittests_import
|
18
|
+
- GCP_P12_KEYFILE=./embulk-input-gcs-test-018324286daf.p12
|
19
|
+
- GCP_JSON_KEYFILE=./embulk-input-gcs-test-841948b819cf.json
|
20
|
+
|
21
|
+
script:
|
22
|
+
- ./gradlew gem
|
23
|
+
- ./gradlew --info check jacocoTestReport
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
## 0.2.1 - 2016-08-04
|
2
|
+
* [maintenance] Use retry logic when generate GCS client [#21](https://github.com/embulk/embulk-input-gcs/pull/21)
|
3
|
+
|
4
|
+
## 0.2.0 - 2016-06-03
|
5
|
+
* [new feature] Support path option to allow to specify list of target objects directly @sonots thanks! [#17](https://github.com/embulk/embulk-input-gcs/pull/17)
|
6
|
+
|
7
|
+
## 0.1.13 - 2016-02-04
|
8
|
+
* [maintenance] Upgraded embulk to v0.8.2 [#14](https://github.com/embulk/embulk-input-gcs/pull/14)
|
9
|
+
* [maintenance] Updated Google HTTP Client Library from 1.19.0 to 2.1.21.0 [#15](https://github.com/embulk/embulk-input-gcs/pull/15)
|
10
|
+
* [maintenance] Updated Google Cloud Storage API Client Library from v1-rev27-1.19.1 to v1-rev59-1.21.0 [#15](https://github.com/embulk/embulk-input-gcs/pull/15)
|
11
|
+
|
12
|
+
## 0.1.11 - 2016-01-25
|
13
|
+
* [maintenance] Added retry logic [#11](https://github.com/embulk/embulk-input-gcs/pull/11)
|
14
|
+
|
15
|
+
## 0.1.10 - 2015-11-07
|
16
|
+
|
17
|
+
* [maintenance] Fix resume download logics [#10](https://github.com/embulk/embulk-input-gcs/pull/10)
|
18
|
+
* [maintenance] Throw ConfigException when files listing failed. @muga thanks! [#9](https://github.com/embulk/embulk-input-gcs/pull/9)
|
19
|
+
|
20
|
+
## 0.1.9 - 2015-10-30
|
21
|
+
|
22
|
+
* [maintenance] Fix GcsAuthentication object initialization for mapreduce executor. @muga thanks! [#7](https://github.com/embulk/embulk-input-gcs/pull/7)
|
23
|
+
|
24
|
+
## 0.1.8 - 2015-10-29
|
25
|
+
|
26
|
+
* [maintenance] Added unit tests [#8](https://github.com/embulk/embulk-input-gcs/pull/8)
|
27
|
+
|
28
|
+
## 0.1.7 - 2015-10-06
|
29
|
+
|
30
|
+
* [new feature] Added new auth method - json_keyfile of GCP(Google Cloud Platform)'s service account [#5](https://github.com/embulk/embulk-input-gcs/pull/5)
|
31
|
+
* [maintenance] Supported mapreduce-executor [#4](https://github.com/embulk/embulk-input-gcs/pull/4)
|
32
|
+
|
33
|
+
## 0.1.6 - 2015-09-05
|
34
|
+
|
35
|
+
* [new feature] Added new auth method - pre-defined access token of GCE(Google Compute Engine) [#3](https://github.com/embulk/embulk-input-gcs/pull/3)
|
36
|
+
|
37
|
+
## 0.1.5 - 2015-08-19
|
38
|
+
|
39
|
+
* [maintenance] Upgraded embulk version to 0.7.0
|
40
|
+
* [maintenance] Refactored
|
41
|
+
|
42
|
+
## 0.1.4 - 2015-06-27
|
43
|
+
|
44
|
+
* [maintenance] Keep last last_path when input files is empty. @frsyuki thanks! [#1](https://github.com/embulk/embulk-input-gcs/pull/1)
|
45
|
+
* [maintenance] Refactored error handling logics.
|
46
|
+
|
47
|
+
## 0.1.3 - 2015-03-16
|
48
|
+
|
49
|
+
* [maintenance] Changed supported Java version from 8 to 7
|
data/README.md
CHANGED
data/build.gradle
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
package org.embulk.input.gcs;
|
2
2
|
|
3
|
+
import com.google.api.client.auth.oauth2.TokenResponseException;
|
3
4
|
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
|
4
5
|
import com.google.api.client.googleapis.compute.ComputeCredential;
|
5
6
|
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
|
@@ -10,16 +11,21 @@ import com.google.api.client.json.JsonFactory;
|
|
10
11
|
import com.google.api.client.json.jackson2.JacksonFactory;
|
11
12
|
import com.google.api.services.storage.Storage;
|
12
13
|
import com.google.api.services.storage.StorageScopes;
|
13
|
-
import com.google.api.services.storage.model.Objects;
|
14
14
|
import com.google.common.base.Optional;
|
15
|
+
import com.google.common.base.Throwables;
|
15
16
|
import com.google.common.collect.ImmutableList;
|
17
|
+
import org.embulk.config.ConfigException;
|
16
18
|
import org.embulk.spi.Exec;
|
19
|
+
import org.embulk.spi.util.RetryExecutor.RetryGiveupException;
|
20
|
+
import org.embulk.spi.util.RetryExecutor.Retryable;
|
17
21
|
import org.slf4j.Logger;
|
22
|
+
import static org.embulk.spi.util.RetryExecutor.retryExecutor;
|
18
23
|
|
19
24
|
import java.io.File;
|
20
25
|
import java.io.FileInputStream;
|
21
26
|
|
22
27
|
import java.io.IOException;
|
28
|
+
import java.io.InterruptedIOException;
|
23
29
|
import java.security.GeneralSecurityException;
|
24
30
|
import java.util.Collections;
|
25
31
|
|
@@ -74,13 +80,13 @@ public class GcsAuthentication
|
|
74
80
|
StorageScopes.DEVSTORAGE_READ_ONLY
|
75
81
|
)
|
76
82
|
)
|
77
|
-
.setServiceAccountPrivateKeyFromP12File(new File(p12KeyFilePath.
|
83
|
+
.setServiceAccountPrivateKeyFromP12File(new File(p12KeyFilePath.get()))
|
78
84
|
.build();
|
79
85
|
}
|
80
86
|
|
81
87
|
private GoogleCredential getServiceAccountCredentialFromJsonFile() throws IOException
|
82
88
|
{
|
83
|
-
FileInputStream stream = new FileInputStream(jsonKeyFilePath.
|
89
|
+
FileInputStream stream = new FileInputStream(jsonKeyFilePath.get());
|
84
90
|
|
85
91
|
return GoogleCredential.fromStream(stream, httpTransport, jsonFactory)
|
86
92
|
.createScoped(Collections.singleton(StorageScopes.DEVSTORAGE_READ_ONLY));
|
@@ -99,16 +105,84 @@ public class GcsAuthentication
|
|
99
105
|
return credential;
|
100
106
|
}
|
101
107
|
|
102
|
-
public Storage getGcsClient(String bucket) throws
|
108
|
+
public Storage getGcsClient(final String bucket, int maxConnectionRetry) throws ConfigException, IOException
|
103
109
|
{
|
104
|
-
|
105
|
-
|
106
|
-
|
110
|
+
try {
|
111
|
+
return retryExecutor()
|
112
|
+
.withRetryLimit(maxConnectionRetry)
|
113
|
+
.withInitialRetryWait(500)
|
114
|
+
.withMaxRetryWait(30 * 1000)
|
115
|
+
.runInterruptible(new Retryable<Storage>() {
|
116
|
+
@Override
|
117
|
+
public Storage call() throws IOException, RetryGiveupException
|
118
|
+
{
|
119
|
+
Storage client = new Storage.Builder(httpTransport, jsonFactory, credentials)
|
120
|
+
.setApplicationName(applicationName)
|
121
|
+
.build();
|
122
|
+
|
123
|
+
// For throw ConfigException when authentication is fail.
|
124
|
+
long maxResults = 1;
|
125
|
+
client.objects().list(bucket).setMaxResults(maxResults).execute();
|
126
|
+
|
127
|
+
return client;
|
128
|
+
}
|
129
|
+
|
130
|
+
@Override
|
131
|
+
public boolean isRetryableException(Exception exception)
|
132
|
+
{
|
133
|
+
if (exception instanceof GoogleJsonResponseException || exception instanceof TokenResponseException) {
|
134
|
+
int statusCode;
|
135
|
+
if (exception instanceof GoogleJsonResponseException) {
|
136
|
+
statusCode = ((GoogleJsonResponseException) exception).getDetails().getCode();
|
137
|
+
}
|
138
|
+
else {
|
139
|
+
statusCode = ((TokenResponseException) exception).getStatusCode();
|
140
|
+
}
|
141
|
+
if (statusCode / 100 == 4) {
|
142
|
+
return false;
|
143
|
+
}
|
144
|
+
}
|
145
|
+
return true;
|
146
|
+
}
|
107
147
|
|
108
|
-
|
109
|
-
|
110
|
-
|
148
|
+
@Override
|
149
|
+
public void onRetry(Exception exception, int retryCount, int retryLimit, int retryWait)
|
150
|
+
throws RetryGiveupException
|
151
|
+
{
|
152
|
+
String message = String.format("GCS GET request failed. Retrying %d/%d after %d seconds. Message: %s: %s",
|
153
|
+
retryCount, retryLimit, retryWait / 1000, exception.getClass(), exception.getMessage());
|
154
|
+
if (retryCount % 3 == 0) {
|
155
|
+
log.warn(message, exception);
|
156
|
+
}
|
157
|
+
else {
|
158
|
+
log.warn(message);
|
159
|
+
}
|
160
|
+
}
|
111
161
|
|
112
|
-
|
162
|
+
@Override
|
163
|
+
public void onGiveup(Exception firstException, Exception lastException)
|
164
|
+
throws RetryGiveupException
|
165
|
+
{
|
166
|
+
}
|
167
|
+
});
|
168
|
+
}
|
169
|
+
catch (RetryGiveupException ex) {
|
170
|
+
if (ex.getCause() instanceof GoogleJsonResponseException || ex.getCause() instanceof TokenResponseException) {
|
171
|
+
int statusCode = 0;
|
172
|
+
if (ex.getCause() instanceof GoogleJsonResponseException) {
|
173
|
+
statusCode = ((GoogleJsonResponseException) ex.getCause()).getDetails().getCode();
|
174
|
+
}
|
175
|
+
else if (ex.getCause() instanceof TokenResponseException) {
|
176
|
+
statusCode = ((TokenResponseException) ex.getCause()).getStatusCode();
|
177
|
+
}
|
178
|
+
if (statusCode / 100 == 4) {
|
179
|
+
throw new ConfigException(ex);
|
180
|
+
}
|
181
|
+
}
|
182
|
+
throw Throwables.propagate(ex);
|
183
|
+
}
|
184
|
+
catch (InterruptedException ex) {
|
185
|
+
throw new InterruptedIOException();
|
186
|
+
}
|
113
187
|
}
|
114
188
|
}
|
@@ -90,6 +90,10 @@ public class GcsFileInputPlugin
|
|
90
90
|
List<String> getFiles();
|
91
91
|
void setFiles(List<String> files);
|
92
92
|
|
93
|
+
@Config("max_connection_retry")
|
94
|
+
@ConfigDefault("10") // 10 times retry to connect GCS server if failed.
|
95
|
+
int getMaxConnectionRetry();
|
96
|
+
|
93
97
|
@ConfigInject
|
94
98
|
BufferAllocator getBufferAllocator();
|
95
99
|
}
|
@@ -198,7 +202,7 @@ public class GcsFileInputPlugin
|
|
198
202
|
{
|
199
203
|
Storage client = null;
|
200
204
|
try {
|
201
|
-
client = auth.getGcsClient(task.getBucket());
|
205
|
+
client = auth.getGcsClient(task.getBucket(), task.getMaxConnectionRetry());
|
202
206
|
}
|
203
207
|
catch (IOException ex) {
|
204
208
|
throw new ConfigException(ex);
|
@@ -303,12 +307,14 @@ public class GcsFileInputPlugin
|
|
303
307
|
private final Storage client;
|
304
308
|
private final String bucket;
|
305
309
|
private final String key;
|
310
|
+
private final int maxConnectionRetry;
|
306
311
|
|
307
|
-
public GcsInputStreamReopener(Storage client, String bucket, String key)
|
312
|
+
public GcsInputStreamReopener(Storage client, String bucket, String key, int maxConnectionRetry)
|
308
313
|
{
|
309
314
|
this.client = client;
|
310
315
|
this.bucket = bucket;
|
311
316
|
this.key = key;
|
317
|
+
this.maxConnectionRetry = maxConnectionRetry;
|
312
318
|
}
|
313
319
|
|
314
320
|
@Override
|
@@ -316,7 +322,7 @@ public class GcsFileInputPlugin
|
|
316
322
|
{
|
317
323
|
try {
|
318
324
|
return retryExecutor()
|
319
|
-
.withRetryLimit(
|
325
|
+
.withRetryLimit(maxConnectionRetry)
|
320
326
|
.withInitialRetryWait(500)
|
321
327
|
.withMaxRetryWait(30 * 1000)
|
322
328
|
.runInterruptible(new Retryable<InputStream>() {
|
@@ -395,6 +401,7 @@ public class GcsFileInputPlugin
|
|
395
401
|
private final Storage client;
|
396
402
|
private final String bucket;
|
397
403
|
private final String key;
|
404
|
+
private final int maxConnectionRetry;
|
398
405
|
private boolean opened = false;
|
399
406
|
|
400
407
|
public SingleFileProvider(PluginTask task, int taskIndex)
|
@@ -402,6 +409,7 @@ public class GcsFileInputPlugin
|
|
402
409
|
this.client = newGcsClient(task, newGcsAuth(task));
|
403
410
|
this.bucket = task.getBucket();
|
404
411
|
this.key = task.getFiles().get(taskIndex);
|
412
|
+
this.maxConnectionRetry = task.getMaxConnectionRetry();
|
405
413
|
}
|
406
414
|
|
407
415
|
@Override
|
@@ -413,7 +421,7 @@ public class GcsFileInputPlugin
|
|
413
421
|
opened = true;
|
414
422
|
Storage.Objects.Get getObject = client.objects().get(bucket, key);
|
415
423
|
|
416
|
-
return new ResumableInputStream(getObject.executeMediaAsInputStream(), new GcsInputStreamReopener(client, bucket, key));
|
424
|
+
return new ResumableInputStream(getObject.executeMediaAsInputStream(), new GcsInputStreamReopener(client, bucket, key, maxConnectionRetry));
|
417
425
|
}
|
418
426
|
|
419
427
|
@Override
|
@@ -1,10 +1,10 @@
|
|
1
1
|
package org.embulk.input.gcs;
|
2
2
|
|
3
3
|
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
|
4
|
-
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
|
5
4
|
import com.google.api.services.storage.Storage;
|
6
5
|
import com.google.common.base.Optional;
|
7
6
|
import org.embulk.EmbulkTestRuntime;
|
7
|
+
import org.embulk.config.ConfigException;
|
8
8
|
import org.junit.BeforeClass;
|
9
9
|
import org.junit.Rule;
|
10
10
|
import org.junit.Test;
|
@@ -25,6 +25,7 @@ public class TestGcsAuthentication
|
|
25
25
|
private static Optional<String> GCP_JSON_KEYFILE;
|
26
26
|
private static String GCP_BUCKET;
|
27
27
|
private static final String GCP_APPLICATION_NAME = "embulk-input-gcs";
|
28
|
+
private static int MAX_CONNECTION_RETRY = 3;
|
28
29
|
|
29
30
|
/*
|
30
31
|
* This test case requires environment variables
|
@@ -97,12 +98,12 @@ public class TestGcsAuthentication
|
|
97
98
|
GCP_APPLICATION_NAME
|
98
99
|
);
|
99
100
|
|
100
|
-
Storage client = auth.getGcsClient(GCP_BUCKET);
|
101
|
+
Storage client = auth.getGcsClient(GCP_BUCKET, MAX_CONNECTION_RETRY);
|
101
102
|
|
102
103
|
assertEquals(Storage.class, client.getClass());
|
103
104
|
}
|
104
105
|
|
105
|
-
@Test(expected =
|
106
|
+
@Test(expected = ConfigException.class)
|
106
107
|
public void testGetGcsClientUsingServiceAccountCredentialThrowJsonResponseException()
|
107
108
|
throws NoSuchFieldException, IllegalAccessException, GeneralSecurityException, IOException
|
108
109
|
{
|
@@ -114,7 +115,7 @@ public class TestGcsAuthentication
|
|
114
115
|
GCP_APPLICATION_NAME
|
115
116
|
);
|
116
117
|
|
117
|
-
Storage client = auth.getGcsClient("non-exists-bucket");
|
118
|
+
Storage client = auth.getGcsClient("non-exists-bucket", MAX_CONNECTION_RETRY);
|
118
119
|
|
119
120
|
assertEquals(Storage.class, client.getClass());
|
120
121
|
}
|
@@ -162,12 +163,12 @@ public class TestGcsAuthentication
|
|
162
163
|
GCP_APPLICATION_NAME
|
163
164
|
);
|
164
165
|
|
165
|
-
Storage client = auth.getGcsClient(GCP_BUCKET);
|
166
|
+
Storage client = auth.getGcsClient(GCP_BUCKET, MAX_CONNECTION_RETRY);
|
166
167
|
|
167
168
|
assertEquals(Storage.class, client.getClass());
|
168
169
|
}
|
169
170
|
|
170
|
-
@Test(expected =
|
171
|
+
@Test(expected = ConfigException.class)
|
171
172
|
public void testGetServiceAccountCredentialFromJsonThrowGoogleJsonResponseException()
|
172
173
|
throws NoSuchFieldException, IllegalAccessException, GeneralSecurityException, IOException
|
173
174
|
{
|
@@ -179,6 +180,6 @@ public class TestGcsAuthentication
|
|
179
180
|
GCP_APPLICATION_NAME
|
180
181
|
);
|
181
182
|
|
182
|
-
Storage client = auth.getGcsClient("non-exists-bucket");
|
183
|
+
Storage client = auth.getGcsClient("non-exists-bucket", MAX_CONNECTION_RETRY);
|
183
184
|
}
|
184
185
|
}
|
@@ -52,6 +52,7 @@ public class TestGcsFileInputPlugin
|
|
52
52
|
private static String GCP_BUCKET_DIRECTORY;
|
53
53
|
private static String GCP_PATH_PREFIX;
|
54
54
|
private static String GCP_APPLICATION_NAME;
|
55
|
+
private static int MAX_CONNECTION_RETRY = 3;
|
55
56
|
private FileInputRunner runner;
|
56
57
|
private MockPageOutput output;
|
57
58
|
|
@@ -358,7 +359,7 @@ public class TestGcsFileInputPlugin
|
|
358
359
|
task.setFiles(plugin.listFiles(task, client));
|
359
360
|
|
360
361
|
String key = GCP_BUCKET_DIRECTORY + "sample_01.csv";
|
361
|
-
GcsFileInputPlugin.GcsInputStreamReopener opener = new GcsFileInputPlugin.GcsInputStreamReopener(client, GCP_BUCKET, key);
|
362
|
+
GcsFileInputPlugin.GcsInputStreamReopener opener = new GcsFileInputPlugin.GcsInputStreamReopener(client, GCP_BUCKET, key, MAX_CONNECTION_RETRY);
|
362
363
|
try (InputStream in = opener.reopen(0, new RuntimeException())) {
|
363
364
|
BufferedReader r = new BufferedReader(new InputStreamReader(in));
|
364
365
|
assertEquals("id,account,time,purchase,comment", r.readLine());
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-input-gcs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Satoshi Akama
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -46,7 +46,8 @@ extensions: []
|
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
48
|
- .gitignore
|
49
|
-
-
|
49
|
+
- .travis.yml
|
50
|
+
- CHANGELOG.md
|
50
51
|
- README.md
|
51
52
|
- build.gradle
|
52
53
|
- config/checkstyle/checkstyle.xml
|
@@ -63,9 +64,10 @@ files:
|
|
63
64
|
- src/test/java/org/embulk/input/gcs/TestGcsFileInputPlugin.java
|
64
65
|
- src/test/resources/sample_01.csv
|
65
66
|
- src/test/resources/sample_02.csv
|
67
|
+
- src/test/resources/secretkeys.tar.enc
|
66
68
|
- classpath/commons-codec-1.3.jar
|
67
69
|
- classpath/commons-logging-1.1.1.jar
|
68
|
-
- classpath/embulk-input-gcs-0.2.
|
70
|
+
- classpath/embulk-input-gcs-0.2.1.jar
|
69
71
|
- classpath/google-api-client-1.21.0.jar
|
70
72
|
- classpath/google-api-services-storage-v1-rev59-1.21.0.jar
|
71
73
|
- classpath/google-http-client-1.21.0.jar
|
data/ChangeLog
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
Release 0.2.0 - 2016-06-03
|
2
|
-
* Support path option to allow to specify list of target objects directly @sonots thanks! [#17](https://github.com/embulk/embulk-input-gcs/pull/17)
|
3
|
-
|
4
|
-
Release 0.1.13 - 2016-02-04
|
5
|
-
* Upgraded embulk to v0.8.2
|
6
|
-
* Updated Google HTTP Client Library from 1.19.0 to 2.1.21.0
|
7
|
-
* Updated Google Cloud Storage API Client Library from v1-rev27-1.19.1 to v1-rev59-1.21.0
|
8
|
-
|
9
|
-
Release 0.1.11 - 2016-01-25
|
10
|
-
* Added retry logic
|
11
|
-
|
12
|
-
* Added retry logic
|
13
|
-
|
14
|
-
Release 0.1.10 - 2015-11-07
|
15
|
-
|
16
|
-
* Fix resume download logics
|
17
|
-
* Throw ConfigException when files listing failed. @muga thanks!
|
18
|
-
|
19
|
-
Release 0.1.9 - 2015-10-30
|
20
|
-
|
21
|
-
* Fix GcsAuthentication object initialization for mapreduce executor. @muga thanks!
|
22
|
-
|
23
|
-
Release 0.1.8 - 2015-10-29
|
24
|
-
|
25
|
-
* Added unit tests
|
26
|
-
|
27
|
-
Release 0.1.7 - 2015-10-06
|
28
|
-
|
29
|
-
* Added new auth method - json_keyfile of GCP(Google Cloud Platform)'s service account
|
30
|
-
* Supported mapreduce-executor
|
31
|
-
|
32
|
-
Release 0.1.6 - 2015-09-05
|
33
|
-
|
34
|
-
* Added new auth method - pre-defined access token of GCE(Google Compute Engine)
|
35
|
-
|
36
|
-
Release 0.1.5 - 2015-08-19
|
37
|
-
|
38
|
-
* Upgraded embulk version to 0.7.0
|
39
|
-
* Refactored
|
40
|
-
|
41
|
-
Release 0.1.4 - 2015-06-27
|
42
|
-
|
43
|
-
* Keep last last_path when input files is empty. @frsyuki thanks!
|
44
|
-
* Refactored error handling logics.
|
45
|
-
|
46
|
-
Release 0.1.3 - 2015-03-16
|
47
|
-
|
48
|
-
* Changed supported Java version from 8 to 7
|