rbbt-util 5.23.5 → 5.23.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8fb980bbf88e61f1087f0fd28c27cb3057bd891c
4
- data.tar.gz: ac0c6c3e802ebdf902301b8289b866252eaa1f35
3
+ metadata.gz: 6c71bcff349d90d7b342c381f84bc4958cc5f733
4
+ data.tar.gz: a78929b585bb9a6187e6b45bd31e825ba2000907
5
5
  SHA512:
6
- metadata.gz: 6742777bd0aefb41ede80c70d76b1dab223fb443e12a7e492e99a02472e8dcafd9e37c012bda15c260ccd77b6b7c19990b28d2afd9edb4acf23d68bcf9b9197c
7
- data.tar.gz: 7463782b74d10ec37222a8f9771a8cdf8a094987c96b803a8e8e122365da7bcd17f5cd3d0cca5bccc545b448eb83fa234f4172a5bf3e6fe63d560ec11bdfc0be
6
+ metadata.gz: 236bd1122fd5ac49d4bba5fb86eb5cf48123292703509bb7deaf323930f8550a19a30a3dd7db2e4cfa2f72b93191bab211548d5569722b3d0299a05703221538
7
+ data.tar.gz: 21623006af00e24c2912b3ed5d7f2dd41144bc59cd0ae5b0cd5941e805ecdc05584cec9399b294768c5e81aaf628e35676c464097d9884bb608207dba4dcc611
data/lib/rbbt/persist.rb CHANGED
@@ -209,14 +209,17 @@ module Persist
209
209
  rescue Exception
210
210
  Log.medium "Persist stream thread exception: #{ Log.color :blue, path }"
211
211
  file.abort if file.respond_to? :abort
212
- parent.raise $!
212
+ #parent.raise $!
213
213
  raise $!
214
214
  rescue Exception
215
215
  Log.exception $!
216
216
  raise $!
217
217
  end
218
218
  end
219
- ConcurrentStream.setup(out, :threads => saver_thread, :filename => path)
219
+
220
+ threads = [saver_thread]
221
+ threads += stream.threads if stream.respond_to?(:threads) && stream.threads
222
+ ConcurrentStream.setup(out, :threads => threads, :filename => path)
220
223
 
221
224
  out.callback = callback
222
225
  out.abort_callback = abort_callback
@@ -225,6 +228,7 @@ module Persist
225
228
  stream.callback = callback
226
229
  stream.abort_callback = abort_callback
227
230
 
231
+
228
232
  out
229
233
  end
230
234
 
@@ -349,7 +349,6 @@ module TSV
349
349
  end
350
350
 
351
351
  q.join
352
- q.clean
353
352
  nil
354
353
  end
355
354
 
@@ -375,8 +374,8 @@ module TSV
375
374
 
376
375
  rescue Interrupt, Aborted
377
376
  error = true
378
- q.abort
379
377
  Log.low{"Aborted traversal in CPUs for #{stream_name(obj) || Misc.fingerprint(obj)}: #{$!.backtrace*","}"}
378
+ q.abort
380
379
  stream = obj_stream(obj)
381
380
  stream.abort if stream.respond_to? :abort
382
381
  stream = obj_stream(options[:into])
@@ -384,15 +383,14 @@ module TSV
384
383
  raise "Traversal aborted"
385
384
  rescue Exception
386
385
  error = true
386
+ Log.low{"Exception during traversal in CPUs for #{stream_name(obj) || Misc.fingerprint(obj)}: #{$!.message}"}
387
387
  q.abort
388
- Log.low "Exception during traversal in CPUs for #{stream_name(obj) || Misc.fingerprint(obj)}: #{$!.message}"
389
388
  stream = obj_stream(obj)
390
389
  stream.abort if stream.respond_to? :abort
391
390
  stream = obj_stream(options[:into])
392
391
  stream.abort if stream.respond_to? :abort
393
392
  raise $!
394
393
  ensure
395
- q.clean
396
394
  if bar
397
395
  Log::ProgressBar.remove_bar(bar, error)
