perfectqueue 0.8.12 → 0.8.13

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.
data/ChangeLog CHANGED
@@ -1,4 +1,9 @@
1
1
 
2
+ == 2012-08-10 version 0.8.13
3
+
4
+ * Force stop a processor when unknown exception occured during task heartbeat
5
+
6
+
2
7
  == 2012-08-05 version 0.8.12
3
8
 
4
9
  * Support 'process detach' feature for a replacement of binary replace
@@ -63,8 +63,13 @@ module PerfectQueue
63
63
  def child_heartbeat
64
64
  @wpipe.write HEARTBEAT_PACKET
65
65
  rescue
66
- @log.error "Parent process unexpectedly died. Exiting processor pid=#{Process.pid}: #{$!}"
67
- stop(true)
66
+ @log.error "Parent process unexpectedly died: #{$!}"
67
+ force_stop
68
+ end
69
+
70
+ # override
71
+ def force_stop
72
+ super
68
73
  Process.kill(:KILL, Process.pid)
69
74
  exit! 137
70
75
  end
@@ -27,7 +27,7 @@ module PerfectQueue
27
27
  @running_flag = BlockingFlag.new
28
28
  @finish_flag = BlockingFlag.new
29
29
 
30
- @tm = TaskMonitor.new(config, method(:child_heartbeat))
30
+ @tm = TaskMonitor.new(config, method(:child_heartbeat), method(:force_stop))
31
31
 
32
32
  restart(false, config)
33
33
  end
@@ -74,6 +74,12 @@ module PerfectQueue
74
74
  @finish_flag.set!
75
75
  end
76
76
 
77
+ def force_stop
78
+ @log.error "Force stopping processor processor_id=#{@processor_id}"
79
+ @tm.stop_task(true)
80
+ @finish_flag.set!
81
+ end
82
+
77
83
  def logrotated
78
84
  # do nothing
79
85
  end
@@ -19,10 +19,11 @@
19
19
  module PerfectQueue
20
20
 
21
21
  class TaskMonitor
22
- def initialize(config, child_heartbeat=nil)
22
+ def initialize(config, child_heartbeat=nil, force_stop=nil)
23
23
  @config = config
24
24
  @log = config[:logger]
25
25
  @child_heartbeat = child_heartbeat || Proc.new {}
26
+ @force_stop = force_stop || Proc.new {}
26
27
 
27
28
  @child_heartbeat_interval = (@config[:child_heartbeat_interval] || 2).to_i
28
29
  @task_heartbeat_interval = (@config[:task_heartbeat_interval] || 2).to_i
@@ -135,15 +136,16 @@ module PerfectQueue
135
136
  end
136
137
  }
137
138
  rescue
138
- @log.error "Unknown error #{$!.class}: #{$!}. Exiting worker pid=#{Process.pid}"
139
+ @log.error "Unknown error #{$!.class}: #{$!}"
139
140
  $!.backtrace.each {|bt| @log.warn "\t#{bt}" }
141
+ @force_stop.call
140
142
  end
141
143
 
142
144
  private
143
145
  def task_heartbeat
144
146
  @task.heartbeat! :message => @heartbeat_message
145
147
  @heartbeat_message = nil
146
- rescue TaskError
148
+ rescue
147
149
  # finished, cancel_requested, preempted, etc.
148
150
  kill_task($!)
149
151
  end
@@ -1,3 +1,3 @@
1
1
  module PerfectQueue
2
- VERSION = "0.8.12"
2
+ VERSION = "0.8.13"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: perfectqueue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.12
4
+ version: 0.8.13
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-05 00:00:00.000000000 Z
12
+ date: 2012-08-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sequel