bluth 0.6.1 → 0.6.7

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/CHANGES.txt CHANGED
@@ -1,5 +1,31 @@
1
1
  BLUTH, CHANGES
2
2
 
3
+ #### 0.6.7 (2011-01-08) ###############################
4
+
5
+ * FIXED: -f option now works for stop-workers and stop-scheduler commands
6
+ * ADDED: Bluth.onconnect (resolves non-default redis connection issues)
7
+
8
+
9
+ #### 0.6.6 (2011-01-02) ###############################
10
+
11
+ CHANGE: Bluth::Worker.onstart
12
+
13
+ #### 0.6.5 (2011-01-02) ###############################
14
+
15
+ * FIXED: The previous change required a different approach for the scheduler.
16
+
17
+ #### 0.6.4 (2011-01-02) ###############################
18
+
19
+ * CHANGE: Don't save the worker until after onstart is called (b/c config info can be passed)
20
+
21
+ #### 0.6.3 (2011-01-02) ###############################
22
+
23
+ * CHANGE: Added :bluth prefix to Worker and Scheduler keys.
24
+ * CHANGE: Depends on Familia 0.6.5
25
+ * CHANGE: Option -r for bin/bluth is now -R
26
+ * CHANGE: Bluth.poptimeout -> Bluth.queuetimeout
27
+
28
+
3
29
  #### 0.6.1 (2010-12-31) ###############################
4
30
 
5
31
  * ADDED: Bluth.env
data/Rakefile CHANGED
@@ -20,12 +20,12 @@ begin
20
20
  gem.version = "#{config[:MAJOR]}.#{config[:MINOR]}.#{config[:PATCH]}"
21
21
  gem.name = name
22
22
  gem.rubyforge_project = gem.name
23
- gem.summary = "A Redis queuing system built on top of Familia"
23
+ gem.summary = "A Redis queuing system built on top of Familia (w/ daemons!)"
24
24
  gem.description = "A Redis queuing system built on top of Familia"
25
25
  gem.email = "delano@solutious.com"
26
26
  gem.homepage = "http://github.com/delano/bluth"
27
27
  gem.authors = ["Delano Mandelbaum"]
28
- gem.add_dependency("familia", "= 0.6.3")
28
+ gem.add_dependency("familia", ">= 0.6.5")
29
29
  gem.add_dependency('sysinfo', '>= 0.7.3')
30
30
  gem.add_dependency('annoy')
31
31
 
@@ -39,7 +39,7 @@ end
39
39
 
40
40
 
41
41
  Rake::RDocTask.new do |rdoc|
42
- version = "#{config[:MAJOR]}.#{config[:MINOR]}.#{config[:PATCH]}.#{config[:BUILD]}"
42
+ version = "#{config[:MAJOR]}.#{config[:MINOR]}.#{config[:PATCH]}"
43
43
  rdoc.rdoc_dir = "doc"
44
44
  rdoc.title = "#{name} #{version}"
45
45
  rdoc.rdoc_files.include("README*")
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :MAJOR: 0
3
3
  :MINOR: 6
4
- :PATCH: 1
4
+ :PATCH: 7
data/bin/bluth CHANGED
@@ -42,10 +42,10 @@ class Bluth::CLI::Definition
42
42
  @verbose ||= 0
43
43
  @verbose += 1
44
44
  end
45
- global :I, String, "Add a load path" do |v|
45
+ global :I, :include, String, "Add a load path" do |v|
46
46
  $LOAD_PATH << v
47
47
  end
48
- global :r, String, "Require a library" do |v|
48
+ global :R, :require, String, "Require a library" do |v|
49
49
  $LOAD_PATH << 'lib' if File.exists? 'lib'
50
50
  begin
51
51
  require v
@@ -63,7 +63,7 @@ class Bluth::CLI::Definition
63
63
  obj.global.environment ||= 'dev'
64
64
  Bluth.env = obj.global.environment
65
65
  end
66
-
66
+
67
67
  #TODO: command :enqueue
68
68
 
69
69
  command :start_worker => Bluth::CLI
data/bluth.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bluth}
8
- s.version = "0.6.1"
8
+ s.version = "0.6.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Delano Mandelbaum"]
12
- s.date = %q{2010-12-31}
12
+ s.date = %q{2011-01-08}
13
13
  s.default_executable = %q{bluth}
14
14
  s.description = %q{A Redis queuing system built on top of Familia}
15
15
  s.email = %q{delano@solutious.com}
