drbqs 0.0.18 → 0.0.19

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,13 +15,13 @@ module DRbQS
15
15
  OUTPUT_NOT_SEND_RESULT = 'not_send_result'
16
16
  DEFAULT_LOG_FILE = 'drbqs_client.log'
17
17
  INTERVAL_TIME_DEFAULT = 0.1
18
+ WAIT_NEW_TASK_TIME = 1
18
19
  SAME_HOST_GROUP = :local
19
20
 
20
21
  # @param [String] acces_uri Set the uri of server
21
22
  # @param [Hash] opts Options of a node
22
23
  # @option opts [Fixnum] :process Number of worker processes
23
24
  # @option opts [Array] :group An array of group symbols
24
- # @option opts [Boolean] :continue If we set true then the node process does not exit
25
25
  # @option opts [Fixnum] :sleep_time Time interval during sleep of the node
26
26
  # @option opts [String] :max_loadavg Note that this optiono is experimental
27
27
  def initialize(access_uri, opts = {})
@@ -31,7 +31,6 @@ module DRbQS
31
31
  @task_client = nil
32
32
  @worker_number = opts[:process] || 1
33
33
  @state = DRbQS::Node::State.new(:wait, @worker_number, :max_loadavg => opts[:max_loadavg], :sleep_time => opts[:sleep_time])
34
- @process_continue = opts[:continue]
35
34
  @group = opts[:group] || []
36
35
  @signal_to_server_queue = Queue.new
37
36
  @config = DRbQS::Config.new
@@ -199,7 +198,6 @@ module DRbQS
199
198
  flag_finalize_exit = true
200
199
  when :exit_after_task
201
200
  @state.set_exit_after_task
202
- @process_continue = nil
203
201
  end
204
202
  if flag_finalize_exit
205
203
  execute_finalization
@@ -231,7 +229,7 @@ module DRbQS
231
229
  private :clear_node_files
232
230
 
233
231
  def wait_interval_of_connection
234
- sleep(INTERVAL_TIME_DEFAULT)
232
+ Kernel.sleep(INTERVAL_TIME_DEFAULT)
235
233
  end
236
234
  private :wait_interval_of_connection
237
235
 
@@ -241,8 +239,8 @@ module DRbQS
241
239
  end
242
240
  end
243
241
 
244
- MAX_WAIT_FINISH = 3
245
- WAIT_INTERVAL = 0.1
242
+ MAX_WORKER_WAIT_TIME = 3
243
+ WORKER_WAIT_INTERVAL = 0.1
246
244
 
247
245
  def respond_worker_signal
248
246
  @worker.respond_signal
@@ -256,13 +254,13 @@ module DRbQS
256
254
  respond_worker_signal
257
255
  if !@worker.has_process?
258
256
  break
259
- elsif total_wait_time > MAX_WAIT_FINISH
257
+ elsif total_wait_time > MAX_WORKER_WAIT_TIME
260
258
  # Kill worker processes forcibly.
261
259
  @worker.kill_all_processes
262
260
  break
263
261
  end
264
- sleep(WAIT_INTERVAL)
265
- total_wait_time += WAIT_INTERVAL
262
+ sleep(WORKER_WAIT_INTERVAL)
263
+ total_wait_time += WORKER_WAIT_INTERVAL
266
264
  end
267
265
  send_result_to_server
268
266
  end
@@ -271,6 +269,7 @@ module DRbQS
271
269
  def calculate(opts = {})
272
270
  set_signal_trap
273
271
  begin
272
+ server_has_no_task = nil
274
273
  loop do
275
274
  send_result_to_server
276
275
  unless process_signal_for_server
@@ -279,11 +278,17 @@ module DRbQS
279
278
  if @state.change_to_sleep_for_busy_system
280
279
  @logger.info("Sleep because system is busy.")
281
280
  end
281
+ if server_has_no_task && (t = server_has_no_task + WAIT_NEW_TASK_TIME - Time.now) > 0
282
+ sleep(t)
283
+ server_has_no_task = nil
284
+ end
282
285
  if get_new_task
283
286
  send_task_to_worker
284
- elsif @state.all_workers_waiting? && !@process_continue
287
+ elsif @state.ready_to_exit_after_task? && @task_client.result_empty?
285
288
  execute_finalization
