Skip to content

Commit a13f086

Browse files
committed
fix some leaks and add an error handling block
1 parent c81edbc commit a13f086

File tree

6 files changed

+27
-8
lines changed

6 files changed

+27
-8
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 0.1.3
2+
3+
- Fix several memory leaks.
4+
- Add a proper error handler block.
5+
16
## 0.1.2
27

38
- Fix bug with setting `at` like "**:35".

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ r = Redis.new
2020
Zhong.schedule(redis: r) do |s|
2121
s.category "stuff" do
2222
s.every(5.seconds, "foo") { puts "foo" }
23+
s.every(1.minute, "biz", at: ["**:26", "**:27"]) { puts "biz" }
2324
s.every(1.week, "baz", at: ["mon 22:45", "wed 23:13"]) { puts "baz" }
25+
s.every(10.seconds, "boom") { raise "fail" }
2426
end
2527

2628
s.category "clutter" do
@@ -39,8 +41,11 @@ Zhong.schedule(redis: r) do |s|
3941
puts "dong"
4042
true
4143
end
42-
end
4344

45+
s.error_handler do |e, job|
46+
puts "damn, #{job} messed up: #{e}"
47+
end
48+
end
4449
```
4550

4651
## TODO

bin/setup

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,3 @@ set -euo pipefail
33
IFS=$'\n\t'
44

55
bundle install
6-
7-
# Do any other automated setup that you need to do here

lib/zhong/job.rb

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def run?(time = Time.now)
3131
run_every?(time) && run_at?(time) && run_if?(time)
3232
end
3333

34-
def run(time = Time.now)
34+
def run(time = Time.now, error_handler = nil)
3535
return unless run?(time)
3636

3737
if running?
@@ -58,7 +58,18 @@ def run(time = Time.now)
5858

5959
@logger.info "running: #{self}"
6060

61-
@thread = Thread.new { @block.call } if @block
61+
if @block
62+
@thread = Thread.new do
63+
begin
64+
@block.call
65+
rescue => boom
66+
@logger.error "#{self} failed: #{boom}"
67+
error_handler.call(boom, self) if error_handler
68+
end
69+
70+
nil # do not retain thread return value
71+
end
72+
end
6273

6374
ran!(time)
6475
end

lib/zhong/scheduler.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def error_handler(&block)
3939
end
4040

4141
def on(event, &block)
42-
fail "Unsupported callback #{event}" unless [:before_tick, :after_tick, :before_run, :after_run].include?(event.to_sym)
42+
fail "unknown callback #{event}" unless [:before_tick, :after_tick, :before_run, :after_run].include?(event.to_sym)
4343
(@callbacks[event.to_sym] ||= []) << block
4444
end
4545

@@ -56,7 +56,7 @@ def start
5656

5757
jobs.each do |_, job|
5858
if fire_callbacks(:before_run, job, now)
59-
job.run(now)
59+
job.run(now, error_handler)
6060
fire_callbacks(:after_run, job, now)
6161
end
6262
end

lib/zhong/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module Zhong
2-
VERSION = "0.1.2"
2+
VERSION = "0.1.3"
33
end

0 commit comments

Comments
 (0)