@@ -28,7 +28,6 @@ Gem::Specification.new do |s|
28
28
  "bluth.gemspec",
29
29
  "lib/bluth.rb",
30
30
  "lib/bluth/cli.rb",
31
- "lib/bluth/gob.rb",
32
31
  "lib/bluth/test_helpers.rb",
33
32
  "lib/bluth/worker.rb",
34
33
  "lib/daemonizing.rb",
@@ -43,23 +42,23 @@ Gem::Specification.new do |s|
43
42
  s.require_paths = ["lib"]
44
43
  s.rubyforge_project = %q{bluth}
45
44
  s.rubygems_version = %q{1.3.7}
46
- s.summary = %q{A Redis queuing system built on top of Familia}
45
+ s.summary = %q{A Redis queuing system built on top of Familia (w/ daemons!)}
47
46
 
48
47
  if s.respond_to? :specification_version then
49
48
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
50
49
  s.specification_version = 3
51
50
 
52
51
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
- s.add_runtime_dependency(%q<familia>, ["= 0.6.3"])
52
+ s.add_runtime_dependency(%q<familia>, [">= 0.6.5"])
54
53
  s.add_runtime_dependency(%q<sysinfo>, [">= 0.7.3"])
55
54
  s.add_runtime_dependency(%q<annoy>, [">= 0"])
56
55
  else
57
- s.add_dependency(%q<familia>, ["= 0.6.3"])
56
+ s.add_dependency(%q<familia>, [">= 0.6.5"])
58
57
  s.add_dependency(%q<sysinfo>, [">= 0.7.3"])
59
58
  s.add_dependency(%q<annoy>, [">= 0"])
60
59
  end
61
60
  else
62
- s.add_dependency(%q<familia>, ["= 0.6.3"])
61
+ s.add_dependency(%q<familia>, [">= 0.6.5"])
63
62
  s.add_dependency(%q<sysinfo>, [">= 0.7.3"])
64
63
  s.add_dependency(%q<annoy>, [">= 0"])
65
64
  end
data/lib/bluth.rb CHANGED
@@ -35,7 +35,7 @@ module Bluth
35
35
  class Shutdown < Familia::Problem; end
36
36
  @db = 0
37
37
  @env = :dev
38
- @poptimeout = 60 #.seconds
38
+ @queuetimeout = 60 #.seconds
39
39
  @handlers = []
40
40
  @locks = []
41
41
  @sysinfo = nil
@@ -43,11 +43,29 @@ module Bluth
43
43
  @scheduler = nil
44
44
  class << self
45
45
  attr_reader :handlers, :db, :conf, :locks
46
- attr_accessor :redis, :uri, :priority, :scheduler, :poptimeout, :env
46
+ attr_accessor :redis, :uri, :priority, :scheduler, :queuetimeout, :env
47
47
  def sysinfo
48
48
  @sysinfo ||= SysInfo.new.freeze
49
49
  @sysinfo
50
50
  end
51
+ # A block to be called before a worker starts.
52
+ #
53
+ # e.g.
54
+ # Bluth.onconnect do
55
+ # config = YourProject.load_config
56
+ # Familia.uri = config[:redis_uri]
57
+ # end
58
+ #
59
+ # Note:
60
+ # this block can be called multiple times so do not
61
+ # put anything with side effects in here.
62
+ def onconnect &blk
63
+ @onconnect = blk unless blk.nil?
64
+ @onconnect
65
+ end
66
+ def connect
67
+ instance_eval &onconnect unless onconnect.nil?
68
+ end
51
69
  end
52
70
 
53
71
  def Bluth.clear_locks
@@ -98,7 +116,7 @@ module Bluth
98
116
  end
99
117
 
100
118
  # Workers use a blocking pop and will wait for up to
101
- # Bluth.poptimeout (seconds) before returnning nil.
119
+ # Bluth.queuetimeout (seconds) before returnning nil.
102
120
  # Note that the queues are still processed in order.
103
121
  # If all queues are empty, the first one to return a
104
122
  # value is use. See:
@@ -119,7 +137,7 @@ module Bluth
119
137
  gob = nil
120
138
  begin
121
139
  order = Bluth::Queue.entry_queues.collect(&:rediskey)
122
- order << Bluth.poptimeout # We do it this way to support Ruby 1.8
140
+ order << Bluth.queuetimeout # We do it this way to support Ruby 1.8
123
141
  queue, gobid = *(Bluth::Queue.redis.send(meth, *order) || [])
