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
|
@@ -14,6 +14,7 @@ import org.embulk.plugin.BuiltinPluginSourceModule;
|
|
|
14
14
|
import org.embulk.jruby.JRubyScriptingModule;
|
|
15
15
|
import static com.google.common.base.Preconditions.checkState;
|
|
16
16
|
|
|
17
|
+
@Deprecated
|
|
17
18
|
public class EmbulkService
|
|
18
19
|
{
|
|
19
20
|
private final ConfigSource systemConfig;
|
|
@@ -31,6 +31,19 @@ public class ConfigLoader
|
|
|
31
31
|
return new DataSourceImpl(model);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
public ConfigSource fromJsonString(String string)
|
|
35
|
+
{
|
|
36
|
+
JsonNode node;
|
|
37
|
+
try {
|
|
38
|
+
node = new ObjectMapper().readTree(string);
|
|
39
|
+
}
|
|
40
|
+
catch (IOException ex) {
|
|
41
|
+
throw new RuntimeException(ex);
|
|
42
|
+
}
|
|
43
|
+
validateJsonNode(node);
|
|
44
|
+
return new DataSourceImpl(model, (ObjectNode) node);
|
|
45
|
+
}
|
|
46
|
+
|
|
34
47
|
public ConfigSource fromJsonFile(File file) throws IOException
|
|
35
48
|
{
|
|
36
49
|
try (FileInputStream is = new FileInputStream(file)) {
|
|
@@ -41,9 +54,14 @@ public class ConfigLoader
|
|
|
41
54
|
public ConfigSource fromJson(InputStream stream) throws IOException
|
|
42
55
|
{
|
|
43
56
|
JsonNode node = new ObjectMapper().readTree(stream);
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
57
|
+
validateJsonNode(node);
|
|
58
|
+
return new DataSourceImpl(model, (ObjectNode) node);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public ConfigSource fromYamlString(String string)
|
|
62
|
+
{
|
|
63
|
+
JsonNode node = objectToJson(new Yaml().load(string));
|
|
64
|
+
validateJsonNode(node);
|
|
47
65
|
return new DataSourceImpl(model, (ObjectNode) node);
|
|
48
66
|
}
|
|
49
67
|
|
|
@@ -56,13 +74,16 @@ public class ConfigLoader
|
|
|
56
74
|
|
|
57
75
|
public ConfigSource fromYaml(InputStream stream) throws IOException
|
|
58
76
|
{
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
77
|
+
JsonNode node = objectToJson(new Yaml().load(stream));
|
|
78
|
+
validateJsonNode(node);
|
|
79
|
+
return new DataSourceImpl(model, (ObjectNode) node);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
private static void validateJsonNode(JsonNode node)
|
|
83
|
+
{
|
|
62
84
|
if (!node.isObject()) {
|
|
63
85
|
throw new RuntimeJsonMappingException("Expected object to load ConfigSource but got "+node);
|
|
64
86
|
}
|
|
65
|
-
return new DataSourceImpl(model, (ObjectNode) node);
|
|
66
87
|
}
|
|
67
88
|
|
|
68
89
|
@Deprecated
|
|
@@ -4,16 +4,13 @@ import java.util.List;
|
|
|
4
4
|
import java.util.Map;
|
|
5
5
|
import java.util.Iterator;
|
|
6
6
|
import com.google.common.collect.ImmutableList;
|
|
7
|
-
import com.fasterxml.jackson.core.JsonParser;
|
|
8
|
-
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
9
7
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
10
|
-
import com.fasterxml.jackson.databind.JsonMappingException;
|
|
11
8
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
12
9
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
13
10
|
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
|
14
11
|
|
|
15
12
|
public class DataSourceImpl
|
|
16
|
-
implements ConfigSource, TaskSource, CommitReport, ConfigDiff
|
|
13
|
+
implements ConfigSource, TaskSource, TaskReport, /* Deprecated */ CommitReport, ConfigDiff
|
|
17
14
|
{
|
|
18
15
|
protected final ObjectNode data;
|
|
19
16
|
protected final ModelManager model;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
package org.embulk.config;
|
|
2
2
|
|
|
3
3
|
import java.io.IOException;
|
|
4
|
-
import com.google.inject.Inject;
|
|
5
4
|
import com.fasterxml.jackson.core.JsonGenerator;
|
|
6
5
|
import com.fasterxml.jackson.core.JsonParser;
|
|
7
6
|
import com.fasterxml.jackson.databind.module.SimpleModule;
|
|
@@ -13,13 +12,13 @@ import com.fasterxml.jackson.databind.DeserializationContext;
|
|
|
13
12
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
14
13
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
|
15
14
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
16
|
-
import com.fasterxml.jackson.module.guice.ObjectMapperModule;
|
|
17
15
|
|
|
18
16
|
public class DataSourceSerDe
|
|
19
17
|
{
|
|
20
18
|
public static class SerDeModule
|
|
21
19
|
extends SimpleModule
|
|
22
20
|
{
|
|
21
|
+
@SuppressWarnings("deprecation")
|
|
23
22
|
public SerDeModule(final ModelManager model)
|
|
24
23
|
{
|
|
25
24
|
// DataSourceImpl
|
|
@@ -34,7 +33,11 @@ public class DataSourceSerDe
|
|
|
34
33
|
addSerializer(TaskSource.class, new DataSourceSerializer<TaskSource>());
|
|
35
34
|
addDeserializer(TaskSource.class, new DataSourceDeserializer<TaskSource>(model));
|
|
36
35
|
|
|
37
|
-
//
|
|
36
|
+
// TaskReport
|
|
37
|
+
addSerializer(TaskReport.class, new DataSourceSerializer<TaskReport>());
|
|
38
|
+
addDeserializer(TaskReport.class, new DataSourceDeserializer<TaskReport>(model));
|
|
39
|
+
|
|
40
|
+
// CommitReport (Deprecated)
|
|
38
41
|
addSerializer(CommitReport.class, new DataSourceSerializer<CommitReport>());
|
|
39
42
|
addDeserializer(CommitReport.class, new DataSourceDeserializer<CommitReport>(model));
|
|
40
43
|
|
|
@@ -6,11 +6,9 @@ import com.google.inject.Inject;
|
|
|
6
6
|
import com.google.inject.Injector;
|
|
7
7
|
import com.google.common.base.Throwables;
|
|
8
8
|
import com.fasterxml.jackson.core.JsonParser;
|
|
9
|
-
import com.fasterxml.jackson.databind.Module;
|
|
10
9
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
11
10
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
12
11
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
13
|
-
import com.fasterxml.jackson.databind.JsonMappingException;
|
|
14
12
|
|
|
15
13
|
public class ModelManager
|
|
16
14
|
{
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
package org.embulk.config;
|
|
2
|
+
|
|
3
|
+
public interface TaskReport
|
|
4
|
+
extends DataSource
|
|
5
|
+
{
|
|
6
|
+
@Override
|
|
7
|
+
TaskReport getNested(String attrName);
|
|
8
|
+
|
|
9
|
+
@Override
|
|
10
|
+
TaskReport getNestedOrSetEmpty(String attrName);
|
|
11
|
+
|
|
12
|
+
@Override
|
|
13
|
+
TaskReport set(String attrName, Object v);
|
|
14
|
+
|
|
15
|
+
@Override
|
|
16
|
+
TaskReport setNested(String attrName, DataSource v);
|
|
17
|
+
|
|
18
|
+
@Override
|
|
19
|
+
TaskReport setAll(DataSource other);
|
|
20
|
+
|
|
21
|
+
@Override
|
|
22
|
+
TaskReport remove(String attrName);
|
|
23
|
+
|
|
24
|
+
@Override
|
|
25
|
+
TaskReport deepCopy();
|
|
26
|
+
|
|
27
|
+
@Override
|
|
28
|
+
TaskReport merge(DataSource other);
|
|
29
|
+
}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
package org.embulk.exec;
|
|
2
2
|
|
|
3
3
|
import java.util.List;
|
|
4
|
-
import java.util.Arrays;
|
|
5
4
|
import java.util.concurrent.ExecutionException;
|
|
6
5
|
import com.google.common.base.Optional;
|
|
7
6
|
import com.google.common.collect.ImmutableList;
|
|
8
7
|
import com.google.inject.Inject;
|
|
9
8
|
import com.google.inject.Injector;
|
|
10
9
|
import com.google.common.base.Throwables;
|
|
11
|
-
import com.google.common.base.Predicates;
|
|
12
|
-
import com.google.common.collect.Iterables;
|
|
13
10
|
import org.embulk.config.Task;
|
|
14
11
|
import org.embulk.config.Config;
|
|
15
12
|
import org.embulk.config.ConfigDefault;
|
|
@@ -17,7 +14,7 @@ import org.embulk.config.ConfigSource;
|
|
|
17
14
|
import org.embulk.config.ConfigException;
|
|
18
15
|
import org.embulk.config.TaskSource;
|
|
19
16
|
import org.embulk.config.ConfigDiff;
|
|
20
|
-
import org.embulk.config.
|
|
17
|
+
import org.embulk.config.TaskReport;
|
|
21
18
|
import org.embulk.plugin.PluginType;
|
|
22
19
|
import org.embulk.spi.Schema;
|
|
23
20
|
import org.embulk.spi.Exec;
|
|
@@ -132,7 +129,7 @@ public class BulkLoader
|
|
|
132
129
|
public void initialize(int inputTaskCount, int outputTaskCount)
|
|
133
130
|
{
|
|
134
131
|
if (inputTaskStates != null || outputTaskStates != null) {
|
|
135
|
-
// initialize is called twice if resume (by
|
|
132
|
+
// initialize is called twice if resume (by restoreResumedTaskReports and ExecutorPlugin.execute)
|
|
136
133
|
if (inputTaskStates.size() != inputTaskCount || outputTaskStates.size() != outputTaskCount) {
|
|
137
134
|
throw new ConfigException(String.format(
|
|
138
135
|
"input task count and output task (%d and %d) must be same with the first execution (%d and %d) whenre resumed",
|
|
@@ -213,38 +210,38 @@ public class BulkLoader
|
|
|
213
210
|
this.inputConfigDiff = inputConfigDiff;
|
|
214
211
|
}
|
|
215
212
|
|
|
216
|
-
private List<Optional<
|
|
213
|
+
private List<Optional<TaskReport>> getInputTaskReports()
|
|
217
214
|
{
|
|
218
|
-
ImmutableList.Builder<Optional<
|
|
215
|
+
ImmutableList.Builder<Optional<TaskReport>> builder = ImmutableList.builder();
|
|
219
216
|
for (TaskState inputTaskState : inputTaskStates) {
|
|
220
|
-
builder.add(inputTaskState.
|
|
217
|
+
builder.add(inputTaskState.getTaskReport());
|
|
221
218
|
}
|
|
222
219
|
return builder.build();
|
|
223
220
|
}
|
|
224
221
|
|
|
225
|
-
private List<Optional<
|
|
222
|
+
private List<Optional<TaskReport>> getOutputTaskReports()
|
|
226
223
|
{
|
|
227
|
-
ImmutableList.Builder<Optional<
|
|
224
|
+
ImmutableList.Builder<Optional<TaskReport>> builder = ImmutableList.builder();
|
|
228
225
|
for (TaskState outputTaskState : outputTaskStates) {
|
|
229
|
-
builder.add(outputTaskState.
|
|
226
|
+
builder.add(outputTaskState.getTaskReport());
|
|
230
227
|
}
|
|
231
228
|
return builder.build();
|
|
232
229
|
}
|
|
233
230
|
|
|
234
|
-
public List<
|
|
231
|
+
public List<TaskReport> getAllInputTaskReports()
|
|
235
232
|
{
|
|
236
|
-
ImmutableList.Builder<
|
|
233
|
+
ImmutableList.Builder<TaskReport> builder = ImmutableList.builder();
|
|
237
234
|
for (TaskState inputTaskState : inputTaskStates) {
|
|
238
|
-
builder.add(inputTaskState.
|
|
235
|
+
builder.add(inputTaskState.getTaskReport().get());
|
|
239
236
|
}
|
|
240
237
|
return builder.build();
|
|
241
238
|
}
|
|
242
239
|
|
|
243
|
-
public List<
|
|
240
|
+
public List<TaskReport> getAllOutputTaskReports()
|
|
244
241
|
{
|
|
245
|
-
ImmutableList.Builder<
|
|
242
|
+
ImmutableList.Builder<TaskReport> builder = ImmutableList.builder();
|
|
246
243
|
for (TaskState outputTaskState : outputTaskStates) {
|
|
247
|
-
builder.add(outputTaskState.
|
|
244
|
+
builder.add(outputTaskState.getTaskReport().get());
|
|
248
245
|
}
|
|
249
246
|
return builder.build();
|
|
250
247
|
}
|
|
@@ -323,7 +320,7 @@ public class BulkLoader
|
|
|
323
320
|
exec.getSessionExecConfig(),
|
|
324
321
|
inputTaskSource, outputTaskSource,
|
|
325
322
|
first(schemas), executorSchema,
|
|
326
|
-
|
|
323
|
+
getInputTaskReports(), getOutputTaskReports());
|
|
327
324
|
}
|
|
328
325
|
|
|
329
326
|
public PartialExecutionException buildPartialExecuteException(Throwable cause, ExecSession exec)
|
|
@@ -442,24 +439,24 @@ public class BulkLoader
|
|
|
442
439
|
BulkLoaderTask task = config.loadConfig(BulkLoaderTask.class);
|
|
443
440
|
ProcessPluginSet plugins = new ProcessPluginSet(task); // TODO don't create filter plugins
|
|
444
441
|
|
|
445
|
-
ImmutableList.Builder<
|
|
446
|
-
ImmutableList.Builder<
|
|
447
|
-
for (Optional<
|
|
448
|
-
if (
|
|
449
|
-
|
|
442
|
+
ImmutableList.Builder<TaskReport> successfulInputTaskReports = ImmutableList.builder();
|
|
443
|
+
ImmutableList.Builder<TaskReport> successfulOutputTaskReports = ImmutableList.builder();
|
|
444
|
+
for (Optional<TaskReport> inputTaskReport : resume.getInputTaskReports()) {
|
|
445
|
+
if (inputTaskReport.isPresent()) {
|
|
446
|
+
successfulInputTaskReports.add(inputTaskReport.get());
|
|
450
447
|
}
|
|
451
448
|
}
|
|
452
|
-
for (Optional<
|
|
453
|
-
if (
|
|
454
|
-
|
|
449
|
+
for (Optional<TaskReport> outputTaskReport : resume.getOutputTaskReports()) {
|
|
450
|
+
if (outputTaskReport.isPresent()) {
|
|
451
|
+
successfulOutputTaskReports.add(outputTaskReport.get());
|
|
455
452
|
}
|
|
456
453
|
}
|
|
457
454
|
|
|
458
455
|
plugins.getInputPlugin().cleanup(resume.getInputTaskSource(), resume.getInputSchema(),
|
|
459
|
-
resume.
|
|
456
|
+
resume.getInputTaskReports().size(), successfulInputTaskReports.build());
|
|
460
457
|
|
|
461
458
|
plugins.getOutputPlugin().cleanup(resume.getOutputTaskSource(), resume.getOutputSchema(),
|
|
462
|
-
resume.
|
|
459
|
+
resume.getOutputTaskReports().size(), successfulOutputTaskReports.build());
|
|
463
460
|
}
|
|
464
461
|
|
|
465
462
|
private ExecutorPlugin newExecutorPlugin(BulkLoaderTask task)
|
|
@@ -478,7 +475,7 @@ public class BulkLoader
|
|
|
478
475
|
final LoaderState state = new LoaderState(Exec.getLogger(BulkLoader.class), plugins);
|
|
479
476
|
try {
|
|
480
477
|
ConfigDiff inputConfigDiff = plugins.getInputPlugin().transaction(task.getInputConfig(), new InputPlugin.Control() {
|
|
481
|
-
public List<
|
|
478
|
+
public List<TaskReport> run(final TaskSource inputTask, final Schema inputSchema, final int inputTaskCount)
|
|
482
479
|
{
|
|
483
480
|
state.setInputTaskSource(inputTask);
|
|
484
481
|
Filters.transaction(plugins.getFilterPlugins(), task.getFilterConfigs(), inputSchema, new Filters.Control() {
|
|
@@ -491,7 +488,7 @@ public class BulkLoader
|
|
|
491
488
|
{
|
|
492
489
|
state.setExecutorSchema(executorSchema);
|
|
493
490
|
ConfigDiff outputConfigDiff = plugins.getOutputPlugin().transaction(task.getOutputConfig(), executorSchema, outputTaskCount, new OutputPlugin.Control() {
|
|
494
|
-
public List<
|
|
491
|
+
public List<TaskReport> run(final TaskSource outputTask)
|
|
495
492
|
{
|
|
496
493
|
state.setOutputTaskSource(outputTask);
|
|
497
494
|
|
|
@@ -501,7 +498,7 @@ public class BulkLoader
|
|
|
501
498
|
execute(task, executor, state);
|
|
502
499
|
}
|
|
503
500
|
|
|
504
|
-
return state.
|
|
501
|
+
return state.getAllOutputTaskReports();
|
|
505
502
|
}
|
|
506
503
|
});
|
|
507
504
|
state.setOutputConfigDiff(outputConfigDiff);
|
|
@@ -509,7 +506,7 @@ public class BulkLoader
|
|
|
509
506
|
});
|
|
510
507
|
}
|
|
511
508
|
});
|
|
512
|
-
return state.
|
|
509
|
+
return state.getAllInputTaskReports();
|
|
513
510
|
}
|
|
514
511
|
});
|
|
515
512
|
state.setInputConfigDiff(inputConfigDiff);
|
|
@@ -539,8 +536,8 @@ public class BulkLoader
|
|
|
539
536
|
|
|
540
537
|
final LoaderState state = new LoaderState(Exec.getLogger(BulkLoader.class), plugins);
|
|
541
538
|
try {
|
|
542
|
-
ConfigDiff inputConfigDiff = plugins.getInputPlugin().resume(resume.getInputTaskSource(), resume.getInputSchema(), resume.
|
|
543
|
-
public List<
|
|
539
|
+
ConfigDiff inputConfigDiff = plugins.getInputPlugin().resume(resume.getInputTaskSource(), resume.getInputSchema(), resume.getInputTaskReports().size(), new InputPlugin.Control() {
|
|
540
|
+
public List<TaskReport> run(final TaskSource inputTask, final Schema inputSchema, final int inputTaskCount)
|
|
544
541
|
{
|
|
545
542
|
// TODO validate inputTask?
|
|
546
543
|
// TODO validate inputSchema
|
|
@@ -556,17 +553,17 @@ public class BulkLoader
|
|
|
556
553
|
// TODO validate executorSchema
|
|
557
554
|
state.setExecutorSchema(executorSchema);
|
|
558
555
|
ConfigDiff outputConfigDiff = plugins.getOutputPlugin().resume(resume.getOutputTaskSource(), executorSchema, outputTaskCount, new OutputPlugin.Control() {
|
|
559
|
-
public List<
|
|
556
|
+
public List<TaskReport> run(final TaskSource outputTask)
|
|
560
557
|
{
|
|
561
558
|
// TODO validate outputTask?
|
|
562
559
|
state.setOutputTaskSource(outputTask);
|
|
563
560
|
|
|
564
|
-
|
|
561
|
+
restoreResumedTaskReports(resume, state);
|
|
565
562
|
if (!state.isAllTasksCommitted()) {
|
|
566
563
|
execute(task, executor, state);
|
|
567
564
|
}
|
|
568
565
|
|
|
569
|
-
return state.
|
|
566
|
+
return state.getAllOutputTaskReports();
|
|
570
567
|
}
|
|
571
568
|
});
|
|
572
569
|
state.setOutputConfigDiff(outputConfigDiff);
|
|
@@ -574,7 +571,7 @@ public class BulkLoader
|
|
|
574
571
|
});
|
|
575
572
|
}
|
|
576
573
|
});
|
|
577
|
-
return state.
|
|
574
|
+
return state.getAllInputTaskReports();
|
|
578
575
|
}
|
|
579
576
|
});
|
|
580
577
|
state.setInputConfigDiff(inputConfigDiff);
|
|
@@ -595,29 +592,29 @@ public class BulkLoader
|
|
|
595
592
|
}
|
|
596
593
|
}
|
|
597
594
|
|
|
598
|
-
private static void
|
|
595
|
+
private static void restoreResumedTaskReports(ResumeState resume, LoaderState state)
|
|
599
596
|
{
|
|
600
|
-
int inputTaskCount = resume.
|
|
601
|
-
int outputTaskCount = resume.
|
|
597
|
+
int inputTaskCount = resume.getInputTaskReports().size();
|
|
598
|
+
int outputTaskCount = resume.getOutputTaskReports().size();
|
|
602
599
|
|
|
603
600
|
state.initialize(inputTaskCount, outputTaskCount);
|
|
604
601
|
|
|
605
602
|
for (int i=0; i < inputTaskCount; i++) {
|
|
606
|
-
Optional<
|
|
603
|
+
Optional<TaskReport> report = resume.getInputTaskReports().get(i);
|
|
607
604
|
if (report.isPresent()) {
|
|
608
605
|
TaskState task = state.getInputTaskState(i);
|
|
609
606
|
task.start();
|
|
610
|
-
task.
|
|
607
|
+
task.setTaskReport(report.get());
|
|
611
608
|
task.finish();
|
|
612
609
|
}
|
|
613
610
|
}
|
|
614
611
|
|
|
615
612
|
for (int i=0; i < outputTaskCount; i++) {
|
|
616
|
-
Optional<
|
|
613
|
+
Optional<TaskReport> report = resume.getOutputTaskReports().get(i);
|
|
617
614
|
if (report.isPresent()) {
|
|
618
615
|
TaskState task = state.getOutputTaskState(i);
|
|
619
616
|
task.start();
|
|
620
|
-
task.
|
|
617
|
+
task.setTaskReport(report.get());
|
|
621
618
|
task.finish();
|
|
622
619
|
}
|
|
623
620
|
}
|
|
@@ -3,7 +3,6 @@ package org.embulk.exec;
|
|
|
3
3
|
import org.slf4j.ILoggerFactory;
|
|
4
4
|
import com.google.common.base.Preconditions;
|
|
5
5
|
import com.google.inject.Module;
|
|
6
|
-
import com.google.inject.name.Names;
|
|
7
6
|
import com.google.inject.Binder;
|
|
8
7
|
import com.google.inject.Scopes;
|
|
9
8
|
import com.fasterxml.jackson.module.guice.ObjectMapperModule;
|
|
@@ -7,20 +7,17 @@ import java.util.concurrent.ExecutionException;
|
|
|
7
7
|
import com.google.common.collect.ImmutableList;
|
|
8
8
|
import com.google.common.base.Throwables;
|
|
9
9
|
import com.google.inject.Inject;
|
|
10
|
-
import com.google.inject.Injector;
|
|
11
10
|
import com.google.inject.Binder;
|
|
12
11
|
import com.google.inject.multibindings.Multibinder;
|
|
13
12
|
import org.embulk.plugin.PluginType;
|
|
14
13
|
import org.embulk.config.Config;
|
|
15
14
|
import org.embulk.config.ConfigDefault;
|
|
16
15
|
import org.embulk.config.ConfigDiff;
|
|
17
|
-
import org.embulk.config.DataSource;
|
|
18
16
|
import org.embulk.config.Task;
|
|
19
17
|
import org.embulk.config.TaskSource;
|
|
20
18
|
import org.embulk.config.ConfigSource;
|
|
21
|
-
import org.embulk.config.
|
|
19
|
+
import org.embulk.config.TaskReport;
|
|
22
20
|
import org.embulk.spi.Schema;
|
|
23
|
-
import org.embulk.spi.Column;
|
|
24
21
|
import org.embulk.spi.Page;
|
|
25
22
|
import org.embulk.spi.Buffer;
|
|
26
23
|
import org.embulk.spi.InputPlugin;
|
|
@@ -148,7 +145,7 @@ public class GuessExecutor
|
|
|
148
145
|
ConfigDiff guessed;
|
|
149
146
|
try {
|
|
150
147
|
input.transaction(guessInputConfig, new InputPlugin.Control() {
|
|
151
|
-
public List<
|
|
148
|
+
public List<TaskReport> run(TaskSource inputTaskSource, Schema schema, int taskCount)
|
|
152
149
|
{
|
|
153
150
|
if (taskCount == 0) {
|
|
154
151
|
throw new NoSampleException("No input files to guess");
|
|
@@ -212,7 +209,7 @@ public class GuessExecutor
|
|
|
212
209
|
|
|
213
210
|
public void cleanup(TaskSource taskSource,
|
|
214
211
|
int taskCount,
|
|
215
|
-
List<
|
|
212
|
+
List<TaskReport> successTaskReports)
|
|
216
213
|
{
|
|
217
214
|
if (buffer != null) {
|
|
218
215
|
buffer.release();
|
|
@@ -257,7 +254,7 @@ public class GuessExecutor
|
|
|
257
254
|
public void abort() { }
|
|
258
255
|
|
|
259
256
|
@Override
|
|
260
|
-
public
|
|
257
|
+
public TaskReport commit()
|
|
261
258
|
{
|
|
262
259
|
return null;
|
|
263
260
|
}
|