398
396
  end
@@ -509,13 +507,13 @@ module TSV
509
507
  def self.traverse_stream(obj, threads = nil, cpus = nil, options = {}, &block)
510
508
  into = options[:into]
511
509
 
512
- thread = Thread.new(Thread.current) do |parent|
510
+ thread = Thread.new do
513
511
  begin
514
512
  traverse_run(obj, threads, cpus, options, &block)
515
513
  into.close if into.respond_to?(:close) and not (into.respond_to? :closed? and into.closed?)
516
514
  rescue Exception
517
515
  abort_stream obj
518
- parent.raise $!
516
+ abort_stream into
519
517
  raise $!
520
518
  end
521
519
  end
@@ -30,49 +30,17 @@ class RbbtProcessQueue
30
30
 
31
31
  @callback_queue = RbbtProcessSocket.new
32
32
 
33
- @callback_thread = Thread.new(Thread.current) do |parent|
34
- begin
35
- loop do
36
- p = @callback_queue.pop unless @callback_queue.cleaned
37
-
38
- if Exception === p or (Array === p and Exception === p.first)
39
- e = Array === p ? p.first : p
40
- Log.warn "Callback recieved exception from worker: #{e.message}" unless Aborted === e or ClosedStream === e
41
- raise e
42
- end
43
-
44
- if @callback.arity == 0
45
- @callback.call
46
- else
47
- @callback.call p
48
- end
49
- end
50
- rescue ClosedStream
51
- rescue Aborted
52
- Log.warn "Callback thread aborted"
53
- self._abort
54
- raise $!
55
- rescue Exception
56
- Log.warn "Exception captured in callback: #{$!.message}"
57
- self._abort
58
- raise $!
59
- ensure
60
-
61
- @callback_queue.sread.close unless @callback_queue.sread.closed?
62
- end
63
- end
64
33
  else
65
34
  @callback, @callback_queue, @callback_thread = nil, nil, nil
66
35
  end
67
36
  end
68
37
 
69
- def init(&block)
70
- @init_block = block
71
-
38
+ def init_master
72
39
  RbbtSemaphore.wait_semaphore(@sem)
73
40
  @master_pid = Process.fork do
74
41
  @close_up = false
75
42
  processes_initiated = false
43
+ processes = []
76
44
  process_mutex = Mutex.new
77
45
 
78
46
  Signal.trap(CLOSE_SIGNAL) do
@@ -103,24 +71,22 @@ class RbbtProcessQueue
103
71
  end
104
72
 
105
73
  Signal.trap(ABORT_SIGNAL) do
106
- Misc.insist([0,0.01,0.1,0.2,0.5]) do
107
- @monitor_thread.raise Aborted if @monitor_thread && @monitor_thread.alive?
108
- end
74
+ @abort_monitor = true
75
+ @monitor_thread.raise Aborted if @monitor_thread && @monitor_thread.alive?
109
76
  end
110
77
 
111
78
  if @callback_queue
112
- Misc.purge_pipes(@queue.swrite, @queue.sread, @callback_queue.swrite, @callback_queue.sread)
79
+ Misc.purge_pipes(@queue.swrite, @queue.sread, @callback_queue.swrite)
113
80
  else
114
81
  Misc.purge_pipes(@queue.swrite, @queue.sread)
115
82
  end
116
83
 
117
84
  @total = 0
118
85
  @count = 0
119
- processes = []
120
86
 
121
87
  @manager_thread = Thread.new do
122
- begin
123
88
  while true
89
+ break if processes_initiated && processes.empty? && (@monitor_thread && ! @monitor_thread.alive?)
124
90
  begin
125
91
  Thread.current["working"] = true
126
92
  if @close_up
@@ -171,14 +137,10 @@ class RbbtProcessQueue
171
137
  Log.low "Aborting manager thread #{Process.pid}"
172
138
  raise Aborted
173
139
  rescue Exception
174
- Log.exception $!
175
140
  raise Exception
176
141
  end
177
142
  end
