drbqs 0.0.9 → 0.0.10

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 CHANGED
@@ -1 +1 @@
1
- 0.0.9
1
+ 0.0.10
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.9"
8
+ s.version = "0.0.10"
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-03-22}
12
+ s.date = %q{2011-03-25}
13
13
  s.description = %q{Task queuing system over network that is implemented by dRuby.}
14
14
  s.email = %q{d@ytak.info}
15
15
  s.executables = ["drbqs-manage", "drbqs-node", "drbqs-server"]
@@ -46,6 +46,7 @@ Gem::Specification.new do |s|
46
46
  "lib/drbqs/client.rb",
47
47
  "lib/drbqs/config.rb",
48
48
  "lib/drbqs/connection.rb",
49
+ "lib/drbqs/history.rb",
49
50
  "lib/drbqs/manage.rb",
50
51
  "lib/drbqs/message.rb",
51
52
  "lib/drbqs/node_list.rb",
@@ -65,10 +66,12 @@ Gem::Specification.new do |s|
65
66
  "spec/connection_spec.rb",
66
67
  "spec/data/acl.txt",
67
68
  "spec/filename_spec.rb",
69
+ "spec/history_spec.rb",
68
70
  "spec/manage_spec.rb",
69
71
  "spec/message_spec.rb",
70
72
  "spec/node_list_spec.rb",
71
73
  "spec/queue_spec.rb",
74
+ "spec/server_check_alive_spec.rb",
72
75
  "spec/server_define_spec.rb",
73
76
  "spec/server_hook_spec.rb",
74
77
  "spec/server_spec.rb",
@@ -92,10 +95,12 @@ Gem::Specification.new do |s|
92
95
  "spec/config_spec.rb",
93
96
  "spec/connection_spec.rb",
94
97
  "spec/filename_spec.rb",
98
+ "spec/history_spec.rb",
95
99
  "spec/manage_spec.rb",
96
100
  "spec/message_spec.rb",
97
101
  "spec/node_list_spec.rb",
98
102
  "spec/queue_spec.rb",
103
+ "spec/server_check_alive_spec.rb",
99
104
  "spec/server_define_spec.rb",
100
105
  "spec/server_hook_spec.rb",
101
106
  "spec/server_spec.rb",
data/lib/drbqs/client.rb CHANGED
@@ -6,6 +6,8 @@ module DRbQS
6
6
  class Client
7
7
 
8
8
  WAIT_NEW_TASK = 1
9
+ PRIORITY_RESPOND = 10
10
+ PRIORITY_CALCULATE = 0
9
11
  OUTPUT_NOT_SEND_RESULT = 'not_send_result'
10
12
 
11
13
  # :continue
@@ -70,15 +72,29 @@ module DRbQS
70
72
  end
71
73
  private :process_exit
72
74
 
73
- def calculate(opts = {})
74
- cn = Thread.new do
75
+ def communicate_with_server
76
+ @task_client.add_new_task
77
+ if @connection.respond_signal == :exit
78
+ return nil
79
+ end
80
+ @task_client.send_result
81
+ return true
82
+ end
83
+ private :communicate_with_server
84
+
85
+ def calculate_task
86
+ marshal_obj, method_sym, args = @task_client.dequeue_task
87
+ @task_client.queue_result(execute_task(marshal_obj, method_sym, args))
88
+ end
89
+ private :calculate_task
90
+
91
+ def thread_communicate
92
+ Thread.new do
75
93
  begin
76
94
  loop do
77
- @task_client.add_new_task
78
- if @connection.respond_alive_signal == :exit
95
+ unless communicate_with_server
79
96
  break
80
97
  end
81
- @task_client.send_result
82
98
  sleep(WAIT_NEW_TASK)
83
99
  end
84
100
  rescue => err
@@ -87,17 +103,28 @@ module DRbQS
87
103
  process_exit
88
104
  end
89
105
  end
90
- exec = Thread.new do
106
+ end
107
+ private :thread_communicate
108
+
109
+ def thread_calculate
110
+ Thread.new do
91
111
  begin