124
142
  unless queue.nil?
125
143
  Familia.ld "FOUND #{gobid} id #{queue}"
data/lib/bluth/cli.rb CHANGED
@@ -33,12 +33,13 @@ module Bluth
33
33
  worker.daemonize
34
34
  worker.run
35
35
  else
36
- Bluth.poptimeout = 3.seconds
36
+ Bluth.queuetimeout = 3.seconds
37
37
  worker_class.run
38
38
  end
39
39
  end
40
40
 
41
41
  def stop_workers worker_class=Bluth::Worker
42
+ Bluth.connect
42
43
  worker_class.instances.each do |worker|
43
44
  kill_worker worker, worker_class
44
45
  end
@@ -46,6 +47,7 @@ module Bluth
46
47
 
47
48
  def stop_worker wid=nil,worker_class=Bluth::Worker
48
49
  wids = wid ? [wid] : @argv
50
+ Bluth.connect
49
51
  wids.each do |wid|
50
52
  worker = worker_class.from_redis wid
51
53
  kill_worker worker, worker_class
@@ -64,7 +66,7 @@ module Bluth
64
66
  exit 1
65
67
  else
66
68
  Familia.info "Killing #{worker.rediskey}"
67
- worker.kill @global.auto
69
+ worker.kill @option.force
68
70
  end
69
71
  end
70
72
 
data/lib/bluth/worker.rb CHANGED
@@ -27,8 +27,8 @@ module Bluth
27
27
 
28
28
  def init(h=nil, u=nil, w=nil)
29
29
  @host, @user, @wid, = h || Bluth.sysinfo.hostname, u || Bluth.sysinfo.user, w
30
- @pid_file ||= "/tmp/#{self.class.prefix}-#{wid}.pid"
31
- @log_file ||= "/tmp/#{self.class.prefix}-#{wid}.log"
30
+ @pid_file ||= "/tmp/#{name}.pid"
31
+ @log_file ||= "/tmp/#{name}.log"
32
32
  @success ||= 0
33
33
  @failure ||= 0
34
34
  @problem ||= 0
@@ -41,7 +41,7 @@ module Bluth
41
41
 
42
42
  # Used by daemonize as the process name (linux only)
43
43
  def name
44
- "bluth-#{self.class.prefix}-#{wid}"
44
+ [self.class.prefix, wid].flatten.join '-'
45
45
  end
46
46
 
47
47
  #def rediskey(suffix=nil)
@@ -121,7 +121,7 @@ module Bluth
121
121
  include Familia
122
122
  include Logging
123
123
  include Daemonizable
124
- prefix :worker
124
+ prefix [:bluth, :worker]
125
125
  index [:host, :user, :wid]
126
126
  field :host
127
127
  field :user
@@ -145,6 +145,7 @@ module Bluth
145
145
 
146
146
  def run!
147
147
  begin
148
+ Bluth.connect
148
149
  self.class.runblock :onstart
149
150
  find_gob
150
151
  rescue => ex
@@ -163,11 +164,12 @@ module Bluth
163
164
  def run
164
165
  begin
165
166
  @process_id = $$
166
- save
167
- self.class.runblock :onstart
168
167
  scheduler = Rufus::Scheduler.start_new
169
- Familia.info "Setting interval: #{Worker.interval} sec (poptimeout: #{Bluth.poptimeout})"
168
+ Bluth.connect
169
+ self.class.runblock :onstart
170
+ Familia.info "Setting interval: #{Worker.interval} sec (queuetimeout: #{Bluth.queuetimeout})"
170
171
  Familia.reconnect_all! # Need to reconnect after daemonize
172
+ save
171
173
  scheduler.every Worker.interval, :blocking => true do |task|
172
174
  Familia.ld "#{$$} TICK @ #{Time.now.utc}"
173
175
  sleep rand
@@ -184,7 +186,7 @@ module Bluth
184
186
  rescue Interrupt => ex
185
187
  puts <<-EOS.gsub(/(?:^|\n)\s*/, "\n")
186
188
  Exiting...