178
- rescue Exception
179
- Log.exception $!
180
- raise $!
181
- end
143
+ Log.low "Manager thred stopped #{Process.pid}"
182
144
  end
183
145
 
184
146
  @callback_queue.close_read if @callback_queue
@@ -195,43 +157,84 @@ class RbbtProcessQueue
195
157
  @monitor_thread = Thread.new do
196
158
  begin
197
159
  while processes.any?
198
- processes[0].join
160
+ raise Aborted if @abort_monitor
161
+ processes[0].join
162
+ Log.debug "Joined process #{processes[0].pid} of queue #{Process.pid}"
199
163
  processes.shift
200
164
  end
165
+ Log.low "All processes completed #{Process.pid}"
201
166
  rescue Aborted
202
- Log.warn "Aborting process monitor"
203
- processes.each{|p| p.abort_and_join}
167
+ Log.low "Aborting process monitor #{Process.pid}"
168
+ processes.each{|p| p.abort_and_join}
169
+ Log.low "Processes aborted #{Process.pid}"
204
170
  processes.clear
205
171
 
206
- @callback_thread.kill if @callback_thread && @callback_thread.alive?
207
- @manager_thread.kill if @manager_thread.alive?
172
+ @manager_thread.raise Aborted if @manager_thread.alive?
173
+ raise Aborted, "Aborted monitor thread"
208
174
  rescue Exception
209
- Log.warn "Process monitor exception: #{$!.message}"
175
+ Log.low "Process monitor exception [#{Process.pid}]: #{$!.message}"
210
176
  processes.each{|p| p.abort_and_join}
177
+ Log.low "Processes aborted #{Process.pid}"
211
178
  processes.clear
212
179
 
213
- @callback_thread.kill if @callback_thread && @callback_thread.alive?
214
- @manager_thread.kill if @manager_thread.alive?
180
+ @manager_thread.raise $! if @manager_thread.alive?
181
+ raise Aborted, "Aborted monitor thread with exception"
215
182
  end
216
183
  end
217
184
 
218
185
  RbbtSemaphore.post_semaphore(@sem)
219
186
 
220
187
  begin
221
-
222
- while @monitor_thread.alive?
223
- @monitor_thread.join(1)
224
- end
188
+ @monitor_thread.join
189
+ @manager_thread.raise TryAgain if @manager_thread.alive?
190
+ @manager_thread.join
191
+ @callback_queue.push ClosedStream.new if @callback_queue
225
192
  rescue Exception
226
- Log.exception $!
193
+ Kernel.exit -1
227
194
  end
228
195
 
229
- Kernel.exit! 0
196
+ Kernel.exit 0
230
197
  end
231
198
 
232
- Log.info "Cpu process (#{num_processes}) started with master: #{@master_pid}"
233
-
234
199
  @queue.close_read
200
+ Log.info "Cpu process (#{num_processes}) started with master: #{@master_pid}"
201
+ end
202
+
203
+ def init(&block)
204
+ @init_block = block
205
+
206
+ init_master
207
+
208
+ RbbtSemaphore.synchronize(@sem) do
209
+ @callback_thread = Thread.new do
210
+ begin
211
+ loop do
212
+ p = @callback_queue.pop unless @callback_queue.cleaned
213
+
214
+ if Exception === p or (Array === p and Exception === p.first)
215
+ e = Array === p ? p.first : p
216
+ Log.low "Callback recieved exception from worker: #{e.message}" unless Aborted === e or ClosedStream === e
217
+ raise e
218
+ end
219
+
220
+ if @callback.arity == 0
221
+ @callback.call
222
+ else
223
+ @callback.call p
224
+ end
225
+ end
226
+ rescue ClosedStream
227
+ Log.low "Callback thread closing"
228
+ rescue Aborted
229
+ Log.low "Callback thread aborted"
230
+ raise $!
231
+ rescue Exception
232
+ Log.low "Exception captured in callback: #{$!.message}"
233
+ raise $!
234
+ end
235
+ end if @callback_queue
236
+ end
237
+
235
238
  end