92
112
  loop do
93
- marshal_obj, method_sym, args = @task_client.dequeue_task
94
- @task_client.queue_result(execute_task(marshal_obj, method_sym, args))
113
+ calculate_task
95
114
  end
96
115
  rescue => err
97
116
  output_error(err)
98
117
  process_exit
99
118
  end
100
119
  end
120
+ end
121
+ private :thread_calculate
122
+
123
+ def calculate(opts = {})
124
+ cn = thread_communicate
125
+ exec = thread_calculate
126
+ cn.priority = PRIORITY_RESPOND
127
+ exec.priority = PRIORITY_CALCULATE
101
128
  cn.join
102
129
  end
103
130
  end
@@ -12,13 +12,13 @@ module DRbQS
12
12
 
13
13
  def create_id_string
14
14
  t = Time.now
15
- sprintf("%d%d%d:#{Socket.gethostname}", t.to_i, t.usec, rand(1000))
15
+ sprintf("#{Socket.gethostname}:%d", Process.pid)
16
16
  end
17
17
  private :create_id_string
18
18
 
19
19
  def get_id
20
20
  unless @id_number
21
- @message.write([:connect, @id_string])
21
+ @message.write([:server, :connect, @id_string])
22
22
  @id_number = @message.take([@id_string, Fixnum])[1]
23
23
  @logger.info("Get node id: #{@id_number}") if @logger
24
24
  end
@@ -34,15 +34,15 @@ module DRbQS
34
34
  end
35
35
  end
36
36
 
37
- def respond_alive_signal
37
+ def respond_signal
38
38
  begin
39
39
  node_id, sym = @message.take([@id_number, Symbol], 0)
40
+ @logger.info("Get signal: #{sym.inspect}") if @logger
40
41
  case sym
41
42
  when :alive_p
42
- @message.write([:alive, @id_number])
43
+ @message.write([:server, :alive, @id_number])
43
44
  @logger.info("Send alive signal of node id #{@id_number}") if @logger
44
45
  when :exit
45
- @logger.info("Get exit signal") if @logger
46
46
  return :exit
47
47
  end
48
48
  rescue Rinda::RequestExpiredError
@@ -0,0 +1,34 @@
1
+ module DRbQS
2
+ module HistoryUtils
3
+ def time_to_string(t)
4
+ t.strftime("%Y-%m-%d %H:%M:%S")
5
+ end
6
+ module_function :time_to_string
7
+ end
8
+
9
+ class History
10
+ def initialize
11
+ @data = Hash.new { |h, k| h[k] = Array.new }
12
+ end
13
+
14
+ def set(id, *args)
15
+ @data[id] << [Time.now] + args
16
+ end
17
+
18
+ def size
19
+ @data.size
20
+ end
21
+
22
+ def events(id)
23
+ @data[id]
24
+ end
25
+
26
+ def number_of_events(id)
27
+ @data[id].size
28
+ end
29
+
30
+ def each(&block)
31
+ @data.each(&block)
32
+ end
33
+ end
34
+ end
data/lib/drbqs/manage.rb CHANGED
@@ -15,11 +15,11 @@ module DRbQS
15
15
  private :get_hostname
16
16
 
17
17
  def send_exit_signal
18
- @message.write([:exit_server, get_hostname])
18
+ @message.write([:server, :exit_server, get_hostname])
19
19
  end
20
20
 
21
21
  def get_status
22
- @message.write([:request_status, get_hostname])
22
+ @message.write([:server, :request_status, get_hostname])
23
23
  i = 0
24
24
  loop do
25
25
  begin
data/lib/drbqs/message.rb CHANGED
@@ -2,6 +2,8 @@ require 'drbqs/node_list'
2
2
 
3
3
  module DRbQS
4
4
  class MessageServer
5
+ include HistoryUtils
6
+
5
7
  def initialize(message, logger = nil)
6
8
  @message = message
7
9
  @node_list = NodeList.new
@@ -10,8 +12,8 @@ module DRbQS
10
12
 
11
13
  def get_message
12
14
  begin
