drbqs 0.0.1 → 0.0.2
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/VERSION +1 -1
- data/drbqs.gemspec +2 -2
- data/lib/drbqs/client.rb +3 -1
- data/lib/drbqs/connection.rb +2 -2
- data/lib/drbqs/message.rb +1 -1
- data/lib/drbqs/queue.rb +32 -16
- data/lib/drbqs/server.rb +6 -2
- data/lib/drbqs/task_client.rb +3 -2
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/drbqs.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{drbqs}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Takayuki YAMAGUCHI"]
|
12
|
-
s.date = %q{2011-02-
|
12
|
+
s.date = %q{2011-02-27}
|
13
13
|
s.description = %q{Queuing system over network that is implemented by dRuby.}
|
14
14
|
s.email = %q{d@ytak.info}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/drbqs/client.rb
CHANGED
@@ -28,13 +28,15 @@ module DRbQS
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
WAIT_NEW_TASK = 1
|
32
|
+
|
31
33
|
def calculate
|
32
34
|
cn = Thread.new do
|
33
35
|
loop do
|
34
36
|
@task_client.add_new_task
|
35
37
|
@connection.respond_alive_signal
|
36
38
|
@task_client.send_result
|
37
|
-
sleep(
|
39
|
+
sleep(WAIT_NEW_TASK)
|
38
40
|
end
|
39
41
|
end
|
40
42
|
exec = Thread.new do
|
data/lib/drbqs/connection.rb
CHANGED
@@ -25,7 +25,7 @@ module DRbQS
|
|
25
25
|
begin
|
26
26
|
ary = @message.read([:initialize, nil, Symbol, nil], 0)
|
27
27
|
ary[1..-1]
|
28
|
-
rescue
|
28
|
+
rescue Rinda::RequestExpiredError
|
29
29
|
nil
|
30
30
|
end
|
31
31
|
end
|
@@ -39,7 +39,7 @@ module DRbQS
|
|
39
39
|
when :exit
|
40
40
|
Kernel.exit
|
41
41
|
end
|
42
|
-
rescue
|
42
|
+
rescue Rinda::RequestExpiredError
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
data/lib/drbqs/message.rb
CHANGED
data/lib/drbqs/queue.rb
CHANGED
@@ -28,7 +28,7 @@ module DRbQS
|
|
28
28
|
@result = result
|
29
29
|
@task_id = 0
|
30
30
|
@cache = {}
|
31
|
-
@calculating = {}
|
31
|
+
@calculating = Hash.new { |hash, key| hash[key] = Array.new }
|
32
32
|
@logger = logger
|
33
33
|
end
|
34
34
|
|
@@ -46,43 +46,63 @@ module DRbQS
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def get_accept_signal
|
49
|
+
count = 0
|
49
50
|
begin
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
51
|
+
loop do
|
52
|
+
sym, task_id, node_id = @result.take([:accept, Fixnum, Fixnum], 0)
|
53
|
+
count += 1
|
54
|
+
@calculating[node_id] << task_id
|
55
|
+
@logger.info("Accept: task #{task_id} by node #{node_id}.") if @logger
|
56
|
+
end
|
57
|
+
rescue Rinda::RequestExpiredError
|
58
|
+
@logger.debug("Accept: #{count} signals.") if @logger
|
54
59
|
end
|
60
|
+
count
|
55
61
|
end
|
56
62
|
|
57
63
|
def requeue_for_deleted_node_id(deleted)
|
58
64
|
deleted.each do |node_id|
|
59
|
-
if
|
60
|
-
queue_task(task_id)
|
61
|
-
@calculating.delete(
|
65
|
+
if task_id_ary = @calculating[node_id]
|
66
|
+
task_id_ary.each { |task_id| queue_task(task_id) }
|
67
|
+
@calculating.delete(node_id)
|
62
68
|
end
|
63
69
|
end
|
64
70
|
end
|
65
71
|
|
66
72
|
def get_result
|
73
|
+
count = 0
|
67
74
|
begin
|
68
75
|
loop do
|
76
|
+
get_accept_signal
|
69
77
|
sym, task_id, result = @result.take([:result, Fixnum, nil], 0)
|
70
|
-
|
71
|
-
@calculating.
|
78
|
+
count += 1
|
79
|
+
if ary = @calculating.find { |k, v| v.include?(task_id) }
|
80
|
+
node_id = ary[0]
|
81
|
+
@calculating[node_id].delete(task_id)
|
82
|
+
else
|
83
|
+
node_id = nil
|
84
|
+
end
|
85
|
+
@logger.info("Get: result of #{task_id} from node #{node_id}.") if @logger
|
72
86
|
task = @cache.delete(task_id)
|
73
87
|
if hook = task.hook
|
74
88
|
hook.call(self, result)
|
75
89
|
end
|
76
90
|
end
|
77
|
-
rescue
|
91
|
+
rescue Rinda::RequestExpiredError
|
92
|
+
@logger.debug("Get: #{count} results.") if @logger
|
78
93
|
end
|
94
|
+
count
|
95
|
+
end
|
96
|
+
|
97
|
+
def calculating_task_number
|
98
|
+
@calculating.inject(0) { |s, key_val| s + key_val[1].size }
|
79
99
|
end
|
80
100
|
|
81
101
|
# If queue is empty, return true. Otherwise, false.
|
82
102
|
# Even if there are calculating tasks,
|
83
103
|
# the method can return true.
|
84
104
|
def empty?
|
85
|
-
@cache.size -
|
105
|
+
@cache.size - calculating_task_number == 0
|
86
106
|
end
|
87
107
|
|
88
108
|
# If there are no tasks in queue and calculating,
|
@@ -90,10 +110,6 @@ module DRbQS
|
|
90
110
|
def finished?
|
91
111
|
@cache.size == 0
|
92
112
|
end
|
93
|
-
|
94
|
-
def calculating_task_number
|
95
|
-
@calculating.size
|
96
|
-
end
|
97
113
|
end
|
98
114
|
|
99
115
|
end
|
data/lib/drbqs/server.rb
CHANGED
@@ -87,6 +87,7 @@ module DRbQS
|
|
87
87
|
private :exec_hook
|
88
88
|
|
89
89
|
WAIT_NODE_EXIT = 3
|
90
|
+
WAIT_NEW_RESULT = 1
|
90
91
|
|
91
92
|
def exit
|
92
93
|
@message.send_exit
|
@@ -101,9 +102,12 @@ module DRbQS
|
|
101
102
|
loop do
|
102
103
|
@message.get_message
|
103
104
|
check_connection
|
104
|
-
@queue.get_result
|
105
|
+
count_results = @queue.get_result
|
105
106
|
exec_hook
|
106
|
-
|
107
|
+
@logger.info("Calculating tasks: #{@queue.calculating_task_number}") if @logger
|
108
|
+
if count_results <= 1
|
109
|
+
sleep(WAIT_NEW_RESULT)
|
110
|
+
end
|
107
111
|
end
|
108
112
|
end
|
109
113
|
end
|
data/lib/drbqs/task_client.rb
CHANGED
@@ -16,8 +16,9 @@ module DRbQS
|
|
16
16
|
task_id, obj, method_sym, args = @queue.take([Fixnum, nil, Symbol, nil], 0)
|
17
17
|
@calculating_task = task_id
|
18
18
|
@task_queue.enq([obj, method_sym, args])
|
19
|
-
@
|
20
|
-
|
19
|
+
@logger.info("Send accept signal: node #{@node_id} caluclating #{@calculating_task}") if @logger
|
20
|
+
@result.write([:accept, @calculating_task, @node_id])
|
21
|
+
rescue Rinda::RequestExpiredError
|
21
22
|
end
|
22
23
|
end
|
23
24
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: drbqs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Takayuki YAMAGUCHI
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-02-
|
13
|
+
date: 2011-02-27 00:00:00 +09:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -109,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
109
|
requirements:
|
110
110
|
- - ">="
|
111
111
|
- !ruby/object:Gem::Version
|
112
|
-
hash:
|
112
|
+
hash: 1630307079048384788
|
113
113
|
segments:
|
114
114
|
- 0
|
115
115
|
version: "0"
|