236
239
 
237
240
  def add_process
@@ -242,78 +245,84 @@ class RbbtProcessQueue
242
245
  Process.kill :USR2, @master_pid
243
246
  end
244
247
 
245
- def close_callback
246
- return unless @callback_thread.alive?
247
- begin
248
- t = Thread.new do
249
- @callback_queue.push ClosedStream.new
250
- end
251
- rescue Exception
252
- Log.warn "Error closing callback: #{$!.message}"
253
- end
254
- @callback_thread.join if @callback_thread && @callback_thread.alive?
255
- t.join if t && t.alive?
256
- end
257
-
258
248
  def _join
259
- error = true
249
+ error = :redo
260
250
  begin
261
- pid, status = Process.waitpid2 @master_pid
262
- error = false if status.success?
263
- raise ProcessFailed if error
264
- rescue Errno::ECHILD
265
- rescue Aborted
266
- Log.error "Aborted joining queue"
267
- raise $!
251
+ pid, @status = Process.waitpid2 @master_pid unless @status
252
+ error = true unless @status.success?
253
+ raise ProcessFailed.new @master_pid unless @status.success?
254
+ @callback_thread.join
255
+ error = false
256
+ rescue Aborted, Interrupt
257
+ Log.exception $!
258
+ self.abort
259
+ error = true
260
+ Log.high "Process queue #{@master_pid} aborted"
261
+ retry
262
+ rescue Errno::ESRCH, Errno::ECHILD
263
+ retry if Misc.pid_exists? @master_pid
264
+ error = ! @status.success?
265
+ rescue ProcessFailed
268
266
  rescue Exception
269
- Log.error "Exception joining queue: #{$!.message}"
270
- raise $!
267
+ Log.exception $!
268
+ retry
271
269
  ensure
272
- close_callback if @callback
273
- @callback_thread.join if @callback_thread
274
- if @join
275
- if @join.arity == 1
276
- @join.call(error)
277
- else
278
- @join.call
270
+ begin
271
+ begin
272
+ self.abort
273
+ ensure
274
+ _join
275
+ end if error == :redo
276
+
277
+ begin
278
+ @callback_thread.join
279
+ rescue Exception
280
+ end
281
+
282
+ Log.high "Joining #{"(error) " if error}#{@master_pid} #{@join}"
283
+ begin
284
+ if @join
285
+ if @join.arity == 1
286
+ @join.call(error)
287
+ else
288
+ @join.call
289
+ end
290
+ end
279
291
  end
292
+ ensure
293
+ self.clean
280
294
  end
281
295
  end
282
-
283
296
  end
284
297
 
285
- def join
298
+ def close_up_queue
286
299
  begin
287
300
  RbbtSemaphore.synchronize(@sem) do
288
301
  Process.kill CLOSE_SIGNAL, @master_pid
289
302
  end
290
303
  rescue Errno::ECHILD, Errno::ESRCH
291
- Log.debug "Cannot kill #{@master_pid}: #{$!.message}"
292
- end
304
+ Log.debug "Cannot kill (CLOSE) #{@master_pid}: #{$!.message}"
305
+ end if Misc.pid_exists? @master_pid
306
+ end
293
307
 
294
- begin
295
- _join
296
- ensure
297
- close_callback if @callback
298
- @queue.swrite.close unless @queue.swrite.closed?
299
- end
300
- #@callback_thread.join if @callback_thread
301
- self.clean
308
+ def join
309
+ close_up_queue
310
+
311
+ _join
302
312
  end
303
313
 
304
314
  def _abort
305
315
  begin
306
316
  Process.kill ABORT_SIGNAL, @master_pid
307
- pid, status = Process.waitpid2 @master_pid
308
317
  rescue Errno::ECHILD, Errno::ESRCH
309
- Log.warn "Cannot kill #{@master_pid}: #{$!.message}"
318
+ Log.debug "Cannot abort #{@master_pid}: #{$!.message}"
310
319
  end
311
320
  end
312
321
 
313
322
  def abort