13
- mes = @message.take([Symbol, nil], 0)
14
- manage_message(*mes)
15
+ mes = @message.take([:server, Symbol, nil], 0)
16
+ manage_message(*mes[1..2])
15
17
  rescue Rinda::RequestExpiredError
16
18
  nil
17
19
  end
@@ -40,7 +42,7 @@ module DRbQS
40
42
 
41
43
  def check_connection
42
44
  deleted = @node_list.delete_not_alive
43
- @logger.info("IDs of deleted nodes") { deleted } if @logger
45
+ @logger.info("IDs of deleted nodes") { deleted } if deleted.size > 0 && @logger
44
46
  @node_list.each do |id, str|
45
47
  @message.write([id, :alive_p])
46
48
  end
@@ -54,20 +56,19 @@ module DRbQS
54
56
  end
55
57
  end
56
58
 
57
- def time_to_string(t)
58
- t.strftime("%Y-%m-%d %H:%M:%S")
59
- end
60
- private :time_to_string
61
-
62
59
  def send_status(calculating_task_id)
63
60
  s = ''
64
- @node_list.history.each do |node_id, hist|
65
- s << sprintf("%4d %s\t", node_id, hist[0])
66
- if hist.size == 3
67
- s << "disconnected: (#{time_to_string(hist[1])} - #{time_to_string(hist[1])})\n"
61
+ @node_list.history.each do |node_id, events|
62
+ if events.size == 0 || events.size > 2
63
+ raise "Invalid history of nodes: #{events.inspect}"
64
+ end
65
+ connect = events[0]
66
+ s << sprintf("%4d %s\t", node_id, connect[2])
67
+ if disconnect = events[1]
68
+ s << "disconnected: (#{time_to_string(connect[0])} - #{time_to_string(disconnect[0])})\n"
68
69
  else
69
70
  task_ids = calculating_task_id[node_id]
70
- s << "task: #{task_ids.map { |num| num.to_s }.join(', ')} (#{time_to_string(hist[1])})\n"
71
+ s << "task: #{task_ids.map { |num| num.to_s }.join(', ')} (#{time_to_string(connect[0])})\n"
71
72
  end
72
73
  end
73
74
  begin
@@ -1,24 +1,6 @@
1
- module DRbQS
2
- class NodeHistory
3
- def initialize
4
- @data = {}
5
- end
6
-
7
- def add(id, id_str)
8
- @data[id] = [id_str, Time.now]
9
- end
10
-
11
- def disconnect(id)
12
- if @data[id]
13
- @data[id] << Time.now
14
- end
15
- end
16
-
17
- def each(&block)
18
- @data.each(&block)
19
- end
20
- end
1
+ require 'drbqs/history'
21
2
 
3
+ module DRbQS
22
4
  class NodeList
23
5
  attr_reader :history
24
6
 
@@ -26,13 +8,13 @@ module DRbQS
26
8
  @id = 0
27
9
  @list = {}
28
10
  @check = []
29
- @history = NodeHistory.new
11
+ @history = History.new
30
12
  end
31
13
 
32
14
  def get_new_id(id_str)
33
15
  @id += 1
34
16
  @list[@id] = id_str
35
- @history.add(@id, id_str)
17
+ @history.set(@id, :connect, @list[@id])
36
18
  @id
37
19
  end
38
20
 
@@ -47,7 +29,7 @@ module DRbQS
47
29
  def delete_not_alive
48
30
  @check.each do |id|
49
31
  @list.delete(id)
50
- @history.disconnect(id)
32
+ @history.set(id, :disconnect)
51
33
  end
52
34
  deleted = @check
53
35
  @check = []
data/lib/drbqs/queue.rb CHANGED
@@ -1,7 +1,11 @@
1
+ require 'drbqs/history'
2
+
1
3
  module DRbQS
2
4
 
3
5
  class QueueServer
4
- attr_reader :calculating
6
+ include HistoryUtils
7
+
8
+ attr_reader :calculating, :history
5
9
 
6
10
  def initialize(queue, result, logger = nil)
7
11
  @queue = queue
