embulk 0.6.9 → 0.6.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/build.gradle +1 -1
- data/embulk-core/src/main/java/org/embulk/spi/ProcessTask.java +81 -12
- data/embulk-docs/src/release.rst +1 -0
- data/embulk-docs/src/release/release-0.6.10.rst +15 -0
- data/lib/embulk/command/embulk_run.rb +27 -1
- data/lib/embulk/plugin_registry.rb +19 -3
- data/lib/embulk/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f9bbe21037e6186e386b39176e66b8336ce8d20
|
4
|
+
data.tar.gz: 29fef3403d44ff6dc571d3e3c050efc23f77b770
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1481af06ce9c9aa2497ee25ee2c7b4f3be2578acf33e2be01ba06a0727cdc20523af16a4e7bae64658e286b2060e118e6eedd97cec085186843063f5246a6001
|
7
|
+
data.tar.gz: a3ab3e1c0e0f8477127dd30c5484210ae09845410ba0a747be942868061a002ad35e27e4deed4b63c6d49bca6477103728bb35378d12ae8363e40b24d8bea94b
|
data/build.gradle
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
package org.embulk.spi;
|
2
2
|
|
3
3
|
import java.util.List;
|
4
|
+
import com.google.common.base.Function;
|
5
|
+
import com.google.common.collect.Lists;
|
6
|
+
import com.google.common.collect.ImmutableList;
|
4
7
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
5
8
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
6
9
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
@@ -8,6 +11,7 @@ import org.embulk.plugin.PluginType;
|
|
8
11
|
import org.embulk.config.TaskSource;
|
9
12
|
import org.embulk.spi.Schema;
|
10
13
|
import org.embulk.spi.util.Executors;
|
14
|
+
import org.embulk.spi.type.TimestampType;
|
11
15
|
|
12
16
|
public class ProcessTask
|
13
17
|
{
|
@@ -21,17 +25,16 @@ public class ProcessTask
|
|
21
25
|
private final Schema executorSchema;
|
22
26
|
private TaskSource executorTaskSource;
|
23
27
|
|
24
|
-
@JsonCreator
|
25
28
|
public ProcessTask(
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
PluginType inputPluginType,
|
30
|
+
PluginType outputPluginType,
|
31
|
+
List<PluginType> filterPluginTypes,
|
32
|
+
TaskSource inputTaskSource,
|
33
|
+
TaskSource outputTaskSource,
|
34
|
+
List<TaskSource> filterTaskSources,
|
35
|
+
List<Schema> schemas,
|
36
|
+
Schema executorSchema,
|
37
|
+
TaskSource executorTaskSource)
|
35
38
|
{
|
36
39
|
this.inputPluginType = inputPluginType;
|
37
40
|
this.outputPluginType = outputPluginType;
|
@@ -44,6 +47,36 @@ public class ProcessTask
|
|
44
47
|
this.executorTaskSource = executorTaskSource;
|
45
48
|
}
|
46
49
|
|
50
|
+
// TODO Because TimestampType doesn't store timestamp_format, serializing and deserializing
|
51
|
+
// Schema loses timestamp_format information. Here uses SchemaConfig instead to preseve it.
|
52
|
+
|
53
|
+
@JsonCreator
|
54
|
+
ProcessTask(
|
55
|
+
@JsonProperty("inputType") PluginType inputPluginType,
|
56
|
+
@JsonProperty("outputType") PluginType outputPluginType,
|
57
|
+
@JsonProperty("filterTypes") List<PluginType> filterPluginTypes,
|
58
|
+
@JsonProperty("inputTask") TaskSource inputTaskSource,
|
59
|
+
@JsonProperty("outputTask") TaskSource outputTaskSource,
|
60
|
+
@JsonProperty("filterTasks") List<TaskSource> filterTaskSources,
|
61
|
+
@JsonProperty("schemas") List<SchemaConfig> schemas,
|
62
|
+
@JsonProperty("executorSchema") SchemaConfig executorSchema,
|
63
|
+
@JsonProperty("executorTask") TaskSource executorTaskSource)
|
64
|
+
{
|
65
|
+
this(inputPluginType, outputPluginType, filterPluginTypes,
|
66
|
+
inputTaskSource, outputTaskSource, filterTaskSources,
|
67
|
+
ImmutableList.copyOf(Lists.transform(schemas,
|
68
|
+
new Function<SchemaConfig, Schema>()
|
69
|
+
{
|
70
|
+
public Schema apply(SchemaConfig s)
|
71
|
+
{
|
72
|
+
return s.toSchema();
|
73
|
+
}
|
74
|
+
}
|
75
|
+
)),
|
76
|
+
executorSchema.toSchema(),
|
77
|
+
executorTaskSource);
|
78
|
+
}
|
79
|
+
|
47
80
|
@JsonProperty("inputType")
|
48
81
|
public PluginType getInputPluginType()
|
49
82
|
{
|
@@ -80,18 +113,54 @@ public class ProcessTask
|
|
80
113
|
return filterTaskSources;
|
81
114
|
}
|
82
115
|
|
83
|
-
@
|
116
|
+
@JsonIgnore
|
84
117
|
public List<Schema> getFilterSchemas()
|
85
118
|
{
|
86
119
|
return schemas;
|
87
120
|
}
|
88
121
|
|
89
|
-
@JsonProperty("
|
122
|
+
@JsonProperty("schemas")
|
123
|
+
public List<SchemaConfig> getFilterSchemaConfigs()
|
124
|
+
{
|
125
|
+
return Lists.transform(schemas,
|
126
|
+
new Function<Schema, SchemaConfig>()
|
127
|
+
{
|
128
|
+
public SchemaConfig apply(Schema schema)
|
129
|
+
{
|
130
|
+
return schemaToSchemaConfig(schema);
|
131
|
+
}
|
132
|
+
});
|
133
|
+
}
|
134
|
+
|
135
|
+
@JsonIgnore
|
90
136
|
public Schema getExecutorSchema()
|
91
137
|
{
|
92
138
|
return executorSchema;
|
93
139
|
}
|
94
140
|
|
141
|
+
@JsonProperty("executorSchema")
|
142
|
+
SchemaConfig getExecutorSchemaConfig()
|
143
|
+
{
|
144
|
+
return schemaToSchemaConfig(executorSchema);
|
145
|
+
}
|
146
|
+
|
147
|
+
private static SchemaConfig schemaToSchemaConfig(Schema s)
|
148
|
+
{
|
149
|
+
return new SchemaConfig(Lists.transform(s.getColumns(),
|
150
|
+
new Function<Column, ColumnConfig>()
|
151
|
+
{
|
152
|
+
public ColumnConfig apply(Column c)
|
153
|
+
{
|
154
|
+
if (c.getType() instanceof TimestampType) {
|
155
|
+
return new ColumnConfig(c.getName(), c.getType(), ((TimestampType) c.getType()).getFormat());
|
156
|
+
} else {
|
157
|
+
return new ColumnConfig(c.getName(), c.getType(), null);
|
158
|
+
}
|
159
|
+
}
|
160
|
+
}
|
161
|
+
));
|
162
|
+
}
|
163
|
+
|
95
164
|
@JsonIgnore
|
96
165
|
public Schema getInputSchema()
|
97
166
|
{
|
data/embulk-docs/src/release.rst
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
Release 0.6.10
|
2
|
+
==================================
|
3
|
+
|
4
|
+
General Changes
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* PluginRegistry shows loaded plugin name and version to stdout
|
8
|
+
* Fixed a problem where ``embulk gem install`` command can't install gems which include a native extension
|
9
|
+
* Added ``embulk irb`` subcommand
|
10
|
+
* Fixed ``spi.ProcessTask`` serialization to preserve ``timestamp_format`` of a column. This fixes compatibility with embulk-executor-mapreduce.
|
11
|
+
|
12
|
+
|
13
|
+
Release Date
|
14
|
+
------------------
|
15
|
+
2015-05-21
|
@@ -14,6 +14,10 @@ module Embulk
|
|
14
14
|
Gem.clear_paths # force rubygems to reload GEM_HOME
|
15
15
|
end
|
16
16
|
|
17
|
+
# Gem.path is called when GemRunner installs a gem with native extension.
|
18
|
+
# Running extconf.rb fails without this hack.
|
19
|
+
fix_gem_ruby_path
|
20
|
+
|
17
21
|
# to make sure org.embulk.jruby.JRubyScriptingModule can require 'embulk/java/bootstrap'
|
18
22
|
$LOAD_PATH << Embulk.home('lib')
|
19
23
|
|
@@ -192,6 +196,11 @@ examples:
|
|
192
196
|
exec(*argv)
|
193
197
|
exit 127
|
194
198
|
|
199
|
+
when :irb
|
200
|
+
require 'irb'
|
201
|
+
IRB.start
|
202
|
+
exit 0
|
203
|
+
|
195
204
|
else
|
196
205
|
usage "Unknown subcommand #{subcmd.dump}."
|
197
206
|
end
|
@@ -339,7 +348,7 @@ examples:
|
|
339
348
|
|
340
349
|
def self.home(dir)
|
341
350
|
jar, resource = __FILE__.split("!")
|
342
|
-
if resource
|
351
|
+
if resource && jar =~ /^file:/
|
343
352
|
home = resource.split("/")[0..-3].join("/")
|
344
353
|
"#{jar}!#{home}/#{dir}"
|
345
354
|
else
|
@@ -361,6 +370,23 @@ examples:
|
|
361
370
|
|
362
371
|
private
|
363
372
|
|
373
|
+
def self.fix_gem_ruby_path
|
374
|
+
ruby_path = File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"])
|
375
|
+
jar, resource = ruby_path.split("!")
|
376
|
+
|
377
|
+
if resource && jar =~ /^file:/
|
378
|
+
# java
|
379
|
+
manifest = File.read("#{jar}!/META-INF/MANIFEST.MF") rescue ""
|
380
|
+
m = /Main-Class: ([^\r\n]+)/.match(manifest)
|
381
|
+
if m && m[1] != "org.jruby.Main"
|
382
|
+
# Main-Class is not jruby
|
383
|
+
Gem.define_singleton_method(:ruby) do
|
384
|
+
"java -cp #{jar_path(jar)} org.jruby.Main"
|
385
|
+
end
|
386
|
+
end
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
364
390
|
def self.setup_gem_paths(path)
|
365
391
|
# install bundler gem here & use bundler installed here
|
366
392
|
ENV['GEM_HOME'] = File.expand_path File.join(path, Gem.ruby_engine, RbConfig::CONFIG['ruby_version'])
|
@@ -6,6 +6,7 @@ module Embulk
|
|
6
6
|
def initialize(category, search_prefix)
|
7
7
|
@category = category
|
8
8
|
@search_prefix = search_prefix
|
9
|
+
@loaded_gems = {}
|
9
10
|
@map = {}
|
10
11
|
end
|
11
12
|
|
@@ -34,7 +35,7 @@ module Embulk
|
|
34
35
|
def search(type)
|
35
36
|
name = "#{@search_prefix}#{type}"
|
36
37
|
begin
|
37
|
-
|
38
|
+
require_and_show name
|
38
39
|
return true
|
39
40
|
rescue LoadError => e
|
40
41
|
# catch LoadError but don't catch ClassNotFoundException
|
@@ -50,7 +51,7 @@ module Embulk
|
|
50
51
|
|
51
52
|
paths = load_path_files.compact.sort # sort to prefer newer version
|
52
53
|
paths.each do |path|
|
53
|
-
|
54
|
+
require_and_show path
|
54
55
|
return true
|
55
56
|
end
|
56
57
|
|
@@ -64,7 +65,7 @@ module Embulk
|
|
64
65
|
specs = specs.sort_by {|spec| spec.version }
|
65
66
|
if spec = specs.last
|
66
67
|
spec.require_paths.each do |lib|
|
67
|
-
|
68
|
+
require_and_show "#{spec.full_gem_path}/#{lib}/#{name}"
|
68
69
|
end
|
69
70
|
return true
|
70
71
|
end
|
@@ -72,5 +73,20 @@ module Embulk
|
|
72
73
|
|
73
74
|
return false
|
74
75
|
end
|
76
|
+
|
77
|
+
def require_and_show(name)
|
78
|
+
require name
|
79
|
+
show_loaded_gems
|
80
|
+
end
|
81
|
+
|
82
|
+
def show_loaded_gems
|
83
|
+
# TODO use logger
|
84
|
+
Gem.loaded_specs.each do |name,spec|
|
85
|
+
if !@loaded_gems[name] && name =~ /^embulk/
|
86
|
+
puts "#{Time.now.strftime("%Y-%m-%d %H:%M:%S.%3N %z")}: Loaded plugin #{name} (#{spec.version})"
|
87
|
+
@loaded_gems[name] = true
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
75
91
|
end
|
76
92
|
end
|
data/lib/embulk/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sadayuki Furuhashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -293,6 +293,7 @@ files:
|
|
293
293
|
- embulk-docs/src/release/release-0.5.5.rst
|
294
294
|
- embulk-docs/src/release/release-0.6.0.rst
|
295
295
|
- embulk-docs/src/release/release-0.6.1.rst
|
296
|
+
- embulk-docs/src/release/release-0.6.10.rst
|
296
297
|
- embulk-docs/src/release/release-0.6.2.rst
|
297
298
|
- embulk-docs/src/release/release-0.6.3.rst
|
298
299
|
- embulk-docs/src/release/release-0.6.4.rst
|
@@ -408,8 +409,8 @@ files:
|
|
408
409
|
- classpath/bval-jsr303-0.5.jar
|
409
410
|
- classpath/commons-beanutils-core-1.8.3.jar
|
410
411
|
- classpath/commons-lang3-3.1.jar
|
411
|
-
- classpath/embulk-core-0.6.
|
412
|
-
- classpath/embulk-standards-0.6.
|
412
|
+
- classpath/embulk-core-0.6.10.jar
|
413
|
+
- classpath/embulk-standards-0.6.10.jar
|
413
414
|
- classpath/guava-18.0.jar
|
414
415
|
- classpath/guice-4.0.jar
|
415
416
|
- classpath/guice-multibindings-4.0.jar
|