314
323
  _abort
315
324
  (@callback_thread.raise(Aborted.new); @callback_thread.join) if @callback_thread and @callback_thread.alive?
316
- raise Aborted.new
325
+ @aborted = true
317
326
  end
318
327
 
319
328
  def clean
@@ -323,7 +332,8 @@ class RbbtProcessQueue
323
332
 
324
333
  ensure
325
334
  @queue.clean if @queue
326
- @callback_queue.clean if @callback_queue
335
+ #@callback_thread.push ClosedStream if @callback_thread && @callback_thread.alive?
336
+ @callback_queue.clean if @queue
327
337
  end
328
338
  end
329
339
 
@@ -21,7 +21,7 @@ class RbbtProcessQueue
21
21
  @cleaned = true
22
22
  @sread.close unless @sread.closed?
23
23
  @swrite.close unless @swrite.closed?
24
- Log.debug "Destroying socket semaphores: #{[@key] * ", "}"
24
+ Log.low "Destroying socket semaphores: #{[@key] * ", "}"
25
25
  RbbtSemaphore.delete_semaphore(@write_sem)
26
26
  RbbtSemaphore.delete_semaphore(@read_sem)
27
27
  end
@@ -30,7 +30,6 @@ class RbbtProcessQueue
30
30
  @abort = false
31
31
  Signal.trap(20){
32
32
  @abort = true
33
- raise Aborted
34
33
  }
35
34
 
36
35
  loop do
@@ -64,8 +63,10 @@ class RbbtProcessQueue
64
63
  retry unless @stop
65
64
  Log.high "Worker #{Process.pid} leaving"
66
65
  rescue Exception
67
- Log.exception $!
68
- @callback_queue.push($!) if @callback_queue
66
+ begin
67
+ @callback_queue.push($!) if @callback_queue
68
+ rescue
69
+ end
69
70
  Kernel.exit! -1
70
71
  ensure
71
72
  @callback_queue.close_write if @callback_queue
@@ -119,6 +120,35 @@ class RbbtProcessQueue
119
120
  sleep 0.1
120
121
  end
121
122
 
123
+ @current = nil
124
+ Signal.trap(:INT){
125
+ begin
126
+ Process.kill :INT, @current if @current
127
+ rescue Errno::ESRCH, Errno::ECHILD
128
+ end
129
+ }
130
+
131
+ Signal.trap(:USR1){
132
+ begin
133
+ Process.kill :USR1, @current if @current
134
+ rescue Errno::ESRCH, Errno::ECHILD
135
+ end
136
+ }
137
+
138
+ Signal.trap(:USR2){
139
+ begin
140
+ Process.kill :USR2, @current if @current
141
+ rescue Errno::ESRCH, Errno::ECHILD
142
+ end
143
+ }
144
+
145
+ Signal.trap(20){
146
+ begin
147
+ Process.kill 20, @current if @current
148
+ rescue Errno::ESRCH, Errno::ECHILD
149
+ end
150
+ }
151
+
122
152
  @current = Process.fork do
123
153
  run
124
154
  end
@@ -135,12 +165,11 @@ class RbbtProcessQueue
135
165
  Log.high "Worker #{Process.pid} respawning from #{@prev} to #{@current}"
136
166
  end
137
167
  rescue Aborted, Interrupt
138
- Log.warn "Worker #{Process.pid} aborted. Current #{@current} #{Misc.pid_exists?(@current) ? "exists" : "does not exist"}"
168
+ Log.high "Worker #{Process.pid} aborted. Current #{@current} #{Misc.pid_exists?(@current) ? "exists" : "does not exist"}"
139
169
  Process.kill "INT", @current if Misc.pid_exists? @current
140
170
  @callback_queue.close_write if @callback_queue
141
171
  Kernel.exit! 0
142
172
  rescue Exception
143
- Log.exception $!
144
173
  raise $!
145
174
  ensure
146
175
  @monitor_thread.kill if @monitor_thread
@@ -185,10 +214,10 @@ class RbbtProcessQueue
185
214
  return unless Misc.pid_exists? @pid