@@ -9,6 +13,7 @@ module DRbQS
9
13
  @task_id = 0
10
14
  @cache = {}
11
15
  @calculating = Hash.new { |hash, key| hash[key] = Array.new }
16
+ @history = DRbQS::History.new
12
17
  @logger = logger
13
18
  end
14
19
 
@@ -24,6 +29,7 @@ module DRbQS
24
29
  @logger.info("New task: #{@task_id}") if @logger
25
30
  @cache[@task_id] = task
26
31
  queue_task(@task_id)
32
+ @history.set(@task_id, :add)
27
33
  @task_id
28
34
  end
29
35
 
@@ -34,6 +40,7 @@ module DRbQS
34
40
  sym, task_id, node_id = @result.take([:accept, Fixnum, Fixnum], 0)
35
41
  count += 1
36
42
  @calculating[node_id] << task_id
43
+ @history.set(task_id, :calculate, node_id)
37
44
  @logger.info("Accept: task #{task_id} by node #{node_id}.") if @logger
38
45
  end
39
46
  rescue Rinda::RequestExpiredError
@@ -47,6 +54,7 @@ module DRbQS
47
54
  if task_id_ary = @calculating[node_id]
48
55
  task_id_ary.each do |task_id|
49
56
  queue_task(task_id)
57
+ @history.set(task_id, :requeue)
50
58
  @logger.info("Requeue: task #{task_id}.") if @logger
51
59
  end
52
60
  @calculating.delete(node_id)
@@ -54,24 +62,39 @@ module DRbQS
54
62
  end
55
63
  end
56
64
 
65
+ def delete_task_id(node_id, task_id)
66
+ unless @calculating[node_id].delete(task_id)
67
+ @logger.error("Task #{task_id} does not exist in list of calculating tasks.") if @logger
68
+ end
69
+ if ary = @calculating.find { |k, v| v.include?(task_id) }
70
+ @logger.error("Node #{ary[0]} is calculating task #{task_id}, too.") if @logger
71
+ end
72
+ end
73
+ private :delete_task_id
74
+
75
+ def exec_task_hook(task_id, result)
76
+ if task = @cache.delete(task_id)
77
+ if hook = task.hook
78
+ @history.set(task_id, :hook)
79
+ hook.call(self, result)
80
+ end
81
+ else
82
+ @logger.error("Task #{task_id} is not cached.") if @logger
83
+ end
84
+ end
85
+ private :exec_task_hook
86
+
57
87
  def get_result
58
88
  count = 0
59
89
  begin
60
90
  loop do
61
91
  get_accept_signal
62
- sym, task_id, result = @result.take([:result, Fixnum, nil], 0)
92
+ sym, task_id, node_id, result = @result.take([:result, Fixnum, Fixnum, nil], 0)
63
93
  count += 1
64
- if ary = @calculating.find { |k, v| v.include?(task_id) }
65
- node_id = ary[0]
66
- @calculating[node_id].delete(task_id)
67
- else
68
- node_id = nil
69
- end
94
+ @history.set(task_id, :result, node_id)
70
95
  @logger.info("Get: result of #{task_id} from node #{node_id}.") if @logger
71
- task = @cache.delete(task_id)
72
- if hook = task.hook
73
- hook.call(self, result)
74
- end
96
+ delete_task_id(node_id, task_id)
97
+ exec_task_hook(task_id, result)
75
98
  end
76
99
  rescue Rinda::RequestExpiredError
77
100
  @logger.debug("Get: #{count} results.") if @logger
@@ -95,6 +118,22 @@ module DRbQS
95
118
  def finished?
96
119
  @cache.size == 0
97
120
  end
121
+
122
+ def all_logs
123
+ s = ''
124
+ @history.each do |task_id, events|
125
+ s << "Task #{task_id}\n"
126
+ events.each do |ev|
127
+ case ev[1]
128
+ when :add, :requeue, :hook
129
+ s << " #{time_to_string(ev[0])}\t#{ev[1]}\n"
130
+ when :calculate, :result
131
+ s << " #{time_to_string(ev[0])}\t#{ev[1]} (node #{ev[2]})\n"
132
+ end
133
+ end
134
+ end
135
+ s
136
+ end
98
137
  end
