embulk-output-sftp 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/CHANGELOG.md +3 -0
- data/build.gradle +4 -4
- data/src/main/java/org/embulk/output/sftp/ProxyTask.java +8 -8
- data/src/main/java/org/embulk/output/sftp/SftpFileOutputPlugin.java +18 -18
- data/src/main/java/org/embulk/output/sftp/SftpUtils.java +2 -3
- data/src/main/java/org/embulk/output/sftp/utils/DefaultRetry.java +12 -3
- data/src/test/java/org/embulk/output/sftp/TestSftpFileOutputPlugin.java +4 -4
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: def79366c531079d576567b48397391ad61bf65f
|
4
|
+
data.tar.gz: 3a5e5e2fae4a711450ab485fba681fe39da7ddce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3985d0d51133dbe93a5a29c1a3b9c7757b2b9a0b8724a2cbd88b46bff6d4e91a6e1dc6eab86727397a772451c9f65146907da4da2239424e22028f4a5810eb6
|
7
|
+
data.tar.gz: 3894f07dbd4d056dd75bc0f9f4b95e000421ff1da5cc9733d1b6c563fffd355146b5d7f918ee454b7c7f4226de9dd8ce283313c5ea0f826477634c94caedbb68
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
0.2.2 (2019-07-26)
|
2
|
+
- Do not retry when "Connection refused" is returned and throw ConfigException
|
3
|
+
- https://github.com/embulk/embulk-output-sftp/pull/56
|
1
4
|
0.2.1 (2018-10-23)
|
2
5
|
- Improved logic that detects exception is retryable or not
|
3
6
|
- https://github.com/embulk/embulk-output-sftp/pull/52
|
data/build.gradle
CHANGED
@@ -17,9 +17,9 @@ configurations {
|
|
17
17
|
}
|
18
18
|
|
19
19
|
group = "org.embulk.output.sftp"
|
20
|
-
version = "0.2.
|
21
|
-
sourceCompatibility = 1.
|
22
|
-
targetCompatibility = 1.
|
20
|
+
version = "0.2.2"
|
21
|
+
sourceCompatibility = 1.8
|
22
|
+
targetCompatibility = 1.8
|
23
23
|
|
24
24
|
dependencies {
|
25
25
|
compile "org.embulk:embulk-core:0.9.7"
|
@@ -27,7 +27,7 @@ dependencies {
|
|
27
27
|
// compile "YOUR_JAR_DEPENDENCY_GROUP:YOUR_JAR_DEPENDENCY_MODULE:YOUR_JAR_DEPENDENCY_VERSION"
|
28
28
|
compile "org.apache.commons:commons-vfs2:2.2"
|
29
29
|
compile "commons-io:commons-io:2.6"
|
30
|
-
compile "com.jcraft:jsch:0.1.
|
30
|
+
compile "com.jcraft:jsch:0.1.55"
|
31
31
|
testCompile "junit:junit:4.+"
|
32
32
|
testCompile "org.embulk:embulk-core:0.9.7:tests"
|
33
33
|
testCompile "org.embulk:embulk-standards:0.9.7"
|
@@ -2,7 +2,6 @@ package org.embulk.output.sftp;
|
|
2
2
|
|
3
3
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
4
4
|
import com.fasterxml.jackson.annotation.JsonValue;
|
5
|
-
import com.google.common.base.Optional;
|
6
5
|
import org.apache.commons.vfs2.FileSystemOptions;
|
7
6
|
import org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder;
|
8
7
|
import org.embulk.config.Config;
|
@@ -11,33 +10,34 @@ import org.embulk.config.ConfigException;
|
|
11
10
|
import org.embulk.config.Task;
|
12
11
|
|
13
12
|
import java.util.Locale;
|
13
|
+
import java.util.Optional;
|
14
14
|
|
15
15
|
interface ProxyTask
|
16
16
|
extends Task
|
17
17
|
{
|
18
18
|
@Config("type")
|
19
|
-
|
19
|
+
ProxyType getType();
|
20
20
|
|
21
21
|
@Config("host")
|
22
|
-
|
22
|
+
Optional<String> getHost();
|
23
23
|
|
24
24
|
@Config("user")
|
25
25
|
@ConfigDefault("null")
|
26
|
-
|
26
|
+
Optional<String> getUser();
|
27
27
|
|
28
28
|
@Config("password")
|
29
29
|
@ConfigDefault("null")
|
30
|
-
|
30
|
+
Optional<String> getPassword();
|
31
31
|
|
32
32
|
@Config("port")
|
33
33
|
@ConfigDefault("22")
|
34
|
-
|
34
|
+
int getPort();
|
35
35
|
|
36
36
|
@Config("command")
|
37
37
|
@ConfigDefault("null")
|
38
|
-
|
38
|
+
Optional<String> getCommand();
|
39
39
|
|
40
|
-
|
40
|
+
enum ProxyType
|
41
41
|
{
|
42
42
|
HTTP,
|
43
43
|
SOCKS,
|
@@ -1,6 +1,5 @@
|
|
1
1
|
package org.embulk.output.sftp;
|
2
2
|
|
3
|
-
import com.google.common.base.Optional;
|
4
3
|
import org.embulk.config.Config;
|
5
4
|
import org.embulk.config.ConfigDefault;
|
6
5
|
import org.embulk.config.ConfigDiff;
|
@@ -18,6 +17,7 @@ import javax.validation.constraints.Min;
|
|
18
17
|
|
19
18
|
import java.util.List;
|
20
19
|
import java.util.Map;
|
20
|
+
import java.util.Optional;
|
21
21
|
|
22
22
|
public class SftpFileOutputPlugin
|
23
23
|
implements FileOutputPlugin
|
@@ -26,68 +26,68 @@ public class SftpFileOutputPlugin
|
|
26
26
|
extends Task
|
27
27
|
{
|
28
28
|
@Config("host")
|
29
|
-
|
29
|
+
String getHost();
|
30
30
|
|
31
31
|
@Config("port")
|
32
32
|
@ConfigDefault("22")
|
33
|
-
|
33
|
+
int getPort();
|
34
34
|
|
35
35
|
@Config("user")
|
36
|
-
|
36
|
+
String getUser();
|
37
37
|
|
38
38
|
@Config("password")
|
39
39
|
@ConfigDefault("null")
|
40
|
-
|
40
|
+
Optional<String> getPassword();
|
41
41
|
|
42
42
|
@Config("secret_key_file")
|
43
43
|
@ConfigDefault("null")
|
44
|
-
|
45
|
-
|
44
|
+
Optional<LocalFile> getSecretKeyFilePath();
|
45
|
+
void setSecretKeyFilePath(Optional<LocalFile> secretKeyFilePath);
|
46
46
|
|
47
47
|
@Config("secret_key_passphrase")
|
48
48
|
@ConfigDefault("\"\"")
|
49
|
-
|
49
|
+
String getSecretKeyPassphrase();
|
50
50
|
|
51
51
|
@Config("user_directory_is_root")
|
52
52
|
@ConfigDefault("true")
|
53
|
-
|
53
|
+
boolean getUserDirIsRoot();
|
54
54
|
|
55
55
|
@Config("timeout")
|
56
56
|
@ConfigDefault("600") // 10 minutes
|
57
|
-
|
57
|
+
int getSftpConnectionTimeout();
|
58
58
|
|
59
59
|
@Config("max_connection_retry")
|
60
60
|
@ConfigDefault("5") // 5 times retry to connect sftp server if failed.
|
61
|
-
|
61
|
+
int getMaxConnectionRetry();
|
62
62
|
|
63
63
|
@Config("path_prefix")
|
64
|
-
|
64
|
+
String getPathPrefix();
|
65
65
|
|
66
66
|
@Config("file_ext")
|
67
|
-
|
67
|
+
String getFileNameExtension();
|
68
68
|
|
69
69
|
@Config("sequence_format")
|
70
70
|
@ConfigDefault("\"%03d.%02d.\"")
|
71
|
-
|
71
|
+
String getSequenceFormat();
|
72
72
|
|
73
73
|
@Config("proxy")
|
74
74
|
@ConfigDefault("null")
|
75
|
-
|
75
|
+
Optional<ProxyTask> getProxy();
|
76
76
|
|
77
77
|
@Config("rename_file_after_upload")
|
78
78
|
@ConfigDefault("false")
|
79
|
-
|
79
|
+
boolean getRenameFileAfterUpload();
|
80
80
|
|
81
81
|
// if `false`, plugin will use remote file as buffer
|
82
82
|
@Config("local_buffering")
|
83
83
|
@ConfigDefault("true")
|
84
|
-
|
84
|
+
boolean getLocalBuffering();
|
85
85
|
|
86
86
|
@Min(50L * 1024 * 1024) // 50MiB
|
87
87
|
@Max(10L * 1024 * 1024 * 1024) // 10GiB
|
88
88
|
@Config("temp_file_threshold")
|
89
89
|
@ConfigDefault("5368709120") // 5GiB
|
90
|
-
|
90
|
+
long getTempFileThreshold();
|
91
91
|
}
|
92
92
|
|
93
93
|
@Override
|
@@ -1,7 +1,6 @@
|
|
1
1
|
package org.embulk.output.sftp;
|
2
2
|
|
3
3
|
import com.google.common.annotations.VisibleForTesting;
|
4
|
-
import com.google.common.base.Function;
|
5
4
|
import com.google.common.base.Throwables;
|
6
5
|
import org.apache.commons.vfs2.FileObject;
|
7
6
|
import org.apache.commons.vfs2.FileSystemException;
|
@@ -20,7 +19,6 @@ import org.embulk.spi.util.RetryExecutor.Retryable;
|
|
20
19
|
import org.slf4j.Logger;
|
21
20
|
|
22
21
|
import java.io.BufferedOutputStream;
|
23
|
-
import java.io.Closeable;
|
24
22
|
import java.io.File;
|
25
23
|
import java.io.FileInputStream;
|
26
24
|
import java.io.IOException;
|
@@ -29,6 +27,7 @@ import java.io.OutputStream;
|
|
29
27
|
import java.net.URI;
|
30
28
|
import java.net.URISyntaxException;
|
31
29
|
import java.util.concurrent.TimeUnit;
|
30
|
+
import java.util.function.Function;
|
32
31
|
import java.util.regex.Pattern;
|
33
32
|
|
34
33
|
import static org.embulk.output.sftp.SftpFileOutputPlugin.PluginTask;
|
@@ -96,7 +95,7 @@ public class SftpUtils
|
|
96
95
|
builder.setStrictHostKeyChecking(fsOptions, "no");
|
97
96
|
if (task.getSecretKeyFilePath().isPresent()) {
|
98
97
|
IdentityInfo identityInfo = new IdentityInfo(
|
99
|
-
new File((task.getSecretKeyFilePath().
|
98
|
+
new File((task.getSecretKeyFilePath().map(localFileToPathString()).get())),
|
100
99
|
task.getSecretKeyPassphrase().getBytes()
|
101
100
|
);
|
102
101
|
builder.setIdentityInfo(fsOptions, identityInfo);
|
@@ -1,6 +1,7 @@
|
|
1
1
|
package org.embulk.output.sftp.utils;
|
2
2
|
|
3
3
|
import com.jcraft.jsch.JSchException;
|
4
|
+
import org.embulk.config.ConfigException;
|
4
5
|
import org.embulk.spi.Exec;
|
5
6
|
import org.embulk.spi.util.RetryExecutor;
|
6
7
|
import org.slf4j.Logger;
|
@@ -19,7 +20,7 @@ public abstract class DefaultRetry<T> implements RetryExecutor.Retryable<T>
|
|
19
20
|
@Override
|
20
21
|
public boolean isRetryableException(Exception exception)
|
21
22
|
{
|
22
|
-
return !
|
23
|
+
return !hasRootCauseUserProblem(exception);
|
23
24
|
}
|
24
25
|
|
25
26
|
@Override
|
@@ -38,6 +39,9 @@ public abstract class DefaultRetry<T> implements RetryExecutor.Retryable<T>
|
|
38
39
|
@Override
|
39
40
|
public void onGiveup(Exception firstException, Exception lastException)
|
40
41
|
{
|
42
|
+
if (hasRootCauseUserProblem(lastException)) {
|
43
|
+
throw new ConfigException(lastException);
|
44
|
+
}
|
41
45
|
}
|
42
46
|
|
43
47
|
private static boolean isAuthFail(Throwable e)
|
@@ -45,9 +49,14 @@ public abstract class DefaultRetry<T> implements RetryExecutor.Retryable<T>
|
|
45
49
|
return e instanceof JSchException && (e.getMessage().contains("Auth fail") || e.getMessage().contains("USERAUTH fail"));
|
46
50
|
}
|
47
51
|
|
48
|
-
private static boolean
|
52
|
+
private static boolean isConnectionProblem(Throwable e)
|
53
|
+
{
|
54
|
+
return e instanceof JSchException && (e.getMessage().contains("Connection refused"));
|
55
|
+
}
|
56
|
+
|
57
|
+
private static boolean hasRootCauseUserProblem(Throwable e)
|
49
58
|
{
|
50
|
-
while (e != null && !isAuthFail(e)) {
|
59
|
+
while (e != null && !isAuthFail(e) && !isConnectionProblem(e)) {
|
51
60
|
e = e.getCause();
|
52
61
|
}
|
53
62
|
return e != null;
|
@@ -1,7 +1,6 @@
|
|
1
1
|
package org.embulk.output.sftp;
|
2
2
|
|
3
3
|
import com.google.common.base.Charsets;
|
4
|
-
import com.google.common.base.Optional;
|
5
4
|
import com.google.common.collect.Lists;
|
6
5
|
import com.google.common.io.Resources;
|
7
6
|
import com.jcraft.jsch.JSchException;
|
@@ -62,6 +61,7 @@ import java.security.PublicKey;
|
|
62
61
|
import java.util.Arrays;
|
63
62
|
import java.util.Collections;
|
64
63
|
import java.util.List;
|
64
|
+
import java.util.Optional;
|
65
65
|
import java.util.Random;
|
66
66
|
import java.util.concurrent.TimeoutException;
|
67
67
|
|
@@ -331,8 +331,8 @@ public class TestSftpFileOutputPlugin
|
|
331
331
|
assertEquals(HOST, task.getHost());
|
332
332
|
assertEquals(22, task.getPort());
|
333
333
|
assertEquals(USERNAME, task.getUser());
|
334
|
-
assertEquals(Optional.
|
335
|
-
assertEquals(Optional.
|
334
|
+
assertEquals(Optional.empty(), task.getPassword());
|
335
|
+
assertEquals(Optional.empty(), task.getSecretKeyFilePath());
|
336
336
|
assertEquals("", task.getSecretKeyPassphrase());
|
337
337
|
assertEquals(true, task.getUserDirIsRoot());
|
338
338
|
assertEquals(600, task.getSftpConnectionTimeout());
|
@@ -340,7 +340,7 @@ public class TestSftpFileOutputPlugin
|
|
340
340
|
assertEquals(pathPrefix, task.getPathPrefix());
|
341
341
|
assertEquals("txt", task.getFileNameExtension());
|
342
342
|
assertEquals("%03d.%02d.", task.getSequenceFormat());
|
343
|
-
assertEquals(Optional.
|
343
|
+
assertEquals(Optional.empty(), task.getProxy());
|
344
344
|
}
|
345
345
|
|
346
346
|
@Test
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-output-sftp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Civitaspo
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2019-07-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,9 +83,9 @@ files:
|
|
83
83
|
- src/test/resources/id_rsa.pub
|
84
84
|
- classpath/commons-logging-1.2.jar
|
85
85
|
- classpath/commons-vfs2-2.2.jar
|
86
|
-
- classpath/embulk-output-sftp-0.2.
|
86
|
+
- classpath/embulk-output-sftp-0.2.2.jar
|
87
87
|
- classpath/commons-io-2.6.jar
|
88
|
-
- classpath/jsch-0.1.
|
88
|
+
- classpath/jsch-0.1.55.jar
|
89
89
|
homepage: https://github.com/embulk/embulk-output-sftp
|
90
90
|
licenses:
|
91
91
|
- MIT
|