286
289
  break
290
+ elsif @state.request?
291
+ server_has_no_task = Time.now
287
292
  end
288
293
  unless respond_worker_signal
289
294
  wait_interval_of_connection
@@ -55,7 +55,7 @@ module DRbQS
55
55
  end
56
56
 
57
57
  def request?
58
- request_task_number > 0
58
+ @state_after_task != :exit && request_task_number > 0
59
59
  end
60
60
 
61
61
  def all_workers_waiting?
@@ -169,6 +169,10 @@ module DRbQS
169
169
  end
170
170
  nil
171
171
  end
172
+
173
+ def ready_to_exit_after_task?
174
+ @state_after_task == :exit && all_workers_waiting?
175
+ end
172
176
  end
173
177
  end
174
178
  end
@@ -71,7 +71,7 @@ module DRbQS
71
71
  break
72
72
  end
73
73
  end
74
- get_task_id.empty? ? nil: get_task_id
74
+ get_task_id.empty? ? nil : get_task_id
75
75
  end
76
76
 
77
77
  # Return an array of task ID that is sent to the server.
@@ -1,3 +1,3 @@
1
1
  module DRbQS
2
- VERSION = '0.0.18'
2
+ VERSION = '0.0.19'
3
3
  end
@@ -105,8 +105,12 @@ module DRbQS
105
105
  # @param [Fixnum] task_id
106
106
  # @param [Numeric] interval_time An argument of Kernel#sleep.
107
107
  def wait(task_id, interval_time)
108
- while @task_pool[task_id]
109
- unless step
108
+ if @task_pool[task_id]
109
+ loop do
110
+ step
111
+ unless @task_pool[task_id]
112
+ return true
113
+ end
110
114
  Kernel.sleep(interval_time)
111
115
  end
112
116
  end
@@ -116,9 +120,8 @@ module DRbQS
116
120
  # @param [Numeric] interval_time An argument of Kernel#sleep.
117
121
  def waitall(interval_time)
118
122
  while calculating?
119
- unless step
120
- Kernel.sleep(interval_time)
121
- end
123
+ step
124
+ Kernel.sleep(interval_time)
122
125
  end
123
126
  end
124
127
 
@@ -4,7 +4,7 @@ require 'drbqs/utility/temporary.rb'
4
4
 
5
5
  module DRbQS
6
6
  class Worker
7
- READ_BYTE_SIZE = 1024
7
+ READ_BYTE_SIZE = 10240
8
8
 
9
9
  class ProcessSet
10
10
  attr_reader :process
@@ -140,7 +140,7 @@ module DRbQS
140
140
  private :delete_process
141
141
 
142
142
  # Read IOs and respond signals from chiled processes.
143
- # If there no signal from childe processes then the method returns false.
143
+ # If there is no data from child processes then the method returns false.
144
144
  # Otherwise, true.
145
145
  # Types of signals are :result, :node_error, :finish_preparing_to_exit.
146
146
  # - :result
@@ -154,10 +154,16 @@ module DRbQS
154
154
  to_be_deleted = []
155
155
  @process.each do |key, h|
156
156
  if !h[:task].empty? || h[:exit]
157
+ data = ''
157
158
  begin
158
- data = h[:in].read_nonblock(READ_BYTE_SIZE)
159
+ loop do
160
+ data << h[:in].read_nonblock(READ_BYTE_SIZE)
161
+ end
162
+ rescue IO::WaitReadable
163
+ end
164
+ if !data.empty?
165
+ num += 1
159
166
  h[:unpacker].feed_each(data) do |ary|
160
- num += 1
161
167
  response_type, response = ary
162
168
  case response_type
163
169
  when :result
@@ -179,7 +185,6 @@ module DRbQS
179
185
  to_be_deleted << key
180
186
  end
181
187
  end
182
- rescue IO::WaitReadable
183
188
  end
184
189
  end
185
190
  end
@@ -9,7 +9,7 @@ describe DRbQS do
9
9
  DRbQS::Task.new(TestCount.new, :echo, args: [i])
10
10
  end
11
11
  @process_id, @uri = drbqs_fork_server(14010, :task => @tasks)
12
- @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
12
+ @node = DRbQS::Node.new(@uri, :log_file => $stdout)
13
13
  end