99
138
 
100
139
  end
data/lib/drbqs/server.rb CHANGED
@@ -9,6 +9,9 @@ module DRbQS
9
9
 
10
10
  def initialize(interval)
11
11
  @interval = interval || DEFAULT_INTERVAL_TIME
12
+ if !(Numeric === @interval) || @interval < 0
13
+ raise ArgumentError, "Invalid interval time."
14
+ end
12
15
  @last = Time.now
13
16
  end
14
17
 
@@ -93,7 +96,7 @@ module DRbQS
93
96
 
94
97
  def check_connection(force = nil)
95
98
  if force || @check_alive.significant_interval?
96
- @logger.debug("Check connection") if @logger
99
+ @logger.info("Check connections.") if @logger
97
100
  deleted_node_ids = @message.check_connection
98
101
  @queue.requeue_for_deleted_node_id(deleted_node_ids)
99
102
  @check_alive.set_checking
@@ -154,6 +157,7 @@ module DRbQS
154
157
  sleep(WAIT_TIME_NODE_EXIT)
155
158
  check_connection(true)
156
159
  end
160
+ @logger.info("History of tasks") { "\n" + @queue.all_logs } if @logger
157
161
  Kernel.exit
158
162
  end
159
163
 
@@ -168,11 +172,13 @@ module DRbQS
168
172
  end
169
173
 
170
174
  def check_message
171
- case @message.get_message
172
- when :exit_server
173
- self.exit
174
- when :request_status
175
- @message.send_status(@queue.calculating)
175
+ while mes = @message.get_message
176
+ case mes
177
+ when :exit_server
178
+ self.exit
179
+ when :request_status
180
+ @message.send_status(@queue.calculating)
181
+ end
176
182
  end
177
183
  end
178
184
  private :check_message
@@ -196,6 +202,27 @@ module DRbQS
196
202
  end
197
203
  end
198
204
 
205
+ def test_exec(opts = {})
206
+ task_generator_init
207
+ dummy_client = DRbQS::Client.new(nil, :log_file => $stdout, :log_level => opts[:log_level])
208
+ dummy_task_client = DRbQS::TaskClient.new(nil, @ts[:queue], nil)
209
+ num = 0
210
+ loop do
211
+ num += 1
212
+ exec_hook
213
+ if ary = dummy_task_client.get_task
214
+ task_id, marshal_obj, method_sym, args = ary
215
+ result = dummy_client.instance_eval { execute_task(marshal_obj, method_sym, args) }
216
+ @queue.instance_eval do
217
+ exec_task_hook(task_id, result)
218
+ end
219
+ end
220
+ if opts[:limit] && num > opts[:limit]
221
+ break
222
+ end
223
+ end
224
+ end
225
+
199
226
  def test_task_generator(opts = {})
200
227
  task_generator_init
201
228
  @task_generator.each_with_index do |t, i|
@@ -63,6 +63,8 @@ HELP
63
63
  when :task
64
64
  puts "*** Test of Task Generators ***"
65
65
  server.test_task_generator(:limit => arg[0] ? arg[0].to_i : nil, :progress => true)
66
+ when :exec
67
+ server.test_exec(:limit => arg[0] ? arg[0].to_i : nil)
66
68
  else
67
69
  puts "*** Not be yet implemented ***"
68
70
  end
@@ -12,6 +12,10 @@ module DRbQS
12
12
  @logger = logger
13
13
  end
14
14
 
15
+ def calculating?
16
+ !!@calculating_task
17
+ end
18
+
15
19
  def task_empty?
16
20
  @task_queue.empty?
17
21
  end
@@ -34,14 +38,21 @@ module DRbQS
34
38
  @task_queue.deq
35
39
  end
36
40
 
41
+ def get_task
42
+ begin
43
+ @queue.take([Fixnum, nil, Symbol, nil], 0)
44
+ rescue Rinda::RequestExpiredError
45
+ nil
46
+ end
47
+ end
48
+
37
49
  def add_new_task