187
- (You may need to wait up to #{Bluth.poptimeout} seconds
189
+ (You may need to wait up to #{Bluth.queuetimeout} seconds
188
190
  for this worker to exit cleanly.)
189
191
  EOS
190
192
  # We reconnect to the queue in case we're currently
@@ -252,8 +254,6 @@ module Bluth
252
254
  end
253
255
  end
254
256
 
255
- # TODO: Refactor somehow. When this is subclassed
256
- # (eg BS::SchduleWorker) the self.object is not created.
257
257
  class ScheduleWorker < Storable
258
258
  include WorkerBase
259
259
  include Familia
@@ -275,7 +275,7 @@ module Bluth
275
275
  @every
276
276
  end
277
277
  end
278
- prefix :scheduler
278
+ prefix [:bluth, :scheduler]
279
279
  index [:host, :user, :wid]
280
280
  field :host
281
281
  field :user
@@ -291,13 +291,16 @@ module Bluth
291
291
 
292
292
  def run
293
293
  begin
294
- raise Familia::Problem, "Only 1 scheduler at a time" if !ScheduleWorker.instances.empty?
295
294
  EM.run {
296
295
  @process_id = $$
297
296
  srand(Bluth.salt.to_i(16) ** @process_id)
298
- ScheduleWorker.schedule = Rufus::Scheduler::EmScheduler.start_new
299
- save # persist and make note the scheduler is running
297
+ Bluth.connect
298
+ Familia.info "Setting interval: #{Worker.interval} sec (queuetimeout: #{Bluth.queuetimeout})"
299
+ Familia.reconnect_all! # Need to reconnect after daemonize
300
+ raise Familia::Problem, "Only 1 scheduler at a time" if !ScheduleWorker.instances.empty?
300
301
  self.class.runblock :onstart
302
+ save # persist and make note the scheduler is running
303
+ ScheduleWorker.schedule = Rufus::Scheduler::EmScheduler.start_new
301
304
  self.class.every.each do |args|
302
305
  interval, opts, blk = *args
303
306
  Familia.ld " scheduling every #{interval}: #{opts}"
data/try/16_worker_try.rb CHANGED
@@ -9,7 +9,7 @@ require 'bluth/test_helpers'
9
9
 
10
10
  ## Worker has a redis key
11
11
  @worker.rediskey
12
- #=> 'worker:host:user:wid:object'
12
+ #=> 'bluth:worker:host:user:wid:object'
13
13
 
14
14
  ## Worker counts success
15
15
  @worker.success!
data/try/19_bluth_try.rb CHANGED
@@ -12,8 +12,8 @@ ExampleHandler.enqueue :item => :val3
12
12
  Bluth::Queue.critical.size
13
13
  #=> 3
14
14
 
15
- ## Can set poptimeout
16
- Bluth.poptimeout = 2
15
+ ## Can set queuetimeout
16
+ Bluth.queuetimeout = 2
17
17
  #=> 2
18
18
 
19
19
  ## Bluth.shift returns first value
@@ -31,7 +31,7 @@ Bluth.poptimeout = 2
31
31
  @job3.data['item']
32
32
  #=> 'val2'
33
33
 
34
- ## Bluth.pop returns nil after waiting for poptimeout
34
+ ## Bluth.pop returns nil after waiting for queuetimeout
35
35
  Bluth.pop
36
36
  #=> nil
37
37
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bluth
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 9
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 1
10
- version: 0.6.1
9
+ - 7
10
+ version: 0.6.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Delano Mandelbaum
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-31 00:00:00 -05:00
18
+ date: 2011-01-08 00:00:00 -05:00
19
19
  default_executable: bluth
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -24,14 +24,14 @@ dependencies:
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - "="
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
- hash: 1
29
+ hash: 13
30
30
  segments:
31
31
  - 0
32
32
  - 6
33
- - 3
34
- version: 0.6.3
33
+ - 5
34
+ version: 0.6.5
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
37
  - !ruby/object:Gem::Dependency
@@ -83,7 +83,6 @@ files:
83
83
  - bluth.gemspec
84
84
  - lib/bluth.rb
85
85
  - lib/bluth/cli.rb
86
- - lib/bluth/gob.rb
87
86
  - lib/bluth/test_helpers.rb
88
87
  - lib/bluth/worker.rb
89
88
  - lib/daemonizing.rb
@@ -125,6 +124,6 @@ rubyforge_project: bluth
125
124
  rubygems_version: 1.3.7
126
125
  signing_key:
127
126
  specification_version: 3
128
- summary: A Redis queuing system built on top of Familia
127
+ summary: A Redis queuing system built on top of Familia (w/ daemons!)
129
128
  test_files: []
130
129
 
data/lib/bluth/gob.rb DELETED
@@ -1 +0,0 @@
1
-