14
14
 
15
15
  it "should have nil instance variables" do
@@ -14,7 +14,7 @@ describe DRbQS do
14
14
  end
15
15
  end
16
16
  @process_id, @uri = drbqs_fork_server(14020, :task => @task_generators)
17
- @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
17
+ @node = DRbQS::Node.new(@uri, :log_file => $stdout)
18
18
  end
19
19
 
20
20
  it "should have nil instance variables" do
@@ -7,7 +7,7 @@ describe DRbQS do
7
7
  before(:all) do
8
8
  @tasks = [DRbQS::Task.new(Test3.new, :temp_file)]
9
9
  @process_id, @uri = drbqs_fork_server(14030, :task => @tasks)
10
- @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
10
+ @node = DRbQS::Node.new(@uri, :log_file => $stdout)
11
11
  end
12
12
 
13
13
  it "should initialize @task_client" do
@@ -11,7 +11,7 @@ describe DRbQS::Server do
11
11
  path = "/tmp/drbqs"
12
12
  @process_id, @uri = drbqs_fork_server(path, :task => @tasks)
13
13
  @manage = DRbQS::Manage.new(:uri => @uri)
14
- @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
14
+ @node = DRbQS::Node.new(@uri, :log_file => $stdout)
15
15
  end
16
16
 
17
17
  it "should send signal and get status" do
@@ -36,7 +36,7 @@ describe DRbQS do
36
36
  server.set_finalization_task(DRbQS::Task.new(TestValue, :set, args: [:third, 3]),
37
37
  DRbQS::Task.new(TestValue, :set, args: [:fourth, 4]))
38
38
  end
39
- @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
39
+ @node = DRbQS::Node.new(@uri, :log_file => $stdout)
40
40
  end
41
41
 
42
42
  it "should execute initialization tasks." do
@@ -13,7 +13,7 @@ describe DRbQS do
13
13
  end
14
14
  @process_number = 3
15
15
  @process_id, @uri = drbqs_fork_server(14120, :task => @tasks)
16
- @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true, :process => @process_number)
16
+ @node = DRbQS::Node.new(@uri, :log_file => $stdout, :process => @process_number)
17
17
  end
18
18
 
19
19
  it "should calculate" do
@@ -65,6 +65,7 @@ describe DRbQS::Worker::ProcessSet do
65
65
  subject.respond_signal
66
66
  sleep(0.1)
67
67
  unless subject.exist?(key)
68
+ sleep(0.1)
68
69
  break
69
70
  end
70
71
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drbqs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.0.19
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-21 00:00:00.000000000 Z
12
+ date: 2011-10-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &10367840 !ruby/object:Gem::Requirement
16
+ requirement: &12438740 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.6.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *10367840
24
+ version_requirements: *12438740
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: yard
27
- requirement: &10366940 !ruby/object:Gem::Requirement
27
+ requirement: &12438160 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.7.2
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *10366940
35
+ version_requirements: *12438160
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: filename
38
- requirement: &10366320 !ruby/object:Gem::Requirement
38
+ requirement: &12437700 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.1.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *10366320
46
+ version_requirements: *12437700
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: user_config
49
- requirement: &10365760 !ruby/object:Gem::Requirement
49
+ requirement: &12437200 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.0.2
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *10365760
57
+ version_requirements: *12437200
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: net-ssh
60
- requirement: &10365160 !ruby/object:Gem::Requirement
60
+ requirement: &12436460 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 2.1.0
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *10365160
68
+ version_requirements: *12436460
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: net-ssh-shell
71
- requirement: &10364460 !ruby/object:Gem::Requirement
71
+ requirement: &12435840 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.2.0
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *10364460
79
+ version_requirements: *12435840
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: net-sftp
82
- requirement: &10363900 !ruby/object:Gem::Requirement
82
+ requirement: &12435360 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 2.0.5
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *10363900
90
+ version_requirements: *12435360
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: sys-proctable
93
- requirement: &10363400 !ruby/object:Gem::Requirement
93
+ requirement: &12434980 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,7 +98,7 @@ dependencies:
98
98
  version: '0'
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *10363400
101
+ version_requirements: *12434980
102
102
  description: Task queuing system over network that is implemented by dRuby.
103
103
  email:
104
104
  - d@ytak.info