38
50
  unless @calculating_task
39
- begin
40
- task_id, obj, method_sym, args = @queue.take([Fixnum, nil, Symbol, nil], 0)
51
+ if ary = get_task
52
+ task_id, obj, method_sym, args = ary
41
53
  queue_task(task_id, [obj, method_sym, args])
42
54
  @logger.info("Send accept signal: node #{@node_id} caluclating #{@calculating_task}") if @logger
43
55
  @result.write([:accept, @calculating_task, @node_id])
44
- rescue Rinda::RequestExpiredError
45
56
  end
46
57
  end
47
58
  end
@@ -50,7 +61,7 @@ module DRbQS
50
61
  if !result_empty?
51
62
  result = dequeue_result
52
63
  @logger.info("Send result: #{@calculating_task}") { result.inspect } if @logger
53
- @result.write([:result, @calculating_task, result])
64
+ @result.write([:result, @calculating_task, @node_id, result])
54
65
  @calculating_task = nil
55
66
  end
56
67
  end
@@ -13,7 +13,7 @@ describe DRbQS::ConnectionClient do
13
13
 
14
14
  it "should get node ID." do
15
15
  @connection.get_id.should == @node_id
16
- @message.take([:connect, nil]).should be_true
16
+ @message.take([:server, :connect, nil], 0).should be_true
17
17
  end
18
18
 
19
19
  it "should get no initialization method." do
@@ -28,12 +28,12 @@ describe DRbQS::ConnectionClient do
28
28
 
29
29
  it "should respond :alive_p signal" do
30
30
  @message.write([@node_id, :alive_p])
31
- @connection.respond_alive_signal
32
- @message.take([:alive, nil]).should be_true
31
+ @connection.respond_signal
32
+ @message.take([:server, :alive, nil], 0).should be_true
33
33
  end
34
34
 
35
35
  it "should respond :exit signal" do
36
36
  @message.write([@node_id, :exit])
37
- @connection.respond_alive_signal.should == :exit
37
+ @connection.respond_signal.should == :exit
38
38
  end
39
39
  end
@@ -0,0 +1,86 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ require 'drbqs/history'
4
+
5
+ describe DRbQS::History do
6
+
7
+ def check_event(event, *vals)
8
+ event[0].should be_an_instance_of Time
9
+ event[1..-1].each_with_index do |obj, i|
10
+ obj.should == vals[i]
11
+ end
12
+ end
13
+
14
+ context "when setting events" do
15
+ before(:all) do
16
+ @history = DRbQS::History.new
17
+ @history.set(1, :abc)
18
+ @history.set(1, :def)
19
+ @history.set(2, 'ABC', 'DEF')
20
+ @history.set(3, :ghi)
21
+ @history.set(1, :jkl)
22
+ @history.set(2, 123, 456)
23
+ end
24
+
25
+ it "should have 3 items." do
26
+ @history.should have(3).items
27
+ end
28
+
29
+ it "should 3 events of ID 1." do
30
+ @history.number_of_events(1).should == 3
31
+ end
32
+
33
+ it "should 2 events of ID 2" do
34
+ @history.number_of_events(2).should == 2
35
+ end
36
+
37
+ it "should 1 event of ID 3" do
38
+ @history.number_of_events(3).should == 1
39
+ end
40
+
41
+ it "should check events of ID 1" do
42
+ events = @history.events(1)
43
+ check_event(events[0], :abc)
44
+ check_event(events[1], :def)
45
+ check_event(events[2], :jkl)
46
+ end
47
+
48
+ it "should check events of ID 2" do
49
+ events = @history.events(2)
50
+ check_event(events[0], 'ABC', 'DEF')
51
+ check_event(events[1], 123, 456)
52
+ end
53
+
54
+ it "should check events of ID 1" do
55
+ events = @history.events(3)
56
+ check_event(events[0], :ghi)
57
+ end
58
+ end
59
+
60
+ context "when executing a method" do
61
+ subject { DRbQS::History.new }
62
+
63
+ it "should add new event" do
64
+ id = 1
65
+ subject.set(id, :connect)
66
+ subject.should have(1).items
67
+ subject.number_of_events(id).should == 1
68
+ check_event(subject.events(1)[0], :connect)
69
+ end
70
+
71
+ it "should execute each events" do
72
+ subject.set(3, '100', '200')
73
+ subject.set(3, '300', '400')
74
+ subject.set(4, 500, 600, 700)
75
+ subject.each do |id, events|
76
+ case id
77
+ when 3
78
+ check_event(events[0], '100', '200')
79
+ check_event(events[1], '300', '400')
80
+ when 4
81
+ check_event(events[0], 500, 600, 700)
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
data/spec/message_spec.rb CHANGED
@@ -28,7 +28,7 @@ describe DRbQS::MessageServer do
28
28
  it "should get :connect message" do
