embulk 0.6.27 → 0.7.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/.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
|
}
|