186
215
  begin
187
216
  pid, status = Process.waitpid2 @pid
188
- raise ProcessFailed if not status.success?
217
+ raise ProcessFailed.new @pid if not status.success?
189
218
  rescue Aborted
190
219
  self.abort
191
- raise $!
220
+ raise Aborted
192
221
  rescue Errno::ESRCH, Errno::ECHILD
193
222
  Log.exception $!
194
223
  rescue ProcessFailed
@@ -204,37 +233,39 @@ class RbbtProcessQueue
204
233
  begin
205
234
  Process.kill 20, @pid
206
235
  rescue Errno::ESRCH, Errno::ECHILD
207
- rescue Exception
208
- Log.exception $!
209
236
  end
210
237
  end
211
238
 
212
239
  def abort_and_join
213
- begin
214
- Process.kill 20, @pid
215
- rescue Errno::ESRCH, Errno::ECHILD
216
- Log.low "Already joined worker #{@pid}"
217
- return
218
- end
240
+ self.abort
219
241
 
242
+ begin
220
243
  Misc.insist([0,0.05,0.5,1,2]) do
221
244
  begin
222
245
  pid, status = Process.waitpid2 @pid, Process::WNOHANG
223
- raise if status.nil?
224
246
  Log.low "Abort and join of #{@pid}"
225
247
  return
248
+ rescue Aborted
249
+ abort
250
+ raise
251
+ rescue ProcessFailed
252
+ Log.low "Abort and join of #{@pid} (ProcessFailed)"
253
+ return
226
254
  rescue Errno::ESRCH, Errno::ECHILD
227
255
  Log.low "Already joined worker #{@pid}"
228
256
  return
229
257
  end
230
258
  end
231
-
259
+ rescue Aborted
260
+ retry
261
+ end
232
262
 
233
263
  begin
234
264
  Log.low "Forcing abort of #{@pid}"
235
265
  Process.kill 9, @pid
236
266
  pid, status = Process.waitpid2 @pid
237
267
  rescue Errno::ESRCH, Errno::ECHILD
268
+ Log.low "Force killed worker #{@pid}"
238
269
  end
239
270
  end
240
271
 
data/lib/rbbt/util/log.rb CHANGED
@@ -238,7 +238,7 @@ module Log
238
238
  def self.exception(e)
239
239
  stack = caller
240
240
  error([e.class.to_s, e.message].compact * ": " )
241
- error("BACKTRACE: " << Log.last_caller(stack) << "\n" + color_stack(e.backtrace)*"\n")
241
+ error("BACKTRACE [#{Process.pid}]: " << Log.last_caller(stack) << "\n" + color_stack(e.backtrace)*"\n")
242
242
  end
243
243
 
244
244
  def self.deprecated(m)
@@ -265,7 +265,7 @@ module Log
265
265
  def self.stack(stack)
266
266
  LOG_MUTEX.synchronize do
267
267
 
268
- STDERR.puts Log.color :magenta, "Stack trace: " << Log.last_caller(caller)
268
+ STDERR.puts Log.color :magenta, "Stack trace [#{Process.pid}]: " << Log.last_caller(caller)
269
269
  color_stack(stack).each do |line|
270
270
  STDERR.puts line
271
271
  end
@@ -37,29 +37,24 @@ module Log
37
37
  return if ENV["RBBT_NO_PROGRESS"] == "true"
38
38
  @ticks += step
39
39
 
40
- begin
41
- time = Time.now
42
- if @last_time.nil?
43
- @last_time = time
44
- @last_count = @ticks
45
- @start = time
46
- return
47
- end
40
+ time = Time.now
41
+ if @last_time.nil?
42
+ @last_time = time
43
+ @last_count = @ticks
44
+ @start = time
45
+ return
46
+ end
48
47
 
49
- diff = time - @last_time
50
- report and return if diff > @frequency
51
- return unless max and max > 0
48
+ diff = time - @last_time
49
+ report and return if diff > @frequency
50
+ return unless max and max > 0
52
51
 