29
29
  5.times do |i|
30
30
  id_str = "connect_test_#{i}"
31
- @message.write([:connect, id_str])
31
+ @message.write([:server, :connect, id_str])
32
32
  @message_server.get_message
33
33
  (ary = @message.take([id_str, Fixnum])).should be_true
34
34
  @node_id_list << ary[1]
@@ -38,14 +38,14 @@ describe DRbQS::MessageServer do
38
38
 
39
39
  it "should get :alive message" do
40
40
  node_id = 73
41
- @message.write([:alive, node_id])
41
+ @message.write([:server, :alive, node_id])
42
42
  node_list = @message_server.instance_variable_get(:@node_list)
43
43
  node_list.should_receive(:set_alive).with(node_id)
44
44
  @message_server.get_message
45
45
  end
46
46
 
47
47
  it "should get :exit_server message" do
48
- @message.write([:exit_server, 'message_test'])
48
+ @message.write([:server, :exit_server, 'message_test'])
49
49
  @message_server.get_message.should == :exit_server
50
50
  end
51
51
 
@@ -70,7 +70,7 @@ describe DRbQS::MessageServer do
70
70
  end
71
71
 
72
72
  it "should get :request_status message" do
73
- @message.write([:request_status, 'message_test'])
73
+ @message.write([:server, :request_status, 'message_test'])
74
74
  @message_server.get_message.should == :request_status
75
75
  end
76
76
 
@@ -2,32 +2,6 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  require 'drbqs/node_list'
4
4
 
5
- describe DRbQS::NodeHistory do
6
- subject { DRbQS::NodeHistory.new }
7
-
8
- it "should add new id" do
9
- subject.add(1, 'hello')
10
- ary = subject.each.to_a
11
- ary.should have(1).items
12
- ary[0][0].should == 1
13
- ary[0][1].should have(2).items
14
- ary[0][1][0].should == 'hello'
15
- ary[0][1][1].should be_an_instance_of Time
16
- end
17
-
18
- it "should set disconnected" do
19
- subject.add(1, 'hello')
20
- subject.disconnect(1)
21
- ary = subject.each.to_a
22
- ary.should have(1).items
23
- ary[0][0].should == 1
24
- ary[0][1].should have(3).items
25
- ary[0][1][0].should == 'hello'
26
- ary[0][1][1].should be_an_instance_of Time
27
- ary[0][1][2].should be_an_instance_of Time
28
- end
29
- end
30
-
31
5
  describe DRbQS::NodeList do
32
6
  before(:all) do
33
7
  @node_list = DRbQS::NodeList.new
@@ -79,15 +53,15 @@ describe DRbQS::NodeList do
79
53
 
80
54
  it "should add to history" do
81
55
  node_list = DRbQS::NodeList.new
82
- node_list.history.should_receive(:add)
56
+ node_list.history.should_receive(:set).with(1, :connect, 'hello')
83
57
  node_list.get_new_id('hello')
84
58
  end
85
59
 
86
60
  it "should set disconnection to history" do
87
61
  node_list = DRbQS::NodeList.new
88
- node_list.history.should_receive(:disconnect)
89
62
  node_list.get_new_id('hello')
