mperham-politics 0.2.0 → 0.2.1
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/History.rdoc +6 -1
- data/README.rdoc +2 -1
- data/examples/queue_worker_example.rb +37 -0
- data/examples/token_worker_example.rb +4 -4
- data/lib/politics/static_queue_worker.rb +6 -7
- data/lib/politics/version.rb +1 -1
- data/lib/politics.rb +6 -3
- metadata +1 -1
data/History.rdoc
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
= Changelog
|
2
2
|
|
3
|
-
== 0.2.
|
3
|
+
== 0.2.1 (2008-11-04)
|
4
|
+
|
5
|
+
* Cleanup and prepare for public release for RubyConf 2008.
|
6
|
+
* Election Day. Politics. Get it? Hee hee.
|
7
|
+
|
8
|
+
== 0.2.0 (2008-10-24)
|
4
9
|
|
5
10
|
* Remove BucketWorker based on initial feedback. Add StaticQueueWorker as a more reliable replacement.
|
6
11
|
|
data/README.rdoc
CHANGED
@@ -21,7 +21,7 @@ toes? There are several answers:
|
|
21
21
|
1. Elect a leader for a short period of time. The leader is the process which performs the
|
22
22
|
actual processing. After a length of time, a new leader is elected from the group. This
|
23
23
|
is fault tolerant but not as scalable, as only one process is performing the task at a given
|
24
|
-
point in time. See the +TokenWorker+
|
24
|
+
point in time. See the +TokenWorker+ mixin.
|
25
25
|
|
26
26
|
== Dependencies
|
27
27
|
|
@@ -39,6 +39,7 @@ TokenWorker mixin
|
|
39
39
|
Name:: Mike Perham
|
40
40
|
Email:: mailto:mperham@gmail.com
|
41
41
|
Twitter:: http://twitter.com/mperham
|
42
|
+
Homepage:: http://mikeperham.com/politics/
|
42
43
|
|
43
44
|
This software is free for you to use as you'd like. If you find it useful, please consider giving
|
44
45
|
me a recommendation at {Working with Rails}[http://workingwithrails.com/person/10797-mike-perham].
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#gem 'mperham-politics'
|
2
|
+
require 'politics'
|
3
|
+
require 'politics/static_queue_worker'
|
4
|
+
|
5
|
+
# Test this example by starting memcached locally and then in two irb sessions, run this:
|
6
|
+
#
|
7
|
+
=begin
|
8
|
+
require 'queue_worker_example'
|
9
|
+
p = Politics::QueueWorkerExample.new
|
10
|
+
p.start
|
11
|
+
=end
|
12
|
+
#
|
13
|
+
# You can then watch as one of them is elected leader. You can kill the leader and verify
|
14
|
+
# the backup process is elected after approximately iteration_length seconds.
|
15
|
+
#
|
16
|
+
module Politics
|
17
|
+
class QueueWorkerExample
|
18
|
+
include Politics::StaticQueueWorker
|
19
|
+
TOTAL_BUCKETS = 20
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
register_worker 'queue-example', TOTAL_BUCKETS, :iteration_length => 60, :servers => memcached_servers
|
23
|
+
end
|
24
|
+
|
25
|
+
def start
|
26
|
+
process_bucket do |bucket|
|
27
|
+
puts "PID #{$$} processing bucket #{bucket}/#{TOTAL_BUCKETS} at #{Time.now}..."
|
28
|
+
sleep 1.5
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def memcached_servers
|
33
|
+
['127.0.0.1:11211']
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -4,15 +4,15 @@ require 'politics/token_worker'
|
|
4
4
|
|
5
5
|
# Test this example by starting memcached locally and then in two irb sessions, run this:
|
6
6
|
#
|
7
|
-
#
|
8
|
-
# You can then watch as one of them is elected leader. You can kill the leader and verify
|
9
|
-
# the backup process is elected after approximately iteration_length seconds.
|
10
|
-
#
|
11
7
|
=begin
|
12
8
|
require 'token_worker_example'
|
13
9
|
p = Politics::TokenWorkerExample.new
|
14
10
|
p.start
|
15
11
|
=end
|
12
|
+
#
|
13
|
+
# You can then watch as one of them is elected leader. You can kill the leader and verify
|
14
|
+
# the backup process is elected after approximately iteration_length seconds.
|
15
|
+
#
|
16
16
|
module Politics
|
17
17
|
class TokenWorkerExample
|
18
18
|
include Politics::TokenWorker
|
@@ -1,4 +1,3 @@
|
|
1
|
-
puts 'hello'
|
2
1
|
require 'socket'
|
3
2
|
require 'ipaddr'
|
4
3
|
require 'uri'
|
@@ -235,12 +234,12 @@ module Politics
|
|
235
234
|
handle = Net::DNS::MDNSSD.register("#{self.group_name}-#{local_ip}-#{$$}",
|
236
235
|
"_#{group_name}._tcp", 'local', @port)
|
237
236
|
|
238
|
-
['INT', 'TERM'].each { |signal|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
}
|
237
|
+
# ['INT', 'TERM'].each { |signal|
|
238
|
+
# trap(signal) do
|
239
|
+
# handle.stop
|
240
|
+
# server.stop_service
|
241
|
+
# end
|
242
|
+
# }
|
244
243
|
end
|
245
244
|
|
246
245
|
def bonjour_scan
|
data/lib/politics/version.rb
CHANGED
data/lib/politics.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'logger'
|
2
|
-
|
3
1
|
module Politics
|
4
2
|
|
5
3
|
def self.log=(value)
|
@@ -7,6 +5,11 @@ module Politics
|
|
7
5
|
end
|
8
6
|
|
9
7
|
def self.log
|
10
|
-
@log ||=
|
8
|
+
@log ||= if defined?(RAILS_DEFAULT_LOGGER)
|
9
|
+
RAILS_DEFAULT_LOGGER
|
10
|
+
else
|
11
|
+
require 'logger'
|
12
|
+
Logger.new(STDOUT)
|
13
|
+
end
|
11
14
|
end
|
12
15
|
end
|