53
- percent = self.percent
54
- if @last_percent.nil?
55
- @last_percent = percent
56
- return
57
- end
58
- report and return if percent > @last_percent and diff > 0.3
59
- rescue Exception
60
- Log.warn "Exception during report: " << $!.message
61
- Log.exception $!
52
+ percent = self.percent
53
+ if @last_percent.nil?
54
+ @last_percent = percent
55
+ return
62
56
  end
57
+ report and return if percent > @last_percent and diff > 0.3
63
58
  end
64
59
 
65
60
  def pos(pos)
@@ -110,10 +110,9 @@ module ConcurrentStream
110
110
  if @callback and not joined?
111
111
  begin
112
112
  @callback.call
113
- rescue Exception
114
- Log.exception $!
113
+ ensure
114
+ @callback = nil
115
115
  end
116
- @callback = nil
117
116
  end
118
117
  end
119
118
 
@@ -135,7 +134,7 @@ module ConcurrentStream
135
134
 
136
135
  @threads.each do |t|
137
136
  next if t == Thread.current
138
- Log.low "Aborting thread #{t.inspect} with exception: #{exception}"
137
+ Log.debug "Aborting thread #{t.inspect} with exception: #{exception}"
139
138
  t.raise((exception.nil? ? Aborted.new : exception))
140
139
  end
141
140
 
@@ -150,7 +149,7 @@ module ConcurrentStream
150
149
  t.join unless t == Thread.current
151
150
  rescue Aborted
152
151
  rescue Exception
153
- Log.warn "Thread exception: #{$!.message}"
152
+ Log.debug "Thread exception: #{$!.message}"
154
153
  end
155
154
  end
156
155
  end
@@ -155,6 +155,8 @@ def self.add_libdir(dir=nil)
155
155
  rescue StopInsist
156
156
  raise $!.exception
157
157
  rescue Aborted, Interrupt
158
+ Log.exception $!
159
+ Log.stack caller
158
160
  if msg
159
161
  Log.warn("Not Insisting after Aborted: #{$!.message} -- #{msg}")
160
162
  else
@@ -170,6 +172,10 @@ def self.add_libdir(dir=nil)
170
172
  Log.warn("Insisting after exception: #{$!.class} #{$!.message}")
171
173
  end
172
174
 
175
+ Log.stack caller
176
+ Log.exception $!
177
+
178
+
173
179
  if sleep and try > 0
174
180
  sleep sleep
175
181
  sleep = sleep_array.shift || sleep if sleep_array
@@ -3,7 +3,14 @@ class ParameterException < RbbtException; end
3
3
  class FieldNotFoundError < RbbtException;end
4
4
  class ClosedStream < RbbtException; end
5
5
 
6
- class ProcessFailed < StandardError; end
6
+ class ProcessFailed < StandardError;
7
+ def initialize(pid = Process.pid)
8
+ @pid = pid
9
+ @msg = "Process #{@pid} failed"
10
+ super(@msg)
11
+ end
12
+
13
+ end
7
14
 
8
15
  class Aborted < StandardError; end
9
16
 
@@ -209,7 +209,7 @@ module Misc
209
209
  Log.medium "Tee aborting #{Misc.fingerprint stream}"
210
210
  raise $!
211
211
  rescue Exception
212
- stream.abort if stream.respond_to? :abort
212
+ stream.abort($!) if stream.respond_to? :abort
213
213
  out_pipes.each do |sout|
214
214
  sout.abort if sout.respond_to? :abort
215
215
  end
@@ -394,7 +394,7 @@ begin
394
394
 
395
395
  if options.delete(:printpath)
396
396
  job.join
397
- raise job.messages.last if job.error?
397
+ raise job.messages.last if job.error? or job.aborted?
398
398
  if Open.remote? job.path
399
399
  puts job.url + Log.color(:blue, "?_format=raw")
400
400
  else
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.23.5
4
+ version: 5.23.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-06 00:00:00.000000000 Z
11
+ date: 2018-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake