embulk-output-aerospike 0.3.6 → 0.4.0
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/README.md +47 -0
- data/build.gradle +26 -8
- data/config/checkstyle/checkstyle.xml +128 -0
- data/config/checkstyle/default.xml +108 -0
- data/example/config-single.yml +2 -0
- data/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/gradle/wrapper/gradle-wrapper.properties +2 -2
- data/gradlew +43 -35
- data/src/main/scala/org/embulk/output/aerospike/AerospikeOutputPlugin.scala +4 -0
- data/src/main/scala/org/embulk/output/aerospike/AerospikePageOutput.scala +79 -131
- metadata +8 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30a28dadd37024bf334610813246641e86317d10
|
4
|
+
data.tar.gz: 6c4b17c737ecab4470eb9448285fbc95ac88f9a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51905afa86d6586976d60b7273a52584e6b8ab5338f817a3ff67879da55ecd2599b5e3ce55b2dc56353bf76b41d8a0db64c3c26c5437fe5f89a7e6e52d415594
|
7
|
+
data.tar.gz: d89da31f6b708df469222831df485325c7bf8f0845eb0bfacc883bedc17d51cdcc0d448c5dd7f017cd1abd92345af8acd071120ef4e015455f331b2c11706eac
|
data/README.md
CHANGED
@@ -25,6 +25,7 @@ Aerospike output plugins for Embulk loads records to databases using [aerospiker
|
|
25
25
|
- **password**: user password (string, default: `null`)
|
26
26
|
- **timeout**: command timeout (int, default: `conform to aerospike`)
|
27
27
|
- **max_threads**: max thread numbers (int, default: `conform to aerospike`)
|
28
|
+
- **max_conns_per_node**: max connections allowed per server node (int, default: `conform to aerospike`)
|
28
29
|
- **max_socket_idle**: max socket idel numbers (int, default: `conform to aerospike`)
|
29
30
|
- **tend_interval**: tend interval numbers (int, default: `conform to aerospike`)
|
30
31
|
- **fail_if_not_connected**: fail if not connected (boolean, default: `conform to aerospike`)
|
@@ -84,3 +85,49 @@ out:
|
|
84
85
|
```sh
|
85
86
|
./gradlew gem # -t to watch change of files and rebuild continuously
|
86
87
|
```
|
88
|
+
|
89
|
+
## Run example
|
90
|
+
|
91
|
+
First, start the aerospike-server
|
92
|
+
|
93
|
+
```sh
|
94
|
+
docker run --rm -ti --name aerospike -p 3000:3000 -p 3001:3001 -p 3002:3002 -p 3003:3003 aerospike/aerospike-server
|
95
|
+
```
|
96
|
+
|
97
|
+
Then, run embulk with [example config](https://github.com/tkrs/embulk-output-aerospike/blob/master/example/config.yml).
|
98
|
+
|
99
|
+
|
100
|
+
```sh
|
101
|
+
λ embulk -J-O -R--dev run -I lib example/config.yml
|
102
|
+
2017-11-30 23:49:24.598 +0900: Embulk v0.8.30
|
103
|
+
2017-11-30 23:49:38.484 +0900 [INFO] (0001:transaction): Loaded plugin embulk/output/aerospike from a load path
|
104
|
+
2017-11-30 23:49:38.503 +0900 [INFO] (0001:transaction): Listing local files at directory 'example' filtering filename by prefix 'sample.csv'
|
105
|
+
2017-11-30 23:49:38.505 +0900 [INFO] (0001:transaction): "follow_symlinks" is set false. Note that symbolic links to directories are skipped.
|
106
|
+
2017-11-30 23:49:38.508 +0900 [INFO] (0001:transaction): Loading files [example/sample.csv]
|
107
|
+
2017-11-30 23:49:38.544 +0900 [INFO] (0001:transaction): Using local thread executor with max_threads=8 / output tasks 4 = input tasks 1 * 4
|
108
|
+
2017-11-30 23:49:38.567 +0900 [INFO] (0001:transaction): {done: 0 / 1, running: 0}
|
109
|
+
2017-11-30 23:49:39.134 +0900 [INFO] (0013:task-0000): finish put ok[6] ng[0]
|
110
|
+
2017-11-30 23:49:39.135 +0900 [INFO] (0013:task-0000): finish put ok[0] ng[0]
|
111
|
+
2017-11-30 23:49:39.135 +0900 [INFO] (0013:task-0000): finish put ok[0] ng[0]
|
112
|
+
2017-11-30 23:49:39.135 +0900 [INFO] (0013:task-0000): finish put ok[0] ng[0]
|
113
|
+
2017-11-30 23:49:39.278 +0900 [INFO] (0001:transaction): {done: 1 / 1, running: 0}
|
114
|
+
2017-11-30 23:49:39.284 +0900 [INFO] (main): Committed.
|
115
|
+
2017-11-30 23:49:39.284 +0900 [INFO] (main): Next config diff: {"in":{"last_path":"example/sample.csv"},"out":{"rans":6,"failures":"{}"}}
|
116
|
+
```
|
117
|
+
|
118
|
+
Let's check it.
|
119
|
+
|
120
|
+
```sh
|
121
|
+
docker exec -it aerospike aql -c "select * from test"
|
122
|
+
+---------------------------------------+-----+
|
123
|
+
| user_name | age |
|
124
|
+
+---------------------------------------+-----+
|
125
|
+
| LIST('["Bomani", "Archaman"]') | 20 |
|
126
|
+
| LIST('["Ritsuka", "Fujimura"]') | 30 |
|
127
|
+
| LIST('["Fou"]') | 999 |
|
128
|
+
| LIST('["Mash", "Kyrielight"]') | 20 |
|
129
|
+
| LIST('["Olgamally", "Animusphere"]') | 10 |
|
130
|
+
| LIST('["Lev", "Lainur"]') | 45 |
|
131
|
+
+---------------------------------------+-----+
|
132
|
+
6 rows in set (0.167 secs)
|
133
|
+
```
|
data/build.gradle
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
plugins {
|
2
2
|
id "com.jfrog.bintray" version "1.1"
|
3
3
|
id "com.github.jruby-gradle.base" version "0.1.5"
|
4
|
+
id "checkstyle"
|
4
5
|
id 'scala'
|
5
6
|
}
|
6
7
|
import com.github.jrubygradle.JRubyExec
|
@@ -16,16 +17,17 @@ configurations {
|
|
16
17
|
provided
|
17
18
|
}
|
18
19
|
|
19
|
-
version = "0.
|
20
|
+
version = "0.4.0"
|
21
|
+
|
22
|
+
sourceCompatibility = 1.7
|
23
|
+
|
24
|
+
targetCompatibility = 1.7
|
20
25
|
|
21
26
|
dependencies {
|
22
|
-
compile "org.embulk:embulk-core:0.8.
|
23
|
-
provided "org.embulk:embulk-core:0.8.
|
24
|
-
compile 'org.scala-lang:scala-library:2.11.
|
25
|
-
compile '
|
26
|
-
compile 'com.github.tkrs:aerospiker-core_2.11:0.4.0'
|
27
|
-
compile 'com.github.tkrs:aerospiker-msgpack_2.11:0.4.0'
|
28
|
-
compile 'com.github.tkrs:aerospiker-task_2.11:0.4.0'
|
27
|
+
compile "org.embulk:embulk-core:0.8.38"
|
28
|
+
provided "org.embulk:embulk-core:0.8.38"
|
29
|
+
compile 'org.scala-lang:scala-library:2.11.11'
|
30
|
+
compile 'com.aerospike:aerospike-client:4.1.0'
|
29
31
|
testCompile "junit:junit:4.+"
|
30
32
|
}
|
31
33
|
|
@@ -36,6 +38,22 @@ task classpath(type: Copy, dependsOn: ["jar"]) {
|
|
36
38
|
}
|
37
39
|
clean { delete "classpath" }
|
38
40
|
|
41
|
+
checkstyle {
|
42
|
+
configFile = file("${project.rootDir}/config/checkstyle/checkstyle.xml")
|
43
|
+
toolVersion = '6.14.1'
|
44
|
+
}
|
45
|
+
checkstyleMain {
|
46
|
+
configFile = file("${project.rootDir}/config/checkstyle/default.xml")
|
47
|
+
ignoreFailures = true
|
48
|
+
}
|
49
|
+
checkstyleTest {
|
50
|
+
configFile = file("${project.rootDir}/config/checkstyle/default.xml")
|
51
|
+
ignoreFailures = true
|
52
|
+
}
|
53
|
+
task checkstyle(type: Checkstyle) {
|
54
|
+
classpath = sourceSets.main.output + sourceSets.test.output
|
55
|
+
source = sourceSets.main.allJava + sourceSets.test.allJava
|
56
|
+
}
|
39
57
|
task gem(type: JRubyExec, dependsOn: ["gemspec", "classpath"]) {
|
40
58
|
jrubyArgs "-rrubygems/gem_runner", "-eGem::GemRunner.new.run(ARGV)", "build"
|
41
59
|
script "${project.name}.gemspec"
|
@@ -0,0 +1,128 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE module PUBLIC
|
3
|
+
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
|
4
|
+
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
|
5
|
+
<module name="Checker">
|
6
|
+
<!-- https://github.com/facebook/presto/blob/master/src/checkstyle/checks.xml -->
|
7
|
+
<module name="FileTabCharacter"/>
|
8
|
+
<module name="NewlineAtEndOfFile">
|
9
|
+
<property name="lineSeparator" value="lf"/>
|
10
|
+
</module>
|
11
|
+
<module name="RegexpMultiline">
|
12
|
+
<property name="format" value="\r"/>
|
13
|
+
<property name="message" value="Line contains carriage return"/>
|
14
|
+
</module>
|
15
|
+
<module name="RegexpMultiline">
|
16
|
+
<property name="format" value=" \n"/>
|
17
|
+
<property name="message" value="Line has trailing whitespace"/>
|
18
|
+
</module>
|
19
|
+
<module name="RegexpMultiline">
|
20
|
+
<property name="format" value="\{\n\n"/>
|
21
|
+
<property name="message" value="Blank line after opening brace"/>
|
22
|
+
</module>
|
23
|
+
<module name="RegexpMultiline">
|
24
|
+
<property name="format" value="\n\n\s*\}"/>
|
25
|
+
<property name="message" value="Blank line before closing brace"/>
|
26
|
+
</module>
|
27
|
+
<module name="RegexpMultiline">
|
28
|
+
<property name="format" value="\n\n\n"/>
|
29
|
+
<property name="message" value="Multiple consecutive blank lines"/>
|
30
|
+
</module>
|
31
|
+
<module name="RegexpMultiline">
|
32
|
+
<property name="format" value="\n\n\Z"/>
|
33
|
+
<property name="message" value="Blank line before end of file"/>
|
34
|
+
</module>
|
35
|
+
<module name="RegexpMultiline">
|
36
|
+
<property name="format" value="Preconditions\.checkNotNull"/>
|
37
|
+
<property name="message" value="Use of checkNotNull"/>
|
38
|
+
</module>
|
39
|
+
|
40
|
+
<module name="TreeWalker">
|
41
|
+
<module name="EmptyBlock">
|
42
|
+
<property name="option" value="text"/>
|
43
|
+
<property name="tokens" value="
|
44
|
+
LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_IF,
|
45
|
+
LITERAL_FOR, LITERAL_TRY, LITERAL_WHILE, INSTANCE_INIT, STATIC_INIT"/>
|
46
|
+
</module>
|
47
|
+
<module name="EmptyStatement"/>
|
48
|
+
<module name="EmptyForInitializerPad"/>
|
49
|
+
<module name="EmptyForIteratorPad">
|
50
|
+
<property name="option" value="space"/>
|
51
|
+
</module>
|
52
|
+
<module name="MethodParamPad">
|
53
|
+
<property name="allowLineBreaks" value="true"/>
|
54
|
+
<property name="option" value="nospace"/>
|
55
|
+
</module>
|
56
|
+
<module name="ParenPad"/>
|
57
|
+
<module name="TypecastParenPad"/>
|
58
|
+
<module name="NeedBraces"/>
|
59
|
+
<module name="LeftCurly">
|
60
|
+
<property name="option" value="nl"/>
|
61
|
+
<property name="tokens" value="CLASS_DEF, CTOR_DEF, INTERFACE_DEF, METHOD_DEF"/>
|
62
|
+
</module>
|
63
|
+
<module name="LeftCurly">
|
64
|
+
<property name="option" value="eol"/>
|
65
|
+
<property name="tokens" value="
|
66
|
+
LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR,
|
67
|
+
LITERAL_IF, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE"/>
|
68
|
+
</module>
|
69
|
+
<module name="RightCurly">
|
70
|
+
<property name="option" value="alone"/>
|
71
|
+
</module>
|
72
|
+
<module name="GenericWhitespace"/>
|
73
|
+
<module name="WhitespaceAfter"/>
|
74
|
+
<module name="NoWhitespaceBefore"/>
|
75
|
+
|
76
|
+
<module name="UpperEll"/>
|
77
|
+
<module name="DefaultComesLast"/>
|
78
|
+
<module name="ArrayTypeStyle"/>
|
79
|
+
<module name="MultipleVariableDeclarations"/>
|
80
|
+
<module name="ModifierOrder"/>
|
81
|
+
<module name="OneStatementPerLine"/>
|
82
|
+
<module name="StringLiteralEquality"/>
|
83
|
+
<module name="MutableException"/>
|
84
|
+
<module name="EqualsHashCode"/>
|
85
|
+
<module name="InnerAssignment"/>
|
86
|
+
<module name="InterfaceIsType"/>
|
87
|
+
<module name="HideUtilityClassConstructor"/>
|
88
|
+
|
89
|
+
<module name="MemberName"/>
|
90
|
+
<module name="LocalVariableName"/>
|
91
|
+
<module name="LocalFinalVariableName"/>
|
92
|
+
<module name="TypeName"/>
|
93
|
+
<module name="PackageName"/>
|
94
|
+
<module name="ParameterName"/>
|
95
|
+
<module name="StaticVariableName"/>
|
96
|
+
<module name="ClassTypeParameterName">
|
97
|
+
<property name="format" value="^[A-Z][0-9]?$"/>
|
98
|
+
</module>
|
99
|
+
<module name="MethodTypeParameterName">
|
100
|
+
<property name="format" value="^[A-Z][0-9]?$"/>
|
101
|
+
</module>
|
102
|
+
|
103
|
+
<module name="AvoidStarImport"/>
|
104
|
+
<module name="RedundantImport"/>
|
105
|
+
<module name="UnusedImports"/>
|
106
|
+
<module name="ImportOrder">
|
107
|
+
<property name="groups" value="*,javax,java"/>
|
108
|
+
<property name="separated" value="true"/>
|
109
|
+
<property name="option" value="bottom"/>
|
110
|
+
<property name="sortStaticImportsAlphabetically" value="true"/>
|
111
|
+
</module>
|
112
|
+
|
113
|
+
<module name="WhitespaceAround">
|
114
|
+
<property name="allowEmptyConstructors" value="true"/>
|
115
|
+
<property name="allowEmptyMethods" value="true"/>
|
116
|
+
<property name="ignoreEnhancedForColon" value="false"/>
|
117
|
+
<property name="tokens" value="
|
118
|
+
ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN,
|
119
|
+
BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, EQUAL, GE, GT, LAND, LE,
|
120
|
+
LITERAL_ASSERT, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
|
121
|
+
LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
|
122
|
+
LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE,
|
123
|
+
LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL,
|
124
|
+
PLUS, PLUS_ASSIGN, QUESTION, SL, SLIST, SL_ASSIGN, SR, SR_ASSIGN,
|
125
|
+
STAR, STAR_ASSIGN, TYPE_EXTENSION_AND"/>
|
126
|
+
</module>
|
127
|
+
</module>
|
128
|
+
</module>
|
@@ -0,0 +1,108 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE module PUBLIC
|
3
|
+
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
|
4
|
+
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
|
5
|
+
<!--
|
6
|
+
This is a subset of ./checkstyle.xml which allows some loose styles
|
7
|
+
-->
|
8
|
+
<module name="Checker">
|
9
|
+
<module name="FileTabCharacter"/>
|
10
|
+
<module name="NewlineAtEndOfFile">
|
11
|
+
<property name="lineSeparator" value="lf"/>
|
12
|
+
</module>
|
13
|
+
<module name="RegexpMultiline">
|
14
|
+
<property name="format" value="\r"/>
|
15
|
+
<property name="message" value="Line contains carriage return"/>
|
16
|
+
</module>
|
17
|
+
<module name="RegexpMultiline">
|
18
|
+
<property name="format" value=" \n"/>
|
19
|
+
<property name="message" value="Line has trailing whitespace"/>
|
20
|
+
</module>
|
21
|
+
<module name="RegexpMultiline">
|
22
|
+
<property name="format" value="\n\n\n"/>
|
23
|
+
<property name="message" value="Multiple consecutive blank lines"/>
|
24
|
+
</module>
|
25
|
+
<module name="RegexpMultiline">
|
26
|
+
<property name="format" value="\n\n\Z"/>
|
27
|
+
<property name="message" value="Blank line before end of file"/>
|
28
|
+
</module>
|
29
|
+
|
30
|
+
<module name="TreeWalker">
|
31
|
+
<module name="EmptyBlock">
|
32
|
+
<property name="option" value="text"/>
|
33
|
+
<property name="tokens" value="
|
34
|
+
LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_IF,
|
35
|
+
LITERAL_FOR, LITERAL_TRY, LITERAL_WHILE, INSTANCE_INIT, STATIC_INIT"/>
|
36
|
+
</module>
|
37
|
+
<module name="EmptyStatement"/>
|
38
|
+
<module name="EmptyForInitializerPad"/>
|
39
|
+
<module name="EmptyForIteratorPad">
|
40
|
+
<property name="option" value="space"/>
|
41
|
+
</module>
|
42
|
+
<module name="MethodParamPad">
|
43
|
+
<property name="allowLineBreaks" value="true"/>
|
44
|
+
<property name="option" value="nospace"/>
|
45
|
+
</module>
|
46
|
+
<module name="ParenPad"/>
|
47
|
+
<module name="TypecastParenPad"/>
|
48
|
+
<module name="NeedBraces"/>
|
49
|
+
<module name="LeftCurly">
|
50
|
+
<property name="option" value="nl"/>
|
51
|
+
<property name="tokens" value="CLASS_DEF, CTOR_DEF, INTERFACE_DEF, METHOD_DEF"/>
|
52
|
+
</module>
|
53
|
+
<module name="LeftCurly">
|
54
|
+
<property name="option" value="eol"/>
|
55
|
+
<property name="tokens" value="
|
56
|
+
LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR,
|
57
|
+
LITERAL_IF, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE"/>
|
58
|
+
</module>
|
59
|
+
<module name="RightCurly">
|
60
|
+
<property name="option" value="alone"/>
|
61
|
+
</module>
|
62
|
+
<module name="GenericWhitespace"/>
|
63
|
+
<module name="WhitespaceAfter"/>
|
64
|
+
<module name="NoWhitespaceBefore"/>
|
65
|
+
|
66
|
+
<module name="UpperEll"/>
|
67
|
+
<module name="DefaultComesLast"/>
|
68
|
+
<module name="ArrayTypeStyle"/>
|
69
|
+
<module name="MultipleVariableDeclarations"/>
|
70
|
+
<module name="ModifierOrder"/>
|
71
|
+
<module name="OneStatementPerLine"/>
|
72
|
+
<module name="StringLiteralEquality"/>
|
73
|
+
<module name="MutableException"/>
|
74
|
+
<module name="EqualsHashCode"/>
|
75
|
+
<module name="InnerAssignment"/>
|
76
|
+
<module name="InterfaceIsType"/>
|
77
|
+
<module name="HideUtilityClassConstructor"/>
|
78
|
+
|
79
|
+
<module name="MemberName"/>
|
80
|
+
<module name="LocalVariableName"/>
|
81
|
+
<module name="LocalFinalVariableName"/>
|
82
|
+
<module name="TypeName"/>
|
83
|
+
<module name="PackageName"/>
|
84
|
+
<module name="ParameterName"/>
|
85
|
+
<module name="StaticVariableName"/>
|
86
|
+
<module name="ClassTypeParameterName">
|
87
|
+
<property name="format" value="^[A-Z][0-9]?$"/>
|
88
|
+
</module>
|
89
|
+
<module name="MethodTypeParameterName">
|
90
|
+
<property name="format" value="^[A-Z][0-9]?$"/>
|
91
|
+
</module>
|
92
|
+
|
93
|
+
<module name="WhitespaceAround">
|
94
|
+
<property name="allowEmptyConstructors" value="true"/>
|
95
|
+
<property name="allowEmptyMethods" value="true"/>
|
96
|
+
<property name="ignoreEnhancedForColon" value="false"/>
|
97
|
+
<property name="tokens" value="
|
98
|
+
ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN,
|
99
|
+
BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, EQUAL, GE, GT, LAND, LE,
|
100
|
+
LITERAL_ASSERT, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
|
101
|
+
LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
|
102
|
+
LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE,
|
103
|
+
LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL,
|
104
|
+
PLUS, PLUS_ASSIGN, QUESTION, SL, SLIST, SL_ASSIGN, SR, SR_ASSIGN,
|
105
|
+
STAR, STAR_ASSIGN, TYPE_EXTENSION_AND"/>
|
106
|
+
</module>
|
107
|
+
</module>
|
108
|
+
</module>
|
data/example/config-single.yml
CHANGED
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
|
-
#
|
1
|
+
#Fri Dec 01 03:21:39 JST 2017
|
2
2
|
distributionBase=GRADLE_USER_HOME
|
3
3
|
distributionPath=wrapper/dists
|
4
4
|
zipStoreBase=GRADLE_USER_HOME
|
5
5
|
zipStorePath=wrapper/dists
|
6
|
-
distributionUrl=https\://services.gradle.org/distributions/gradle-
|
6
|
+
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
|
data/gradlew
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#!/usr/bin/env
|
1
|
+
#!/usr/bin/env sh
|
2
2
|
|
3
3
|
##############################################################################
|
4
4
|
##
|
@@ -6,20 +6,38 @@
|
|
6
6
|
##
|
7
7
|
##############################################################################
|
8
8
|
|
9
|
-
#
|
10
|
-
|
9
|
+
# Attempt to set APP_HOME
|
10
|
+
# Resolve links: $0 may be a link
|
11
|
+
PRG="$0"
|
12
|
+
# Need this for relative symlinks.
|
13
|
+
while [ -h "$PRG" ] ; do
|
14
|
+
ls=`ls -ld "$PRG"`
|
15
|
+
link=`expr "$ls" : '.*-> \(.*\)$'`
|
16
|
+
if expr "$link" : '/.*' > /dev/null; then
|
17
|
+
PRG="$link"
|
18
|
+
else
|
19
|
+
PRG=`dirname "$PRG"`"/$link"
|
20
|
+
fi
|
21
|
+
done
|
22
|
+
SAVED="`pwd`"
|
23
|
+
cd "`dirname \"$PRG\"`/" >/dev/null
|
24
|
+
APP_HOME="`pwd -P`"
|
25
|
+
cd "$SAVED" >/dev/null
|
11
26
|
|
12
27
|
APP_NAME="Gradle"
|
13
28
|
APP_BASE_NAME=`basename "$0"`
|
14
29
|
|
30
|
+
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
31
|
+
DEFAULT_JVM_OPTS=""
|
32
|
+
|
15
33
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
16
34
|
MAX_FD="maximum"
|
17
35
|
|
18
|
-
warn (
|
36
|
+
warn () {
|
19
37
|
echo "$*"
|
20
38
|
}
|
21
39
|
|
22
|
-
die (
|
40
|
+
die () {
|
23
41
|
echo
|
24
42
|
echo "$*"
|
25
43
|
echo
|
@@ -30,6 +48,7 @@ die ( ) {
|
|
30
48
|
cygwin=false
|
31
49
|
msys=false
|
32
50
|
darwin=false
|
51
|
+
nonstop=false
|
33
52
|
case "`uname`" in
|
34
53
|
CYGWIN* )
|
35
54
|
cygwin=true
|
@@ -40,31 +59,11 @@ case "`uname`" in
|
|
40
59
|
MINGW* )
|
41
60
|
msys=true
|
42
61
|
;;
|
62
|
+
NONSTOP* )
|
63
|
+
nonstop=true
|
64
|
+
;;
|
43
65
|
esac
|
44
66
|
|
45
|
-
# For Cygwin, ensure paths are in UNIX format before anything is touched.
|
46
|
-
if $cygwin ; then
|
47
|
-
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
48
|
-
fi
|
49
|
-
|
50
|
-
# Attempt to set APP_HOME
|
51
|
-
# Resolve links: $0 may be a link
|
52
|
-
PRG="$0"
|
53
|
-
# Need this for relative symlinks.
|
54
|
-
while [ -h "$PRG" ] ; do
|
55
|
-
ls=`ls -ld "$PRG"`
|
56
|
-
link=`expr "$ls" : '.*-> \(.*\)$'`
|
57
|
-
if expr "$link" : '/.*' > /dev/null; then
|
58
|
-
PRG="$link"
|
59
|
-
else
|
60
|
-
PRG=`dirname "$PRG"`"/$link"
|
61
|
-
fi
|
62
|
-
done
|
63
|
-
SAVED="`pwd`"
|
64
|
-
cd "`dirname \"$PRG\"`/" >&-
|
65
|
-
APP_HOME="`pwd -P`"
|
66
|
-
cd "$SAVED" >&-
|
67
|
-
|
68
67
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
69
68
|
|
70
69
|
# Determine the Java command to use to start the JVM.
|
@@ -90,7 +89,7 @@ location of your Java installation."
|
|
90
89
|
fi
|
91
90
|
|
92
91
|
# Increase the maximum file descriptors if we can.
|
93
|
-
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
92
|
+
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
94
93
|
MAX_FD_LIMIT=`ulimit -H -n`
|
95
94
|
if [ $? -eq 0 ] ; then
|
96
95
|
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
@@ -114,6 +113,7 @@ fi
|
|
114
113
|
if $cygwin ; then
|
115
114
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
116
115
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
116
|
+
JAVACMD=`cygpath --unix "$JAVACMD"`
|
117
117
|
|
118
118
|
# We build the pattern for arguments to be converted via cygpath
|
119
119
|
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
@@ -154,11 +154,19 @@ if $cygwin ; then
|
|
154
154
|
esac
|
155
155
|
fi
|
156
156
|
|
157
|
-
#
|
158
|
-
|
159
|
-
|
157
|
+
# Escape application args
|
158
|
+
save () {
|
159
|
+
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
160
|
+
echo " "
|
160
161
|
}
|
161
|
-
|
162
|
-
|
162
|
+
APP_ARGS=$(save "$@")
|
163
|
+
|
164
|
+
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
165
|
+
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
166
|
+
|
167
|
+
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
168
|
+
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
169
|
+
cd "$(dirname "$0")"
|
170
|
+
fi
|
163
171
|
|
164
|
-
exec "$JAVACMD" "
|
172
|
+
exec "$JAVACMD" "$@"
|
@@ -59,9 +59,13 @@ object AerospikeOutputPlugin {
|
|
59
59
|
@Config("timeout")
|
60
60
|
@ConfigDefault("0") def getTimeout: Optional[Integer]
|
61
61
|
|
62
|
+
@Deprecated
|
62
63
|
@Config("max_threads")
|
63
64
|
@ConfigDefault("300") def getMaxThreads: Optional[Integer]
|
64
65
|
|
66
|
+
@Config("max_conns_per_node")
|
67
|
+
@ConfigDefault("300") def getMaxConnsPerNode: Optional[Integer]
|
68
|
+
|
65
69
|
@Config("max_socket_idle")
|
66
70
|
@ConfigDefault("14") def getMaxSocketIdle: Optional[Integer]
|
67
71
|
|
@@ -1,13 +1,9 @@
|
|
1
1
|
package org.embulk.output.aerospike
|
2
2
|
|
3
|
-
import java.util.concurrent.{ CountDownLatch, ConcurrentLinkedQueue }
|
4
3
|
import java.util.concurrent.atomic.AtomicLong
|
5
4
|
|
6
|
-
import
|
7
|
-
import
|
8
|
-
import aerospiker.task.{ DeleteError, PutError, Aerospike }
|
9
|
-
import cats.data.Xor, Xor._
|
10
|
-
import io.circe._, io.circe.syntax._
|
5
|
+
import com.aerospike.client.{AerospikeClient, Bin, Host, Key}
|
6
|
+
import com.aerospike.client.policy.{ClientPolicy, WritePolicy}
|
11
7
|
import org.embulk.config.TaskReport
|
12
8
|
import org.embulk.config.TaskSource
|
13
9
|
import org.embulk.spi._
|
@@ -15,11 +11,8 @@ import org.embulk.spi.`type`.Type
|
|
15
11
|
import org.embulk.spi.time.Timestamp
|
16
12
|
|
17
13
|
import scala.collection.concurrent.TrieMap
|
18
|
-
import scala.collection.mutable.{ Map => MMap, ListBuffer }
|
19
14
|
import scala.collection.JavaConversions._
|
20
|
-
import
|
21
|
-
import scalaz.concurrent.Task
|
22
|
-
import scalaz.stream._
|
15
|
+
import scala.util.{Failure, Success, Try}
|
23
16
|
|
24
17
|
class AerospikePageOutput(taskSource: TaskSource, schema: Schema, taskIndex: Int) extends TransactionalPageOutput {
|
25
18
|
|
@@ -34,176 +27,131 @@ class AerospikePageOutput(taskSource: TaskSource, schema: Schema, taskIndex: Int
|
|
34
27
|
private[this] val failures = TrieMap.empty[String, String]
|
35
28
|
|
36
29
|
private[this] val wp: WritePolicy = {
|
30
|
+
val wp = new WritePolicy()
|
37
31
|
if (tsk.getWritePolicy.isPresent) {
|
38
32
|
val wpTask: WritePolicyTask = tsk.getWritePolicy.get
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
sleepBetweenRetries = wpTask.getSleepBetweenRetries.get
|
45
|
-
)
|
46
|
-
} else {
|
47
|
-
WritePolicy()
|
33
|
+
wp.sendKey = wpTask.getSendKey.get
|
34
|
+
wp.expiration = wpTask.getExpiration.get
|
35
|
+
wp.maxRetries = wpTask.getMaxRetries.get
|
36
|
+
wp.generation = wpTask.getGeneration.get
|
37
|
+
wp.sleepBetweenRetries = wpTask.getSleepBetweenRetries.get
|
48
38
|
}
|
39
|
+
wp
|
49
40
|
}
|
50
41
|
|
51
42
|
implicit val policy: ClientPolicy = {
|
43
|
+
val cp = new ClientPolicy()
|
52
44
|
if (tsk.getClientPolicy.isPresent) {
|
53
45
|
val cpTask: ClientPolicyTask = tsk.getClientPolicy.get
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
tendInterval = cpTask.getTendInterval.get,
|
62
|
-
writePolicyDefault = wp
|
63
|
-
)
|
64
|
-
} else {
|
65
|
-
ClientPolicy(writePolicyDefault = wp)
|
46
|
+
cp.failIfNotConnected = cpTask.getFailIfNotConnected.get
|
47
|
+
cp.maxConnsPerNode =cpTask.getMaxConnsPerNode.get()
|
48
|
+
cp.maxSocketIdle = cpTask.getMaxSocketIdle.get
|
49
|
+
cp.password = cpTask.getPassword.orNull
|
50
|
+
cp.user = cpTask.getUser.orNull
|
51
|
+
cp.timeout = cpTask.getTimeout.get
|
52
|
+
cp.tendInterval = cpTask.getTendInterval.get
|
66
53
|
}
|
54
|
+
cp.writePolicyDefault = wp
|
55
|
+
cp
|
67
56
|
}
|
68
57
|
|
69
|
-
|
70
|
-
|
71
|
-
private[this] val aerospike = new Aerospike(executor) {
|
72
|
-
override protected def namespace: String = tsk.getNamespace
|
73
|
-
override protected def setName: String = tsk.getSetName
|
74
|
-
}
|
58
|
+
val namespace: String = tsk.getNamespace
|
59
|
+
val setName: String = tsk.getSetName
|
75
60
|
|
76
|
-
private[this]
|
77
|
-
case v: Boolean => v.asJson
|
78
|
-
case v: Int => v.asJson
|
79
|
-
case v: Long => v.asJson
|
80
|
-
case v: Double => v.asJson
|
81
|
-
case v: String => v.asJson
|
82
|
-
case v: Seq[Any] => Json.array(v.map(x => toJson(x)): _*)
|
83
|
-
case v: Map[String, Any] => Json.fromFields(v.map { case (k, va) => (k, toJson(va)) } toSeq)
|
84
|
-
case null => Json.empty
|
85
|
-
case _ => log.error(s"Unsupported class[${a.getClass}]"); throw new RuntimeException(s"Unsupported class[${a.getClass}]")
|
86
|
-
}
|
61
|
+
private[this] val hosts: Seq[Host] = tsk.getHosts.map(host => new Host(host.getName, host.getPort))
|
87
62
|
|
88
|
-
|
63
|
+
private[this] val aerospike = new AerospikeClient(policy, hosts: _*)
|
89
64
|
|
90
65
|
implicit private[this] val reader: PageReader = new PageReader(schema)
|
91
66
|
|
92
|
-
|
67
|
+
def createRecords(page: Page): Iterator[Seq[Col]] = {
|
93
68
|
reader.setPage(page)
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
records += convs
|
99
|
-
}
|
100
|
-
Process.eval(Task.now(records))
|
69
|
+
Iterator.continually(())
|
70
|
+
.takeWhile(_ => reader.nextRecord())
|
71
|
+
.map(_ => schema.getColumns.toList)
|
72
|
+
.map(_.map(Col.of))
|
101
73
|
}
|
102
74
|
|
103
|
-
val toRecords: Seq[
|
104
|
-
val rec:
|
75
|
+
val toRecords: Seq[Col] => java.util.Map[String, Object] = { row =>
|
76
|
+
val rec: java.util.Map[String, Object] = new java.util.HashMap()
|
105
77
|
row foreach {
|
106
|
-
case DoubleColumn(i, n, v) => rec += n -> v
|
107
|
-
case LongColumn(i, n, v) => rec += n -> v
|
78
|
+
case DoubleColumn(i, n, v) => rec += n -> (v: java.lang.Double)
|
79
|
+
case LongColumn(i, n, v) => rec += n -> (v: java.lang.Long)
|
108
80
|
case StringColumn(i, n, v) =>
|
109
81
|
if (tsk.getSplitters.isPresent) {
|
110
82
|
val sps = tsk.getSplitters.get.toMap
|
111
83
|
sps.get(n) match {
|
112
|
-
case None =>
|
113
|
-
rec += n -> v
|
84
|
+
case None =>
|
85
|
+
rec += n -> (v: java.lang.String)
|
114
86
|
case Some(sp) =>
|
115
87
|
val sep = sp.getSeparator
|
116
88
|
sp.getElementType match {
|
117
89
|
case "long" =>
|
118
|
-
val
|
119
|
-
|
90
|
+
val xs = new java.util.ArrayList[Long]
|
91
|
+
v.split(sep).map(s => if (s.isEmpty) "0" else s).foreach(x => xs.add(x.toLong: java.lang.Long))
|
92
|
+
rec += n -> xs
|
120
93
|
case "double" =>
|
121
|
-
val
|
122
|
-
|
94
|
+
val xs = new java.util.ArrayList[Double]
|
95
|
+
v.split(sep).map(s => if (s.isEmpty) "0" else s).foreach(x => xs.add(x.toDouble: java.lang.Double))
|
96
|
+
rec += n -> xs
|
123
97
|
case "string" =>
|
124
|
-
val
|
125
|
-
|
98
|
+
val xs = new java.util.ArrayList[String]
|
99
|
+
val x = v.split(sep).foreach(xs.add)
|
100
|
+
rec += n -> xs
|
126
101
|
}
|
127
102
|
}
|
128
103
|
} else {
|
129
104
|
rec += n -> v
|
130
105
|
}
|
131
|
-
case BooleanColumn(i, n, v) => rec += n -> v
|
132
|
-
case TimestampColumn(i, n, v) => rec += n -> v
|
106
|
+
case BooleanColumn(i, n, v) => rec += n -> (v: java.lang.Boolean)
|
107
|
+
case TimestampColumn(i, n, v) => rec += n -> (v.toEpochMilli: java.lang.Long)
|
133
108
|
case NullColumn(i, n, t) => // nop
|
134
109
|
}
|
135
|
-
rec
|
110
|
+
rec
|
136
111
|
}
|
137
112
|
|
138
|
-
|
139
|
-
val
|
140
|
-
val
|
141
|
-
|
142
|
-
|
143
|
-
val deRec = record - tsk.getKeyName.get
|
113
|
+
def updater(record: java.util.Map[String, Object]): Unit = {
|
114
|
+
val keyObj = record.getOrElse(tsk.getKeyName.get, "")
|
115
|
+
val key = new Key(namespace, setName, keyObj.toString)
|
116
|
+
record.remove(tsk.getKeyName.get)
|
117
|
+
Try {
|
144
118
|
if (tsk.getSingleBinName.isPresent) {
|
145
|
-
|
146
|
-
|
147
|
-
case \/-(r) => queue.add(r); latch.countDown()
|
148
|
-
}
|
119
|
+
val bin = new Bin(tsk.getSingleBinName.get(), record)
|
120
|
+
aerospike.put(wp, key, bin)
|
149
121
|
} else {
|
150
|
-
|
151
|
-
|
152
|
-
case \/-(r) => queue.add(r); latch.countDown()
|
153
|
-
}
|
154
|
-
}
|
155
|
-
}
|
156
|
-
|
157
|
-
latch.await()
|
158
|
-
|
159
|
-
Task.delay {
|
160
|
-
queue foreach {
|
161
|
-
case Left(e @ PutError(key, cause)) =>
|
162
|
-
log.error(e.toString, e)
|
163
|
-
failures += key -> cause.getMessage
|
164
|
-
failCount.addAndGet(1L)
|
165
|
-
case Left(e) =>
|
166
|
-
log.error(e.toString, e)
|
167
|
-
failures += e.getMessage -> e.getMessage
|
168
|
-
failCount.addAndGet(1L)
|
169
|
-
case Right(_) =>
|
170
|
-
successCount.addAndGet(1L)
|
122
|
+
val bins = record.map { case (k, v) => new Bin(k, v) }
|
123
|
+
aerospike.put(wp, key, bins.toSeq: _*)
|
171
124
|
}
|
125
|
+
} match {
|
126
|
+
case Failure(e) =>
|
127
|
+
log.error(e.toString, e)
|
128
|
+
failures += keyObj.toString -> e.getMessage
|
129
|
+
failCount.addAndGet(1L)
|
130
|
+
case Success(r) => ()
|
131
|
+
successCount.addAndGet(1L)
|
172
132
|
}
|
173
133
|
}
|
174
134
|
|
175
|
-
val deleter:
|
176
|
-
val
|
177
|
-
val
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
latch.await()
|
188
|
-
|
189
|
-
Task.delay {
|
190
|
-
queue foreach {
|
191
|
-
case Left(DeleteError(key, cause)) =>
|
192
|
-
log.error(key, cause)
|
193
|
-
failures += key -> cause.getMessage
|
194
|
-
failCount.addAndGet(1L)
|
195
|
-
case Right(_) =>
|
196
|
-
successCount.addAndGet(1L)
|
197
|
-
}
|
135
|
+
val deleter: java.util.Map[String, Object] => Unit = { record =>
|
136
|
+
val keyObj = record.getOrElse(tsk.getKeyName.get, "")
|
137
|
+
val k = keyObj.toString
|
138
|
+
val key = new Key(namespace, setName, k)
|
139
|
+
Try(aerospike.delete(wp, key)) match {
|
140
|
+
case Failure(e) =>
|
141
|
+
log.error(k, e)
|
142
|
+
failures += k -> e.getMessage
|
143
|
+
failCount.addAndGet(1L)
|
144
|
+
case Success(_) =>
|
145
|
+
successCount.addAndGet(1L)
|
198
146
|
}
|
199
147
|
}
|
200
148
|
|
201
149
|
def add(page: Page): Unit = {
|
202
150
|
tsk.getCommand match {
|
203
151
|
case "put" =>
|
204
|
-
createRecords(page).
|
152
|
+
createRecords(page).map(toRecords).foreach(updater)
|
205
153
|
case "delete" =>
|
206
|
-
createRecords(page).
|
154
|
+
createRecords(page).map(toRecords).foreach(deleter)
|
207
155
|
}
|
208
156
|
}
|
209
157
|
|
@@ -211,7 +159,7 @@ class AerospikePageOutput(taskSource: TaskSource, schema: Schema, taskIndex: Int
|
|
211
159
|
|
212
160
|
def close(): Unit = {
|
213
161
|
reader.close()
|
214
|
-
|
162
|
+
aerospike.close()
|
215
163
|
}
|
216
164
|
|
217
165
|
def abort(): Unit = log.error(s"abort ${tsk.getCommand} ok[${successCount.longValue}] ng[${failCount.longValue()}]")
|
@@ -219,7 +167,7 @@ class AerospikePageOutput(taskSource: TaskSource, schema: Schema, taskIndex: Int
|
|
219
167
|
def commit: TaskReport = {
|
220
168
|
var r = Exec.newTaskReport
|
221
169
|
r.set("rans", successCount.longValue() + failCount.longValue())
|
222
|
-
r.set("failures", failures
|
170
|
+
r.set("failures", failures)
|
223
171
|
r
|
224
172
|
}
|
225
173
|
}
|
@@ -229,7 +177,7 @@ object ops {
|
|
229
177
|
sealed trait Col
|
230
178
|
|
231
179
|
object Col {
|
232
|
-
def of(c: Column)(implicit r: PageReader) =
|
180
|
+
def of(c: Column)(implicit r: PageReader): Col =
|
233
181
|
if (r isNull c) NullColumn(c.getIndex, c.getName, c.getType)
|
234
182
|
else c.getType.getName match {
|
235
183
|
case "string" =>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-output-aerospike
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takeru Sato
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -49,6 +49,8 @@ files:
|
|
49
49
|
- LICENSE.txt
|
50
50
|
- README.md
|
51
51
|
- build.gradle
|
52
|
+
- config/checkstyle/checkstyle.xml
|
53
|
+
- config/checkstyle/default.xml
|
52
54
|
- example/config-single.yml
|
53
55
|
- example/config.yml
|
54
56
|
- example/sample.csv
|
@@ -60,51 +62,12 @@ files:
|
|
60
62
|
- src/main/scala/org/embulk/output/aerospike/AerospikeOutputPlugin.scala
|
61
63
|
- src/main/scala/org/embulk/output/aerospike/AerospikePageOutput.scala
|
62
64
|
- src/test/java/org/embulk/output/aerospike/TestAerospikeOutputPlugin.java
|
63
|
-
- classpath/aerospike-
|
64
|
-
- classpath/
|
65
|
-
- classpath/aerospiker-msgpack_2.11-0.4.0.jar
|
66
|
-
- classpath/aerospiker-task_2.11-0.4.0.jar
|
67
|
-
- classpath/algebra-laws_2.11-0.2.1.jar
|
68
|
-
- classpath/algebra-std_2.11-0.2.1.jar
|
69
|
-
- classpath/algebra_2.11-0.2.1.jar
|
70
|
-
- classpath/asm-5.0.3.jar
|
71
|
-
- classpath/cats-core_2.11-0.1.2.jar
|
72
|
-
- classpath/cats-free_2.11-0.1.2.jar
|
73
|
-
- classpath/cats-laws_2.11-0.1.2.jar
|
74
|
-
- classpath/cats-macros_2.11-0.1.2.jar
|
75
|
-
- classpath/cats-state_2.11-0.1.2.jar
|
76
|
-
- classpath/cats-std_2.11-0.1.2.jar
|
77
|
-
- classpath/cats_2.11-0.1.2.jar
|
78
|
-
- classpath/circe-core_2.11-0.1.1.jar
|
79
|
-
- classpath/circe-generic_2.11-0.1.1.jar
|
80
|
-
- classpath/circe-jawn_2.11-0.1.1.jar
|
81
|
-
- classpath/commons-math3-3.2.jar
|
82
|
-
- classpath/discipline_2.11-0.3.jar
|
83
|
-
- classpath/embulk-output-aerospike-0.3.6.jar
|
65
|
+
- classpath/embulk-output-aerospike-0.4.0.jar
|
66
|
+
- classpath/scala-library-2.11.11.jar
|
84
67
|
- classpath/gnu-crypto-2.0.1.jar
|
85
|
-
- classpath/jawn-parser_2.11-0.8.0.jar
|
86
|
-
- classpath/jbcrypt-0.3m.jar
|
87
|
-
- classpath/jmh-core-1.9.1.jar
|
88
|
-
- classpath/jmh-generator-asm-1.9.1.jar
|
89
|
-
- classpath/jmh-generator-bytecode-1.9.1.jar
|
90
|
-
- classpath/jmh-generator-reflection-1.9.1.jar
|
91
|
-
- classpath/jopt-simple-4.6.jar
|
92
68
|
- classpath/luaj-jse-3.0.jar
|
93
|
-
- classpath/
|
94
|
-
- classpath/
|
95
|
-
- classpath/scala-logging_2.11-3.1.0.jar
|
96
|
-
- classpath/scala-parser-combinators_2.11-1.0.4.jar
|
97
|
-
- classpath/scala-reflect-2.11.2.jar
|
98
|
-
- classpath/scala-xml_2.11-1.0.4.jar
|
99
|
-
- classpath/scalacheck_2.11-1.12.4.jar
|
100
|
-
- classpath/scalaz-concurrent_2.11-7.1.4.jar
|
101
|
-
- classpath/scalaz-core_2.11-7.1.4.jar
|
102
|
-
- classpath/scalaz-effect_2.11-7.1.4.jar
|
103
|
-
- classpath/scalaz-stream_2.11-0.8.jar
|
104
|
-
- classpath/scodec-bits_2.11-1.0.9.jar
|
105
|
-
- classpath/shapeless_2.11-2.2.5.jar
|
106
|
-
- classpath/simulacrum_2.11-0.3.0.jar
|
107
|
-
- classpath/test-interface-1.0.jar
|
69
|
+
- classpath/jbcrypt-0.3m.jar
|
70
|
+
- classpath/aerospike-client-4.1.0.jar
|
108
71
|
homepage: https://github.com/tkrs/embulk-output-aerospike
|
109
72
|
licenses:
|
110
73
|
- MIT
|