embulk 0.6.27 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -0
- data/Gemfile.lock +6 -1
- data/README.md +4 -4
- data/bin/embulk +39 -17
- data/build.gradle +23 -8
- data/embulk-cli/src/main/java/org/embulk/cli/Main.java +11 -2
- data/embulk-core/build.gradle +9 -4
- data/embulk-core/src/main/java/org/embulk/EmbulkEmbed.java +160 -61
- data/embulk-core/src/main/java/org/embulk/EmbulkService.java +1 -0
- data/embulk-core/src/main/java/org/embulk/command/TablePreviewPrinter.java +0 -1
- data/embulk-core/src/main/java/org/embulk/config/CommitReport.java +5 -1
- data/embulk-core/src/main/java/org/embulk/config/ConfigLoader.java +28 -7
- data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +1 -4
- data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +6 -3
- data/embulk-core/src/main/java/org/embulk/config/ModelManager.java +0 -2
- data/embulk-core/src/main/java/org/embulk/config/TaskReport.java +29 -0
- data/embulk-core/src/main/java/org/embulk/exec/BulkLoader.java +42 -45
- data/embulk-core/src/main/java/org/embulk/exec/ExecModule.java +0 -1
- data/embulk-core/src/main/java/org/embulk/exec/GuessExecutor.java +4 -7
- data/embulk-core/src/main/java/org/embulk/exec/LocalExecutorPlugin.java +5 -6
- data/embulk-core/src/main/java/org/embulk/exec/LoggerProvider.java +0 -1
- data/embulk-core/src/main/java/org/embulk/exec/PooledBufferAllocator.java +0 -3
- data/embulk-core/src/main/java/org/embulk/exec/PreviewExecutor.java +2 -2
- data/embulk-core/src/main/java/org/embulk/exec/ResumeState.java +26 -9
- data/embulk-core/src/main/java/org/embulk/exec/SamplingParserPlugin.java +2 -4
- data/embulk-core/src/main/java/org/embulk/guice/Bootstrap.java +12 -5
- data/embulk-core/src/main/java/org/embulk/guice/CloseableInjector.java +1 -1
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleInjector.java +26 -0
- data/embulk-core/src/main/java/org/embulk/guice/{CloseableInjectorProxy.java → LifeCycleInjectorProxy.java} +20 -6
- data/embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.java +10 -12
- data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderModule.java +0 -1
- data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +14 -1
- data/embulk-core/src/main/java/org/embulk/plugin/compat/InputPluginWrapper.java +102 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/PluginWrappers.java +30 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileInputWrapper.java +96 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileOutputWrapper.java +102 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalPageOutputWrapper.java +95 -0
- data/embulk-core/src/main/java/org/embulk/spi/ColumnConfig.java +0 -2
- data/embulk-core/src/main/java/org/embulk/spi/Exec.java +8 -2
- data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +7 -1
- data/embulk-core/src/main/java/org/embulk/spi/Extension.java +2 -2
- data/embulk-core/src/main/java/org/embulk/spi/FileInputPlugin.java +3 -3
- data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +12 -10
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputPlugin.java +3 -3
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +11 -9
- data/embulk-core/src/main/java/org/embulk/spi/FilterPlugin.java +0 -3
- data/embulk-core/src/main/java/org/embulk/spi/InputPlugin.java +4 -4
- data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +3 -3
- data/embulk-core/src/main/java/org/embulk/spi/PageReader.java +0 -1
- data/embulk-core/src/main/java/org/embulk/spi/ProcessTask.java +0 -5
- data/embulk-core/src/main/java/org/embulk/spi/SchemaConfig.java +0 -1
- data/embulk-core/src/main/java/org/embulk/spi/TaskState.java +19 -4
- data/embulk-core/src/main/java/org/embulk/spi/TempFileSpace.java +0 -3
- data/embulk-core/src/main/java/org/embulk/spi/Transactional.java +2 -2
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileInput.java +2 -2
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileOutput.java +2 -2
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalPageOutput.java +2 -2
- data/embulk-core/src/main/java/org/embulk/spi/time/DateTimeZoneSerDe.java +0 -2
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormat.java +0 -3
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +0 -1
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +0 -1
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampSerDe.java +0 -1
- data/embulk-core/src/main/java/org/embulk/spi/type/TypeDeserializer.java +0 -3
- data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFileSerDe.java +0 -3
- data/embulk-core/src/main/java/org/embulk/spi/unit/ToStringMap.java +0 -1
- data/embulk-core/src/main/java/org/embulk/spi/util/Executors.java +15 -12
- data/embulk-core/src/main/java/org/embulk/spi/util/Filters.java +0 -1
- data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +7 -7
- data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +8 -8
- data/embulk-docs/src/built-in.rst +27 -30
- data/embulk-docs/src/conf.py +2 -2
- data/embulk-docs/src/release.rst +1 -2
- data/embulk-docs/src/release/release-0.7.0.rst +96 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +0 -4
- data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +0 -10
- data/embulk-standards/src/main/java/org/embulk/standards/CsvTokenizer.java +1 -5
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +4 -5
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +4 -5
- data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +4 -4
- data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +0 -3
- data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +4 -6
- data/embulk.gemspec +14 -1
- data/lib/embulk.rb +59 -4
- data/lib/embulk/command/embulk_bundle.rb +56 -0
- data/lib/embulk/command/embulk_main.rb +2 -0
- data/lib/embulk/command/embulk_migrate_plugin.rb +170 -0
- data/lib/embulk/command/embulk_new_plugin.rb +4 -1
- data/lib/embulk/command/embulk_run.rb +188 -227
- data/lib/embulk/data/bundle/.ruby-version +1 -0
- data/lib/embulk/data/bundle/Gemfile +4 -1
- data/lib/embulk/data/bundle/embulk/input/example.rb +4 -4
- data/lib/embulk/data/bundle/embulk/output/example.rb +4 -4
- data/lib/embulk/data/new/README.md.erb +1 -1
- data/lib/embulk/data/new/java/file_input.java.erb +4 -4
- data/lib/embulk/data/new/java/file_output.java.erb +2 -2
- data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.properties +2 -2
- data/lib/embulk/data/new/java/input.java.erb +3 -3
- data/lib/embulk/data/new/java/output.java.erb +2 -2
- data/lib/embulk/data/new/ruby/.ruby-version +1 -0
- data/lib/embulk/data/new/ruby/gemspec.erb +1 -0
- data/lib/embulk/data/new/ruby/input.rb.erb +3 -3
- data/lib/embulk/data/new/ruby/output.rb.erb +4 -4
- data/lib/embulk/data/package_data.rb +1 -15
- data/lib/embulk/guess/charset.rb +10 -1
- data/lib/embulk/input_plugin.rb +12 -12
- data/lib/embulk/java/bootstrap.rb +7 -4
- data/lib/embulk/java/imports.rb +34 -2
- data/lib/embulk/logger.rb +2 -0
- data/lib/embulk/output_plugin.rb +12 -12
- data/lib/embulk/page_builder.rb +1 -1
- data/lib/embulk/plugin.rb +0 -1
- data/lib/embulk/runner.rb +184 -0
- data/lib/embulk/version.rb +1 -1
- metadata +76 -55
- data/embulk-core/src/main/java/org/embulk/command/LiquidTemplate.java +0 -8
- data/embulk-core/src/main/java/org/embulk/command/Runner.java +0 -369
- data/embulk-docs/src/release/release-0.6.26.rst +0 -17
- data/embulk-docs/src/release/release-0.6.27.rst +0 -11
- data/lib/embulk/command/embulk.rb +0 -47
- data/lib/embulk/data/bundle/Gemfile.lock +0 -8
- data/lib/embulk/exec.rb +0 -8
- data/lib/embulk/gems.rb +0 -29
- data/lib/embulk/java/liquid_helper.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6b45b793c322d59468c3d388e09313718a55de7
|
4
|
+
data.tar.gz: d34278276b5b486c18fd365382a817b1227772b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 103dd7e4b4f913ea106fa0d9161e0876234c6f726e21eaca87994094006876f75990fc84d0350dcf2cf1c73570094e8208ce6db56bb6e249ce341ca4e447e5fd
|
7
|
+
data.tar.gz: 305595f0a9bf0a887b6f7eba813df88f6950f011afc82915fe9e88e9eb1bac83adf11bfde0dffa054dd59411eaf2c66149fd1eab8c0b8256f9dc22c08b23d786
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.2.2
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
embulk (0.
|
4
|
+
embulk (0.7.0)
|
5
|
+
jruby-jars (= 9.0.0.0)
|
5
6
|
|
6
7
|
GEM
|
7
8
|
remote: https://rubygems.org/
|
8
9
|
specs:
|
10
|
+
jruby-jars (9.0.0.0)
|
9
11
|
kramdown (1.5.0)
|
10
12
|
power_assert (0.2.2)
|
11
13
|
rake (10.4.2)
|
@@ -24,3 +26,6 @@ DEPENDENCIES
|
|
24
26
|
rake (>= 0.10.0)
|
25
27
|
test-unit (~> 3.0.9)
|
26
28
|
yard (~> 0.8.7)
|
29
|
+
|
30
|
+
BUNDLED WITH
|
31
|
+
1.10.6
|
data/README.md
CHANGED
@@ -104,13 +104,13 @@ embulk cleanup config.yml -r resume-state.yml
|
|
104
104
|
|
105
105
|
### Using plugin bundle
|
106
106
|
|
107
|
-
`embulk bundle` subcommand creates (or updates if already exists) a private (isolated) bundle of a plugins.
|
107
|
+
`embulk bundle new` subcommand creates (or updates if already exists) a private (isolated) bundle of a plugins.
|
108
108
|
You can use the bundle using `-b <bundle_dir>` option. `embulk bundle` also generates some example plugins to \<bundle_dir>/embulk/\*.rb directory.
|
109
109
|
|
110
110
|
See the generated \<bundle_dir>/Gemfile file how to plugin bundles work.
|
111
111
|
|
112
112
|
```
|
113
|
-
embulk bundle ./embulk_bundle
|
113
|
+
embulk bundle new ./embulk_bundle
|
114
114
|
embulk guess -b ./embulk_bundle ...
|
115
115
|
embulk run -b ./embulk_bundle ...
|
116
116
|
```
|
@@ -141,10 +141,10 @@ embulk selfupdate
|
|
141
141
|
You can see JaCoCo's test coverage report at `${project}/build/reports/tests/index.html`
|
142
142
|
You can see Findbug's report at `${project}/build/reports/findbug/main.html` # FIXME coverage information is not included somehow
|
143
143
|
|
144
|
-
You can use `classpath` task to use
|
144
|
+
You can use `classpath` task to use `bundle exec ./bin/embulk` for development:
|
145
145
|
|
146
146
|
```
|
147
|
-
./gradlew classpath # -x test: skip test
|
147
|
+
./gradlew -t classpath # -x test: skip test
|
148
148
|
./bin/embulk
|
149
149
|
```
|
150
150
|
|
data/bin/embulk
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
if RUBY_PLATFORM =~ /java/i
|
4
|
+
# Enable embulk_bundle if run by CRuby.
|
5
|
+
# Disable embulk_bundle if run by JRuby.
|
6
|
+
if ENV['EMBULK_BIN_ENABLE_BUNDLE'] == File.expand_path(__FILE__)
|
7
|
+
ENV.delete('EMBULK_BIN_ENABLE_BUNDLE')
|
8
|
+
require_relative '../lib/embulk/command/embulk_bundle'
|
9
|
+
else
|
10
|
+
$LOAD_PATH << File.expand_path('../lib', File.dirname(__FILE__))
|
11
|
+
require 'embulk/command/embulk_main'
|
12
|
+
end
|
13
|
+
exit 0
|
14
|
+
end
|
15
|
+
|
3
16
|
java_args = []
|
4
17
|
jruby_args = []
|
5
18
|
default_optimize = false
|
@@ -55,30 +68,39 @@ unless java_cmd
|
|
55
68
|
end
|
56
69
|
end
|
57
70
|
|
58
|
-
embulk_home = File.dirname(File.dirname(__FILE__))
|
59
|
-
classpath_dir = File.join(embulk_home, 'classpath')
|
60
|
-
lib_dir = File.join(embulk_home, 'lib')
|
61
|
-
|
62
|
-
jruby_complete = Dir.entries(classpath_dir).find {|jar| jar =~ /jruby-complete-[\d\.]+\.jar/ } rescue nil
|
63
|
-
unless jruby_complete
|
64
|
-
STDERR.puts "Could not find jruby-complete at #{embulk_home}/classpath directory."
|
65
|
-
if embulk_home == '.'
|
66
|
-
STDERR.puts "Did you run ./gradlew classpath? You need to build java code and create ./classpath directory first."
|
67
|
-
end
|
68
|
-
raise SystemExit.new(1)
|
69
|
-
end
|
70
|
-
|
71
71
|
if overwrite_optimize == true || (default_optimize == true && overwrite_optimize != false)
|
72
72
|
java_args = %w[-XX:+AggressiveOpts -XX:+UseConcMarkSweepGC] + java_args
|
73
73
|
else
|
74
74
|
java_args = %w[-XX:+AggressiveOpts -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -Xverify:none] + java_args
|
75
75
|
end
|
76
76
|
|
77
|
-
#
|
77
|
+
# Disable bundler options of CRuby before starting JRuby
|
78
|
+
ENV.delete('GEM_HOME')
|
79
|
+
ENV.delete('GEM_PATH')
|
80
|
+
ENV.delete('BUNDLE_GEMFILE')
|
81
|
+
ENV.delete('BUNDLE_BIN_PATH')
|
82
|
+
ENV.delete('RUBYLIB')
|
83
|
+
ENV.delete('RUBYOPT')
|
84
|
+
|
85
|
+
env = {
|
86
|
+
'EMBULK_BIN_ENABLE_BUNDLE' => File.expand_path(__FILE__)
|
87
|
+
}
|
88
|
+
|
89
|
+
begin
|
90
|
+
require 'jruby-jars'
|
91
|
+
rescue LoadError => e
|
92
|
+
STDERR.puts "Could not load jruby-jar.gem. Did you run with \"bundle exec\"?"
|
93
|
+
raise e
|
94
|
+
end
|
95
|
+
jruby_cp = "#{File.dirname(JRubyJars.core_jar_path)}/*"
|
96
|
+
|
97
|
+
# java ... -jar ruby-complete.jar bin/embulk "$@"
|
78
98
|
cmdline = [java_cmd]
|
79
99
|
cmdline.concat java_args
|
80
|
-
cmdline << '-
|
100
|
+
cmdline << '-cp' << jruby_cp << 'org.jruby.Main'
|
81
101
|
cmdline.concat jruby_args
|
82
|
-
cmdline <<
|
102
|
+
cmdline << __FILE__
|
83
103
|
cmdline.concat ARGV
|
84
|
-
exec *cmdline
|
104
|
+
exec env, *cmdline
|
105
|
+
exit 127
|
106
|
+
|
data/build.gradle
CHANGED
@@ -16,10 +16,10 @@ def release_projects = [project(":embulk-core"), project(":embulk-standards")]
|
|
16
16
|
|
17
17
|
allprojects {
|
18
18
|
group = 'org.embulk'
|
19
|
-
version = '0.
|
19
|
+
version = '0.7.0'
|
20
20
|
|
21
21
|
ext {
|
22
|
-
jrubyVersion = '
|
22
|
+
jrubyVersion = '9.0.0.0'
|
23
23
|
}
|
24
24
|
|
25
25
|
apply plugin: 'java'
|
@@ -247,21 +247,35 @@ rubyTest.dependsOn('classpath')
|
|
247
247
|
//
|
248
248
|
// gem task
|
249
249
|
//
|
250
|
-
task
|
250
|
+
task gemJRuby(type: JRubyExec, dependsOn: ["classpath"]) {
|
251
251
|
jrubyArgs '-rrubygems/gem_runner', '-eGem::GemRunner.new.run(ARGV)'
|
252
252
|
script './lib/embulk/version.rb' // dummy
|
253
253
|
scriptArgs 'build', 'embulk.gemspec'
|
254
|
+
doLast { file("${project.name}-${project.version}-java.gem").renameTo("pkg/${project.name}-${project.version}-java.gem") }
|
255
|
+
}
|
256
|
+
|
257
|
+
task gem(type: Exec, dependsOn: ["classpath", "gemJRuby"]) {
|
258
|
+
executable "gem"
|
259
|
+
args "build", "embulk.gemspec"
|
260
|
+
doFirst {
|
261
|
+
def rubyVersion = file(".ruby-version").getText().trim()
|
262
|
+
if (!"ruby --version".execute().text.contains(rubyVersion)) {
|
263
|
+
throw new GradleException("Version of 'ruby' command in PATH must be ${rubyVersion}. Use rbenv and install ${rubyVersion}")
|
264
|
+
}
|
265
|
+
}
|
254
266
|
doLast { file("${project.name}-${project.version}.gem").renameTo("pkg/${project.name}-${project.version}.gem") }
|
255
267
|
}
|
256
|
-
gem.dependsOn('classpath')
|
257
268
|
|
258
269
|
//
|
259
270
|
// rubyGemsUpload task
|
260
271
|
//
|
261
|
-
task
|
262
|
-
|
263
|
-
|
264
|
-
|
272
|
+
task rubyGemsUploadJRuby(type: Exec, dependsOn: ["gem"]) {
|
273
|
+
executable "gem"
|
274
|
+
args "push", "pkg/embulk-${project.version}-java.gem"
|
275
|
+
}
|
276
|
+
task rubyGemsUpload(type: Exec, dependsOn: ["gem", "rubyGemsUploadJRuby"]) {
|
277
|
+
executable "gem"
|
278
|
+
args "push", "pkg/embulk-${project.version}.gem"
|
265
279
|
}
|
266
280
|
|
267
281
|
//
|
@@ -296,6 +310,7 @@ Manual operations:
|
|
296
310
|
}
|
297
311
|
bintrayUpload.mustRunAfter('releaseCheck')
|
298
312
|
rubyGemsUpload.mustRunAfter('releaseCheck')
|
313
|
+
rubyGemsUploadJRuby.mustRunAfter('releaseCheck')
|
299
314
|
|
300
315
|
task setVersion << {
|
301
316
|
if (!project.hasProperty("to")) {
|
@@ -1,12 +1,21 @@
|
|
1
1
|
package org.embulk.cli;
|
2
2
|
|
3
|
+
import java.net.URISyntaxException;
|
4
|
+
|
3
5
|
public class Main
|
4
6
|
{
|
5
7
|
public static void main(String[] args)
|
6
8
|
{
|
7
|
-
// $ java -jar jruby-complete.jar
|
9
|
+
// $ java -jar jruby-complete.jar embulk-core.jar!/embulk/command/embulk_bundle.rb "$@"
|
8
10
|
String[] jrubyArgs = new String[args.length + 1];
|
9
|
-
|
11
|
+
String resourcePath;
|
12
|
+
try {
|
13
|
+
resourcePath = Main.class.getProtectionDomain().getCodeSource().getLocation().toURI().toString() + "!/";
|
14
|
+
}
|
15
|
+
catch (URISyntaxException ex) {
|
16
|
+
resourcePath = "classpath:";
|
17
|
+
}
|
18
|
+
jrubyArgs[0] = resourcePath + "embulk/command/embulk_bundle.rb";
|
10
19
|
System.arraycopy(args, 0, jrubyArgs, 1, args.length);
|
11
20
|
org.jruby.Main.main(jrubyArgs);
|
12
21
|
}
|
data/embulk-core/build.gradle
CHANGED
@@ -2,7 +2,7 @@ apply plugin: "com.github.jruby-gradle.jar"
|
|
2
2
|
|
3
3
|
// include ruby scripts to jar. don't use sourceSets.main.resources.srcDirs
|
4
4
|
// because IntelliJ causes error if srcDirs includes files out of projectDir.
|
5
|
-
processResources.from("${rootProject.projectDir}/lib", "${buildDir}/
|
5
|
+
processResources.from("${rootProject.projectDir}/lib/", "${buildDir}/gemlib")
|
6
6
|
|
7
7
|
configurations {
|
8
8
|
// com.google.inject:guice depends on asm and cglib but version of the libraries conflict
|
@@ -38,17 +38,22 @@ dependencies {
|
|
38
38
|
compile 'io.netty:netty-buffer:5.0.0.Alpha1'
|
39
39
|
compile 'org.fusesource.jansi:jansi:1.11'
|
40
40
|
|
41
|
-
//
|
41
|
+
// For embulk/guess/charset.rb. See also embulk.gemspec
|
42
42
|
compile 'com.ibm.icu:icu4j:54.1.1'
|
43
43
|
|
44
44
|
gems 'rubygems:liquid:3.0.6'
|
45
45
|
}
|
46
46
|
|
47
47
|
task unpackGems(type: JRubyPrepare) {
|
48
|
-
outputDir file("${buildDir}/
|
48
|
+
outputDir file("${buildDir}/gem")
|
49
49
|
dependencies configurations.gems
|
50
50
|
doLast {
|
51
|
-
|
51
|
+
// move to build/gem/*/lib/* to build/gemlib/
|
52
|
+
file("${buildDir}/gemlib").mkdirs()
|
53
|
+
file("${buildDir}/gem/gems").eachDir { gemDir ->
|
54
|
+
file("${gemDir}/lib").renameTo("${buildDir}/gemlib/")
|
55
|
+
}
|
56
|
+
fileTree(dir: "${buildDir}/gemlib", include: "**/.jrubydir").each { f -> f.delete() }
|
52
57
|
}
|
53
58
|
}
|
54
59
|
processResources.dependsOn("unpackGems")
|
@@ -1,12 +1,12 @@
|
|
1
1
|
package org.embulk;
|
2
2
|
|
3
|
+
import java.util.ArrayList;
|
3
4
|
import java.util.Arrays;
|
4
5
|
import java.util.List;
|
5
6
|
import com.google.common.base.Function;
|
6
7
|
import com.google.common.base.Throwables;
|
7
8
|
import com.google.common.collect.ImmutableList;
|
8
9
|
import com.google.common.collect.Iterables;
|
9
|
-
import com.google.common.annotations.Beta;
|
10
10
|
import com.google.inject.Injector;
|
11
11
|
import com.google.inject.Module;
|
12
12
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
@@ -14,7 +14,6 @@ import org.embulk.config.ModelManager;
|
|
14
14
|
import org.embulk.config.ConfigSource;
|
15
15
|
import org.embulk.config.ConfigDiff;
|
16
16
|
import org.embulk.config.ConfigLoader;
|
17
|
-
import org.embulk.EmbulkService;
|
18
17
|
import org.embulk.exec.BulkLoader;
|
19
18
|
import org.embulk.exec.GuessExecutor;
|
20
19
|
import org.embulk.exec.PreviewExecutor;
|
@@ -22,69 +21,115 @@ import org.embulk.exec.PreviewResult;
|
|
22
21
|
import org.embulk.exec.ExecutionResult;
|
23
22
|
import org.embulk.exec.PartialExecutionException;
|
24
23
|
import org.embulk.exec.ResumeState;
|
24
|
+
import org.embulk.spi.BufferAllocator;
|
25
25
|
import org.embulk.spi.ExecSession;
|
26
26
|
import org.embulk.guice.Bootstrap;
|
27
|
-
import org.embulk.guice.
|
27
|
+
import org.embulk.guice.LifeCycleInjector;
|
28
28
|
import static com.google.common.base.Preconditions.checkState;
|
29
29
|
import static com.google.common.base.Preconditions.checkNotNull;
|
30
30
|
|
31
|
-
@Beta
|
32
31
|
public class EmbulkEmbed
|
33
|
-
implements AutoCloseable
|
34
32
|
{
|
35
33
|
public static ConfigLoader newSystemConfigLoader()
|
36
34
|
{
|
37
35
|
return new ConfigLoader(new ModelManager(null, new ObjectMapper()));
|
38
36
|
}
|
39
37
|
|
40
|
-
|
41
|
-
private final BulkLoader bulkLoader;
|
42
|
-
private final GuessExecutor guessExecutor;
|
43
|
-
private final PreviewExecutor previewExecutor;
|
44
|
-
|
45
|
-
public EmbulkEmbed(ConfigSource systemConfig, Module... additionalModules)
|
38
|
+
public static class Bootstrap
|
46
39
|
{
|
47
|
-
|
48
|
-
}
|
40
|
+
private final ConfigLoader systemConfigLoader;
|
49
41
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
42
|
+
private ConfigSource systemConfig;
|
43
|
+
|
44
|
+
private final List<Function<? super List<Module>, ? extends Iterable<? extends Module>>> moduleOverrides;
|
45
|
+
|
46
|
+
public Bootstrap()
|
47
|
+
{
|
48
|
+
this.systemConfigLoader = newSystemConfigLoader();
|
49
|
+
this.systemConfig = systemConfigLoader.newConfigSource();
|
50
|
+
this.moduleOverrides = new ArrayList<>();
|
51
|
+
}
|
52
|
+
|
53
|
+
public ConfigLoader getSystemConfigLoader()
|
54
|
+
{
|
55
|
+
return systemConfigLoader;
|
56
|
+
}
|
57
|
+
|
58
|
+
public Bootstrap setSystemConfig(ConfigSource systemConfig)
|
59
|
+
{
|
60
|
+
this.systemConfig = systemConfig.deepCopy();
|
61
|
+
return this;
|
62
|
+
}
|
63
|
+
|
64
|
+
public Bootstrap addModules(Module... additionalModules)
|
65
|
+
{
|
66
|
+
return addModules(Arrays.asList(additionalModules));
|
67
|
+
}
|
68
|
+
|
69
|
+
public Bootstrap addModules(Iterable<? extends Module> additionalModules)
|
70
|
+
{
|
71
|
+
final List<Module> copy = ImmutableList.copyOf(additionalModules);
|
72
|
+
return overrideModules(
|
73
|
+
new Function<List<Module>, Iterable<Module>>()
|
57
74
|
{
|
58
|
-
|
59
|
-
|
60
|
-
|
75
|
+
public Iterable<Module> apply(List<Module> modules)
|
76
|
+
{
|
77
|
+
return Iterables.concat(modules, copy);
|
78
|
+
}
|
79
|
+
});
|
80
|
+
}
|
81
|
+
|
82
|
+
public Bootstrap overrideModules(Function<? super List<Module>, ? extends Iterable<? extends Module>> function)
|
83
|
+
{
|
84
|
+
moduleOverrides.add(function);
|
85
|
+
return this;
|
86
|
+
}
|
87
|
+
|
88
|
+
public EmbulkEmbed initialize()
|
89
|
+
{
|
90
|
+
return build(true);
|
91
|
+
}
|
92
|
+
|
93
|
+
public EmbulkEmbed initializeCloseable()
|
94
|
+
{
|
95
|
+
return build(false);
|
96
|
+
}
|
97
|
+
|
98
|
+
private EmbulkEmbed build(boolean destroyOnShutdownHook)
|
99
|
+
{
|
100
|
+
org.embulk.guice.Bootstrap bootstrap = new org.embulk.guice.Bootstrap()
|
101
|
+
.requireExplicitBindings(false)
|
102
|
+
.addModules(EmbulkService.standardModuleList(systemConfig));
|
103
|
+
|
104
|
+
for (Function<? super List<Module>, ? extends Iterable<? extends Module>> override : moduleOverrides) {
|
105
|
+
bootstrap = bootstrap.overrideModules(override);
|
106
|
+
}
|
107
|
+
|
108
|
+
LifeCycleInjector injector;
|
109
|
+
if (destroyOnShutdownHook) {
|
110
|
+
injector = bootstrap.initialize();
|
111
|
+
} else {
|
112
|
+
injector = bootstrap.initializeCloseable();
|
113
|
+
}
|
114
|
+
|
115
|
+
return new EmbulkEmbed(systemConfig, injector);
|
116
|
+
}
|
61
117
|
}
|
62
118
|
|
63
|
-
|
64
|
-
|
119
|
+
private final LifeCycleInjector injector;
|
120
|
+
private final BulkLoader bulkLoader;
|
121
|
+
private final GuessExecutor guessExecutor;
|
122
|
+
private final PreviewExecutor previewExecutor;
|
123
|
+
|
124
|
+
EmbulkEmbed(ConfigSource systemConfig, LifeCycleInjector injector)
|
65
125
|
{
|
66
|
-
this.injector =
|
67
|
-
.requireExplicitBindings(false)
|
68
|
-
.addModules(EmbulkService.standardModuleList(systemConfig))
|
69
|
-
.overrideModules(overrideModules)
|
70
|
-
.initializeCloseable();
|
126
|
+
this.injector = injector;
|
71
127
|
injector.getInstance(org.slf4j.ILoggerFactory.class);
|
72
128
|
this.bulkLoader = new BulkLoader(injector, systemConfig);
|
73
129
|
this.guessExecutor = injector.getInstance(GuessExecutor.class);
|
74
130
|
this.previewExecutor = injector.getInstance(PreviewExecutor.class);
|
75
131
|
}
|
76
132
|
|
77
|
-
@Override
|
78
|
-
public void close()
|
79
|
-
{
|
80
|
-
try {
|
81
|
-
injector.close();
|
82
|
-
}
|
83
|
-
catch (Exception ex) {
|
84
|
-
throw Throwables.propagate(ex);
|
85
|
-
}
|
86
|
-
}
|
87
|
-
|
88
133
|
public Injector getInjector()
|
89
134
|
{
|
90
135
|
return injector;
|
@@ -95,31 +140,45 @@ public class EmbulkEmbed
|
|
95
140
|
return injector.getInstance(ModelManager.class);
|
96
141
|
}
|
97
142
|
|
98
|
-
public
|
143
|
+
public BufferAllocator getBufferAllocator()
|
99
144
|
{
|
100
|
-
return injector.getInstance(
|
145
|
+
return injector.getInstance(BufferAllocator.class);
|
101
146
|
}
|
102
147
|
|
103
|
-
public
|
148
|
+
public ConfigLoader newConfigLoader()
|
104
149
|
{
|
105
|
-
return
|
150
|
+
return injector.getInstance(ConfigLoader.class);
|
106
151
|
}
|
107
152
|
|
108
|
-
public ConfigDiff guess(
|
153
|
+
public ConfigDiff guess(ConfigSource config)
|
109
154
|
{
|
110
|
-
|
155
|
+
ExecSession exec = newExecSession(config);
|
156
|
+
try {
|
157
|
+
return guessExecutor.guess(exec, config);
|
158
|
+
}
|
159
|
+
finally {
|
160
|
+
exec.cleanup();
|
161
|
+
}
|
111
162
|
}
|
112
163
|
|
113
|
-
public PreviewResult preview(
|
164
|
+
public PreviewResult preview(ConfigSource config)
|
114
165
|
{
|
115
|
-
|
166
|
+
ExecSession exec = newExecSession(config);
|
167
|
+
try {
|
168
|
+
return previewExecutor.preview(exec, config);
|
169
|
+
}
|
170
|
+
finally {
|
171
|
+
exec.cleanup();
|
172
|
+
}
|
116
173
|
}
|
117
174
|
|
118
|
-
public ExecutionResult run(
|
175
|
+
public ExecutionResult run(ConfigSource config)
|
119
176
|
{
|
177
|
+
ExecSession exec = newExecSession(config);
|
120
178
|
try {
|
121
179
|
return bulkLoader.run(exec, config);
|
122
|
-
}
|
180
|
+
}
|
181
|
+
catch (PartialExecutionException partial) {
|
123
182
|
try {
|
124
183
|
bulkLoader.cleanup(config, partial.getResumeState());
|
125
184
|
} catch (Throwable ex) {
|
@@ -127,22 +186,52 @@ public class EmbulkEmbed
|
|
127
186
|
}
|
128
187
|
throw partial;
|
129
188
|
}
|
189
|
+
finally {
|
190
|
+
try {
|
191
|
+
exec.cleanup();
|
192
|
+
}
|
193
|
+
catch (Exception ex) {
|
194
|
+
// TODO add this exception to ExecutionResult.getIgnoredExceptions
|
195
|
+
// or partial.addSuppressed
|
196
|
+
ex.printStackTrace(System.err);
|
197
|
+
}
|
198
|
+
}
|
130
199
|
}
|
131
200
|
|
132
|
-
public ResumableResult runResumable(
|
201
|
+
public ResumableResult runResumable(ConfigSource config)
|
133
202
|
{
|
134
|
-
|
203
|
+
ExecSession exec = newExecSession(config);
|
135
204
|
try {
|
136
|
-
result
|
137
|
-
|
138
|
-
|
205
|
+
ExecutionResult result;
|
206
|
+
try {
|
207
|
+
result = bulkLoader.run(exec, config);
|
208
|
+
} catch (PartialExecutionException partial) {
|
209
|
+
return new ResumableResult(partial);
|
210
|
+
}
|
211
|
+
return new ResumableResult(result);
|
212
|
+
}
|
213
|
+
finally {
|
214
|
+
try {
|
215
|
+
exec.cleanup();
|
216
|
+
}
|
217
|
+
catch (Exception ex) {
|
218
|
+
// TODO add this exception to ExecutionResult.getIgnoredExceptions
|
219
|
+
// or partial.addSuppressed
|
220
|
+
ex.printStackTrace(System.err);
|
221
|
+
}
|
139
222
|
}
|
140
|
-
return new ResumableResult(result);
|
141
223
|
}
|
142
224
|
|
143
|
-
|
225
|
+
private ExecSession newExecSession(ConfigSource config)
|
144
226
|
{
|
145
|
-
|
227
|
+
ConfigSource execConfig = config.deepCopy().getNestedOrSetEmpty("exec");
|
228
|
+
return ExecSession.builder(injector).fromExecConfig(execConfig).build();
|
229
|
+
}
|
230
|
+
|
231
|
+
public ResumeStateAction resumeState(ConfigSource config, ConfigSource resumeStateConfig)
|
232
|
+
{
|
233
|
+
ResumeState resumeState = resumeStateConfig.loadConfig(ResumeState.class);
|
234
|
+
return new ResumeStateAction(config, resumeState);
|
146
235
|
}
|
147
236
|
|
148
237
|
public static class ResumableResult
|
@@ -186,12 +275,12 @@ public class EmbulkEmbed
|
|
186
275
|
}
|
187
276
|
}
|
188
277
|
|
189
|
-
public class
|
278
|
+
public class ResumeStateAction
|
190
279
|
{
|
191
280
|
private final ConfigSource config;
|
192
281
|
private final ResumeState resumeState;
|
193
282
|
|
194
|
-
public
|
283
|
+
public ResumeStateAction(ConfigSource config, ResumeState resumeState)
|
195
284
|
{
|
196
285
|
this.config = config;
|
197
286
|
this.resumeState = resumeState;
|
@@ -213,4 +302,14 @@ public class EmbulkEmbed
|
|
213
302
|
bulkLoader.cleanup(config, resumeState);
|
214
303
|
}
|
215
304
|
}
|
305
|
+
|
306
|
+
public void destroy()
|
307
|
+
{
|
308
|
+
try {
|
309
|
+
injector.destroy();
|
310
|
+
}
|
311
|
+
catch (Exception ex) {
|
312
|
+
throw Throwables.propagate(ex);
|
313
|
+
}
|
314
|
+
}
|
216
315
|
}
|