bricolage-streamingload 0.11.0 → 0.12.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/lib/bricolage/streamingload/job.rb +24 -17
- data/lib/bricolage/streamingload/version.rb +1 -1
- data/test/streamingload/test_job.rb +4 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8c9c822c1c2d207827cc5d0b6573140254b1638
|
4
|
+
data.tar.gz: 166188b17014074c82a963aa9aecaff796ced70d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17e35b2d5d49312d92a4f9f7e232cd6ff9daeb7975d7a1383936a935d12dd22c89550e1fece87920c36cac46fea6aa5517431c7af56e741cb5fe774a21cd7825
|
7
|
+
data.tar.gz: 7556f6eb45b74d041891f3d9254aee4bf32c30d12e9aa61093351f5a08af4c7f6a04926b75a37d8cfbde4c359a50e5efc610cd6ceda605f63ca147e3d96d3285
|
@@ -86,8 +86,8 @@ module Bricolage
|
|
86
86
|
end
|
87
87
|
|
88
88
|
if @task.unknown_state?
|
89
|
-
true_status = DataConnection.open(@data_ds, @logger) {|data|
|
90
|
-
data.get_job_status(@
|
89
|
+
true_status = DataConnection.open(@data_ds, log_table: @log_table, logger: @logger) {|data|
|
90
|
+
data.get_job_status(@task.last_job_id)
|
91
91
|
}
|
92
92
|
@logger.info "fixiating unknown job status: job_id=#{@task.last_job_id}, status=(unknown->#{true_status})"
|
93
93
|
@task.fix_last_job_status true_status
|
@@ -142,11 +142,14 @@ module Bricolage
|
|
142
142
|
params = JobParams.load(@context, task.task_class, task.schema_name, task.table_name)
|
143
143
|
@data_ds = params.ds
|
144
144
|
@manifest = ManifestFile.create(ds: params.ctl_bucket, job_id: job_id, object_urls: task.object_urls, logger: @logger)
|
145
|
-
|
145
|
+
log = LoadLog.new
|
146
|
+
log.task_id = @task_id
|
147
|
+
log.job_id = job_id
|
148
|
+
DataConnection.open(params.ds, log_table: @log_table, logger: @logger) {|data|
|
146
149
|
if params.enable_work_table?
|
147
|
-
data.load_with_work_table params.work_table, @manifest, params.load_options_string, params.sql_source,
|
150
|
+
data.load_with_work_table params.work_table, @manifest, params.load_options_string, params.sql_source, log
|
148
151
|
else
|
149
|
-
data.load_objects params.dest_table, @manifest, params.load_options_string,
|
152
|
+
data.load_objects params.dest_table, @manifest, params.load_options_string, log
|
150
153
|
end
|
151
154
|
}
|
152
155
|
end
|
@@ -175,18 +178,22 @@ module Bricolage
|
|
175
178
|
end
|
176
179
|
|
177
180
|
|
181
|
+
LoadLog = Struct.new(:task_id, :job_id)
|
182
|
+
|
183
|
+
|
178
184
|
class DataConnection
|
179
185
|
|
180
186
|
include SQLUtils
|
181
187
|
|
182
|
-
def DataConnection.open(ds, logger
|
183
|
-
new(ds, logger).open(&block)
|
188
|
+
def DataConnection.open(ds, log_table:, logger: ds.logger, &block)
|
189
|
+
new(ds, log_table: log_table, logger: logger).open(&block)
|
184
190
|
end
|
185
191
|
|
186
|
-
def initialize(ds, logger
|
192
|
+
def initialize(ds, log_table:, logger: ds.logger)
|
187
193
|
@ds = ds
|
188
|
-
@
|
194
|
+
@log_table = log_table
|
189
195
|
@logger = logger
|
196
|
+
@connection = nil
|
190
197
|
end
|
191
198
|
|
192
199
|
def open(&block)
|
@@ -198,27 +205,27 @@ module Bricolage
|
|
198
205
|
raise DataConnectionFailed, "data connection failed: #{ex.message}"
|
199
206
|
end
|
200
207
|
|
201
|
-
def get_job_status(
|
202
|
-
count = @connection.query_value("select count(*) from #{log_table} where job_id = #{job_id}")
|
208
|
+
def get_job_status(job_id)
|
209
|
+
count = @connection.query_value("select count(*) from #{@log_table} where job_id = #{job_id}")
|
203
210
|
count.to_i > 0 ? 'success' : 'failure'
|
204
211
|
end
|
205
212
|
|
206
|
-
def load_with_work_table(work_table, manifest, options, sql_source,
|
213
|
+
def load_with_work_table(work_table, manifest, options, sql_source, log)
|
207
214
|
@connection.transaction {|txn|
|
208
215
|
# NOTE: This transaction ends with truncation, this DELETE does nothing
|
209
216
|
# from the second time. So don't worry about DELETE cost here.
|
210
217
|
@connection.execute("delete from #{work_table}")
|
211
218
|
execute_copy work_table, manifest, options
|
212
219
|
@connection.execute sql_source
|
213
|
-
write_load_log
|
220
|
+
write_load_log log
|
214
221
|
txn.truncate_and_commit work_table
|
215
222
|
}
|
216
223
|
end
|
217
224
|
|
218
|
-
def load_objects(dest_table, manifest, options,
|
225
|
+
def load_objects(dest_table, manifest, options, log)
|
219
226
|
@connection.transaction {|txn|
|
220
227
|
execute_copy dest_table, manifest, options
|
221
|
-
write_load_log
|
228
|
+
write_load_log log
|
222
229
|
}
|
223
230
|
end
|
224
231
|
|
@@ -236,8 +243,8 @@ module Bricolage
|
|
236
243
|
@logger.info "load succeeded: #{manifest.url}"
|
237
244
|
end
|
238
245
|
|
239
|
-
def write_load_log(
|
240
|
-
@connection.execute("insert into #{log_table} (job_id, finish_time) values (#{job_id}, current_timestamp)")
|
246
|
+
def write_load_log(log)
|
247
|
+
@connection.execute("insert into #{@log_table} (task_id, job_id, finish_time) values (#{log.task_id}, #{log.job_id}, current_timestamp)")
|
241
248
|
end
|
242
249
|
|
243
250
|
end # class DataConnection
|
@@ -30,7 +30,7 @@ module Bricolage
|
|
30
30
|
assert_equal [
|
31
31
|
"begin transaction;",
|
32
32
|
"copy testschema.desttable from '#{job.manifest.url}' credentials 'cccc' manifest statupdate false compupdate false json 'auto' gzip timeformat 'auto' dateformat 'auto' acceptanydate acceptinvchars ' ' truncatecolumns trimblanks ;",
|
33
|
-
"insert into strload_load_logs (job_id, finish_time) values (#{job.job_id}, current_timestamp)",
|
33
|
+
"insert into strload_load_logs (task_id, job_id, finish_time) values (1, #{job.job_id}, current_timestamp)",
|
34
34
|
"commit;"
|
35
35
|
], job.data_ds.sql_list
|
36
36
|
|
@@ -58,7 +58,7 @@ module Bricolage
|
|
58
58
|
"delete from testschema.with_work_table_wk",
|
59
59
|
"copy testschema.with_work_table_wk from '#{job.manifest.url}' credentials 'cccc' manifest statupdate false compupdate false json 'auto' gzip timeformat 'auto' dateformat 'auto' acceptanydate acceptinvchars ' ' truncatecolumns trimblanks ;",
|
60
60
|
"insert into testschema.with_work_table select * from testschema.with_work_table_wk;\n",
|
61
|
-
"insert into strload_load_logs (job_id, finish_time) values (#{job.job_id}, current_timestamp)",
|
61
|
+
"insert into strload_load_logs (task_id, job_id, finish_time) values (11, #{job.job_id}, current_timestamp)",
|
62
62
|
"truncate testschema.with_work_table_wk;"
|
63
63
|
], job.data_ds.sql_list
|
64
64
|
|
@@ -114,7 +114,7 @@ module Bricolage
|
|
114
114
|
assert_equal [
|
115
115
|
"begin transaction;",
|
116
116
|
"copy testschema.desttable from '#{job.manifest.url}' credentials 'cccc' manifest statupdate false compupdate false json 'auto' gzip timeformat 'auto' dateformat 'auto' acceptanydate acceptinvchars ' ' truncatecolumns trimblanks ;",
|
117
|
-
"insert into strload_load_logs (job_id, finish_time) values (#{job.job_id}, current_timestamp)",
|
117
|
+
"insert into strload_load_logs (task_id, job_id, finish_time) values (11, #{job.job_id}, current_timestamp)",
|
118
118
|
"commit;"
|
119
119
|
], job.data_ds.sql_list
|
120
120
|
|
@@ -303,7 +303,7 @@ module Bricolage
|
|
303
303
|
assert_equal [
|
304
304
|
"begin transaction;",
|
305
305
|
"copy testschema.desttable from '#{job.manifest.url}' credentials 'cccc' manifest statupdate false compupdate false json 'auto' gzip timeformat 'auto' dateformat 'auto' acceptanydate acceptinvchars ' ' truncatecolumns trimblanks ;",
|
306
|
-
"insert into strload_load_logs (job_id, finish_time) values (#{job.job_id}, current_timestamp)",
|
306
|
+
"insert into strload_load_logs (task_id, job_id, finish_time) values (11, #{job.job_id}, current_timestamp)",
|
307
307
|
"commit;"
|
308
308
|
], job.data_ds.sql_list
|
309
309
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bricolage-streamingload
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Minero Aoki
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-12-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bricolage
|
@@ -155,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
155
|
version: '0'
|
156
156
|
requirements: []
|
157
157
|
rubyforge_project:
|
158
|
-
rubygems_version: 2.
|
158
|
+
rubygems_version: 2.6.11
|
159
159
|
signing_key:
|
160
160
|
specification_version: 4
|
161
161
|
summary: Bricolage Streaming Load Daemon
|