90
63
  node_list.set_check_connection
64
+ node_list.history.should_receive(:set).with(1, :disconnect)
91
65
  node_list.delete_not_alive
92
66
  end
93
67
 
data/spec/queue_spec.rb CHANGED
@@ -37,7 +37,7 @@ describe DRbQS::QueueServer do
37
37
  end
38
38
 
39
39
  it "should get result" do
40
- @ts[:result].write([:result, @task[:id], :result_object])
40
+ @ts[:result].write([:result, @task[:id], @node_id, :result_object])
41
41
  @queue_server.get_result
42
42
  @queue_server.calculating_task_number.should == 0
43
43
  @queue_server.empty?.should be_true
@@ -0,0 +1,31 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ require 'drbqs/server'
4
+
5
+ describe DRbQS::CheckAlive do
6
+ it "should raise error with not a number" do
7
+ lambda do
8
+ DRbQS::CheckAlive.new('abc')
9
+ end.should raise_error
10
+ end
11
+
12
+ it "should raise error with a minus number" do
13
+ lambda do
14
+ DRbQS::CheckAlive.new(-10)
15
+ end.should raise_error
16
+ end
17
+
18
+ it "should return true" do
19
+ check = DRbQS::CheckAlive.new(0.1)
20
+ sleep(0.3)
21
+ check.significant_interval?.should be_true
22
+ check.set_checking
23
+ sleep(0.01)
24
+ check.significant_interval?.should be_false
25
+ end
26
+
27
+ it "should return false" do
28
+ check = DRbQS::CheckAlive.new(100)
29
+ check.significant_interval?.should be_false
30
+ end
31
+ end
@@ -48,6 +48,6 @@ describe DRbQS::TaskClient do
48
48
  @task_client.task_empty?.should be_true
49
49
  @task_client.result_empty?.should be_true
50
50
  @task_client.calculating_task.should be_nil
51
- @ts_result.take([:result, nil, nil], 0).should be_true
51
+ @ts_result.take([:result, nil, nil, nil], 0).should be_true
52
52
  end
53
53
  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.9
5
+ version: 0.0.10
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-03-22 00:00:00 +09:00
13
+ date: 2011-03-25 00:00:00 +09:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -141,6 +141,7 @@ files:
141
141
  - lib/drbqs/client.rb
142
142
  - lib/drbqs/config.rb
143
143
  - lib/drbqs/connection.rb
144
+ - lib/drbqs/history.rb
144
145
  - lib/drbqs/manage.rb
145
146
  - lib/drbqs/message.rb
146
147
  - lib/drbqs/node_list.rb
@@ -160,10 +161,12 @@ files:
160
161
  - spec/connection_spec.rb
161
162
  - spec/data/acl.txt
162
163
  - spec/filename_spec.rb
164
+ - spec/history_spec.rb
163
165
  - spec/manage_spec.rb
164
166
  - spec/message_spec.rb
165
167
  - spec/node_list_spec.rb
166
168
  - spec/queue_spec.rb
169
+ - spec/server_check_alive_spec.rb
167
170
  - spec/server_define_spec.rb
168
171
  - spec/server_hook_spec.rb
169
172
  - spec/server_spec.rb
@@ -190,7 +193,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
193
  requirements:
191
194
  - - ">="
192
195
  - !ruby/object:Gem::Version
193
- hash: -3321628204237987958
196
+ hash: 4286900576171591504
194
197
  segments:
195
198
  - 0
196
199
  version: "0"
@@ -212,10 +215,12 @@ test_files:
212
215
  - spec/config_spec.rb
213
216
  - spec/connection_spec.rb
214
217
  - spec/filename_spec.rb
218
+ - spec/history_spec.rb
215
219
  - spec/manage_spec.rb
216
220
  - spec/message_spec.rb
217
221
  - spec/node_list_spec.rb
218
222
  - spec/queue_spec.rb
223
+ - spec/server_check_alive_spec.rb
219
224
  - spec/server_define_spec.rb
220
225
  - spec/server_hook_spec.rb
221
226
  - spec/server_spec.rb