drbqs 0.0.19 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +7 -0
  2. data/docs/TestProfiler.md +30 -0
  3. data/drbqs.gemspec +2 -1
  4. data/{example → examples}/README.md +0 -0
  5. data/{example → examples}/command/server_def.rb +1 -1
  6. data/{example → examples}/error_server/error.rb +0 -0
  7. data/{example → examples}/error_server/server_def.rb +0 -0
  8. data/{example → examples}/error_task/error.rb +0 -0
  9. data/{example → examples}/error_task/server_def.rb +1 -1
  10. data/examples/execute/README.md +7 -0
  11. data/examples/execute/execute.rb +10 -0
  12. data/examples/execute/server.rb +27 -0
  13. data/{example/sum → examples/execute}/sum.rb +0 -0
  14. data/{example → examples}/group/execute.rb +5 -2
  15. data/{example → examples}/group/server.rb +0 -0
  16. data/{example → examples}/group/sum.rb +0 -0
  17. data/{example → examples}/mandelbrot/README.md +0 -0
  18. data/{example → examples}/mandelbrot/execute.rb +4 -1
  19. data/{example → examples}/mandelbrot/mandelbrot.rb +0 -0
  20. data/{example → examples}/mandelbrot/server.rb +0 -0
  21. data/examples/server/server.rb +20 -0
  22. data/{example → examples}/simple/README.md +0 -0
  23. data/{example → examples}/simple/execute.rb +0 -0
  24. data/{example → examples}/simple/server.rb +0 -0
  25. data/{example → examples}/simple/task.rb +0 -0
  26. data/{example → examples}/sum/server_def.rb +5 -1
  27. data/examples/sum/sum.rb +10 -0
  28. data/{example → examples}/sum2/execute_def.rb +0 -0
  29. data/{example → examples}/sum2/server_def.rb +3 -4
  30. data/{example → examples}/sum2/sum.rb +0 -0
  31. data/{example → examples}/transfer/file.rb +0 -0
  32. data/{example → examples}/transfer/server_def.rb +0 -0
  33. data/lib/drbqs.rb +5 -0
  34. data/lib/drbqs/command_line/command_execute.rb +1 -0
  35. data/lib/drbqs/command_line/command_server.rb +1 -1
  36. data/lib/drbqs/config/process_list.rb +9 -7
  37. data/lib/drbqs/execute/process_define.rb +109 -18
  38. data/lib/drbqs/execute/register.rb +41 -33
  39. data/lib/drbqs/ext/task/command_task.rb +20 -17
  40. data/lib/drbqs/node/connection.rb +1 -2
  41. data/lib/drbqs/node/node.rb +3 -4
  42. data/lib/drbqs/server/server.rb +9 -3
  43. data/lib/drbqs/setting/base.rb +1 -0
  44. data/lib/drbqs/setting/data_container.rb +2 -2
  45. data/lib/drbqs/setting/execute.rb +9 -2
  46. data/lib/drbqs/setting/node.rb +7 -1
  47. data/lib/drbqs/setting/server.rb +4 -1
  48. data/lib/drbqs/task/registrar.rb +1 -2
  49. data/lib/drbqs/utility/misc.rb +6 -1
  50. data/lib/drbqs/utility/temporary.rb +27 -34
  51. data/lib/drbqs/version.rb +1 -1
  52. data/lib/drbqs/worker/worker_process_set.rb +3 -1
  53. data/spec/command_line/command_base_spec.rb +2 -2
  54. data/spec/config/config_spec.rb +5 -4
  55. data/spec/config/ssh_host_spec.rb +1 -1
  56. data/spec/execute/process_define_spec.rb +65 -18
  57. data/spec/execute/register_spec.rb +31 -9
  58. data/spec/ext/task/command_task_spec.rb +3 -5
  59. data/spec/integration_test/09_server_process_data_spec.rb +1 -1
  60. data/spec/node/node_spec.rb +3 -3
  61. data/spec/node/task_client_spec.rb +10 -10
  62. data/spec/server/history_spec.rb +22 -10
  63. data/spec/server/queue_spec.rb +11 -11
  64. data/spec/server/server_spec.rb +2 -2
  65. data/spec/server/transfer_setting_spec.rb +1 -1
  66. data/spec/setting/source_spec.rb +11 -10
  67. data/spec/task/task_spec.rb +5 -5
  68. data/spec/utility/misc_spec.rb +1 -1
  69. data/spec/utility/temporary_spec.rb +1 -7
  70. data/spec/utility/transfer/transfer_client_connect_spec.rb +4 -4
  71. data/spec/utility/transfer/transfer_file_list_spec.rb +2 -2
  72. data/spec/utility/transfer/transfer_spec.rb +23 -8
  73. metadata +108 -70
  74. data/example/execute/execute.rb +0 -41
  75. data/example/execute/server.rb +0 -14
  76. data/example/execute/task.rb +0 -0
  77. data/example/server/server.rb +0 -11
@@ -2,39 +2,40 @@ require 'tmpdir'
2
2
 
3
3
  module DRbQS
4
4
  module Temporary
5
- @@root = nil
6
- @@subdir = nil
7
- @@filename = nil
5
+ @root = nil
6
+ @pid = nil
7
+ @subdir = nil
8
+ @filename = nil
8
9
 
9
- def self.set_root_directory
10
- if !@@root
11
- pid = Process.pid
12
- @@root = File.join(Dir.tmpdir, sprintf("drbqs_%s_%d_%d", ENV['USER'], pid, rand(10000)))
13
- FileUtils.mkdir_p(@@root, :mode => 0700)
10
+ # Return root of temporary directory.
11
+ def self.root
12
+ if @pid != Process.pid
13
+ @pid = Process.pid
14
+ @root = File.join(Dir.tmpdir, sprintf("drbqs_%s_%d_%d", ENV['USER'], @pid, rand(10000)))
15
+ FileUtils.mkdir_p(@root, :mode => 0700)
14
16
  end
17
+ @root
15
18
  end
16
19
 
17
20
  def self.set_sub_directory(dir)
18
- self.set_root_directory
19
- @@filename = nil
20
- @@subdir = File.join(@@root, dir)
21
+ @filename = nil
22
+ @subdir = File.join(self.root, dir)
21
23
  end
22
24
 
23
25
  def self.subdirectory
24
- @@subdir && File.exist?(@@subdir) ? @@subdir : nil
26
+ @subdir && File.exist?(@subdir) ? @subdir : nil
25
27
  end
26
28
 
27
29
  # Return FileName object to generate names of temporary files on DRbQS nodes.
28
30
  def self.filename
29
- unless @@filename
30
- self.set_root_directory
31
- if @@subdir
32
- @@filename = FileName.new(File.join(@@subdir, sprintf("temp_%d", rand(10000))))
31
+ unless @filename
32
+ if @subdir
33
+ @filename = FileName.new(File.join(@subdir, sprintf("temp_%d", rand(10000))))
33
34
  else
34
- @@filename = FileName.new(File.join(@@root, sprintf("temp_%d", rand(10000))))
35
+ @filename = FileName.new(File.join(self.root, sprintf("temp_%d", rand(10000))))
35
36
  end
36
37
  end
37
- @@filename
38
+ @filename
38
39
  end
39
40
 
40
41
  # Create new temporary directory and return the path of directory.
@@ -52,26 +53,18 @@ module DRbQS
52
53
  end
53
54
  end
54
55
 
55
- # Make root of temporary directory empty.
56
- def self.delete
57
- if @@root
58
- FileUtils.rm_r(@@root)
59
- FileUtils.mkdir_p(@@root, :mode => 0700)
60
- end
61
- end
62
-
63
56
  # Delete all temporary directory.
64
- def self.delete_all
65
- if @@root
66
- FileUtils.rm_r(@@root)
67
- @@root = nil
68
- @@filename = nil
57
+ def self.delete
58
+ if @root
59
+ FileUtils.rm_r(@root)
60
+ @pid = nil
61
+ @root = nil
62
+ @filename = nil
69
63
  end
70
64
  end
71
65
 
72
- # Return root of temporary directory.
73
- def self.root
74
- @@root
66
+ def self.socket_path
67
+ FileName.create(self.root, "socket", :add => :always, :type => :time)
75
68
  end
76
69
  end
77
70
  end
data/lib/drbqs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module DRbQS
2
- VERSION = '0.0.19'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -1,6 +1,5 @@
1
1
  require 'drbqs/worker/serialize'
2
2
  require 'drbqs/worker/forked_process'
3
- require 'drbqs/utility/temporary.rb'
4
3
 
5
4
  module DRbQS
6
5
  class Worker
@@ -160,6 +159,9 @@ module DRbQS
160
159
  data << h[:in].read_nonblock(READ_BYTE_SIZE)
161
160
  end
162
161
  rescue IO::WaitReadable
162
+ rescue
163
+ $stderr.puts "Stored data: " + data.inspect
164
+ raise
163
165
  end
164
166
  if !data.empty?
165
167
  num += 1
@@ -5,7 +5,7 @@ require 'drbqs/command_line/command_line'
5
5
  describe DRbQS::Command::Base do
6
6
  context "when executing" do
7
7
  it "should execute." do
8
- setting = mock('setting')
8
+ setting = double('setting')
9
9
  DRbQS::Setting::Base.stub(:new).and_return(setting)
10
10
  setting.should_receive(:parse!)
11
11
  setting.should_receive(:exec).with($stdout)
@@ -16,7 +16,7 @@ describe DRbQS::Command::Base do
16
16
 
17
17
  it "should define DRbQS::Command::Base.exec." do
18
18
  argv = [1, 2, 3]
19
- obj = mock
19
+ obj = double
20
20
  DRbQS::Command::Base.should_receive(:new).and_return(obj)
21
21
  obj.should_receive(:parse_option)
22
22
  obj.should_receive(:exec)
@@ -3,10 +3,11 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
3
  describe DRbQS::Config do
4
4
  before(:all) do
5
5
  FileUtils.mkdir_p(HOME_FOR_SPEC)
6
+ @config = DRbQS::Config.new
6
7
  end
7
8
 
8
9
  subject do
9
- DRbQS::Config.new
10
+ @config
10
11
  end
11
12
 
12
13
  context "when setting new homedirectory" do
@@ -33,14 +34,14 @@ describe DRbQS::Config do
33
34
 
34
35
  it "should get directory existing." do
35
36
  lambda do
36
- subject
37
+ DRbQS::Config.new
37
38
  end.should change { File.exist?(@dir) }.from(false).to(true)
38
39
  end
39
40
  end
40
41
 
41
42
  context "when saving samples" do
42
43
  before(:all) do
43
- subject.save_sample
44
+ @config.save_sample
44
45
  end
45
46
 
46
47
  it "should get sample of ACL file." do
@@ -58,7 +59,7 @@ describe DRbQS::Config do
58
59
 
59
60
  context "when managing ACL file" do
60
61
  before(:all) do
61
- @path = subject.directory.file_path('acl.txt')
62
+ @path = @config.directory.file_path('acl.txt')
62
63
  FileUtils.rm(@path) if File.exist?(@path)
63
64
  end
64
65
 
@@ -76,6 +76,6 @@ describe DRbQS::Config::SSHHost do
76
76
  end
77
77
 
78
78
  after(:all) do
79
- DRbQS::Temporary.delete_all
79
+ DRbQS::Temporary.delete
80
80
  end
81
81
  end
@@ -8,13 +8,14 @@ describe DRbQS::ProcessDefinition do
8
8
  end
9
9
 
10
10
  context "when creating without default process names" do
11
- subject do
12
- DRbQS::ProcessDefinition.new(nil, nil, nil)
11
+ before(:all) do
12
+ @process_def = DRbQS::ProcessDefinition.new(nil, nil, nil)
13
+ @process_def.load(definition_file('execute1.rb'))
14
+ @info = @process_def.information
13
15
  end
14
16
 
15
- before(:all) do
16
- subject.load(definition_file('execute1.rb'))
17
- @info = subject.information
17
+ subject do
18
+ @process_def
18
19
  end
19
20
 
20
21
  it "should get server list." do
@@ -68,13 +69,14 @@ describe DRbQS::ProcessDefinition do
68
69
  end
69
70
 
70
71
  context "when there is no definition" do
71
- subject do
72
- DRbQS::ProcessDefinition.new(nil, nil, nil)
72
+ before(:all) do
73
+ @process_def = DRbQS::ProcessDefinition.new(nil, nil, nil)
74
+ @process_def.load(definition_file('no_def.rb'))
75
+ @info = @process_def.information
73
76
  end
74
77
 
75
- before(:all) do
76
- subject.load(definition_file('no_def.rb'))
77
- @info = subject.information
78
+ subject do
79
+ @process_def
78
80
  end
79
81
 
80
82
  it "should get server list." do
@@ -117,9 +119,9 @@ describe DRbQS::ProcessDefinition do
117
119
  @tmp = '/tmp/drbqs_tmp_log' # defined in execute1.rb
118
120
  @process_def = DRbQS::ProcessDefinition.new(nil, nil, @port)
119
121
  @process_def.load(definition_file('execute1.rb'))
120
- @server_setting = subject.__send__(:get_server_setting)[1][:setting]
121
- @node_local_setting = subject.__send__(:get_node_data, :node_local)[:setting]
122
- @node_ssh_setting = subject.__send__(:get_node_data, :node_ssh)[:setting]
122
+ @server_setting = @process_def.__send__(:get_server_setting)[1][:setting]
123
+ @node_local_setting = @process_def.__send__(:get_node_data, :node_local)[:setting]
124
+ @node_ssh_setting = @process_def.__send__(:get_node_data, :node_ssh)[:setting]
123
125
  end
124
126
 
125
127
  subject do
@@ -153,8 +155,8 @@ describe DRbQS::ProcessDefinition do
153
155
  @tmp = '/tmp/drbqs_tmp_log' # defined in execute1.rb
154
156
  @process_def = DRbQS::ProcessDefinition.new(nil, [:node_local], nil)
155
157
  @process_def.load(definition_file('execute1.rb'))
156
- @server_setting = subject.__send__(:get_server_setting)[1][:setting]
157
- @node_local_setting = subject.__send__(:get_node_data, :node_local)[:setting]
158
+ @server_setting = @process_def.__send__(:get_server_setting)[1][:setting]
159
+ @node_local_setting = @process_def.__send__(:get_node_data, :node_local)[:setting]
158
160
  end
159
161
 
160
162
  subject do
@@ -186,9 +188,9 @@ describe DRbQS::ProcessDefinition do
186
188
  @tmp = '/tmp/drbqs_tmp_log' # defined in execute1.rb
187
189
  @process_def = DRbQS::ProcessDefinition.new(nil, nil, nil)
188
190
  @process_def.load(definition_file('execute2.rb'))
189
- @server_setting = subject.__send__(:get_server_setting)[1][:setting]
190
- @node_local_setting = subject.__send__(:get_node_data, :node_local)[:setting]
191
- @node_ssh_setting = subject.__send__(:get_node_data, :node_ssh)[:setting]
191
+ @server_setting = @process_def.__send__(:get_server_setting)[1][:setting]
192
+ @node_local_setting = @process_def.__send__(:get_node_data, :node_local)[:setting]
193
+ @node_ssh_setting = @process_def.__send__(:get_node_data, :node_ssh)[:setting]
192
194
  end
193
195
 
194
196
  subject do
@@ -201,4 +203,49 @@ describe DRbQS::ProcessDefinition do
201
203
  subject.execute_node
202
204
  end
203
205
  end
206
+
207
+
208
+ context "when testing consistency" do
209
+ before(:each) do
210
+ @process_def = DRbQS::ProcessDefinition.new(nil, nil, nil)
211
+ end
212
+
213
+ subject do
214
+ @process_def
215
+ end
216
+
217
+ it "should not raise error" do
218
+ subject.register.default(:server => :server_existent)
219
+ subject.register.server(:server_existent, "example.com") do |server, ssh|
220
+ end
221
+ lambda do
222
+ subject.test_consistency
223
+ end.should_not raise_error
224
+ end
225
+
226
+ it "should should raise error" do
227
+ subject.register.default(:server => :server_non_existent)
228
+ lambda do
229
+ subject.test_consistency
230
+ end.should_not raise_error
231
+ end
232
+
233
+ it "should not raise error" do
234
+ subject.register.default(:node => [:node1, :node2])
235
+ subject.register.node(:node1) do |node|
236
+ end
237
+ subject.register.node(:node2) do |node|
238
+ end
239
+ lambda do
240
+ subject.test_consistency
241
+ end.should_not raise_error
242
+ end
243
+
244
+ it "should raise an error for non-existent node" do
245
+ subject.register.default(:node => [:node1, :node2])
246
+ lambda do
247
+ subject.test_consistency
248
+ end.should raise_error
249
+ end
250
+ end
204
251
  end
@@ -42,7 +42,7 @@ describe DRbQS::ProcessDefinition::Register do
42
42
  it "should raise error for arguments without hostname." do
43
43
  load_file = 'file.rb'
44
44
  lambda do
45
- subject.server(:server3) do |server|
45
+ subject.server(:server3) do |server, ssh|
46
46
  server.load load_file
47
47
  end
48
48
  end.should raise_error
@@ -78,6 +78,14 @@ describe DRbQS::ProcessDefinition::Register do
78
78
  setting.get(:shell).should == [bash]
79
79
  setting.mode_setting.get(:load).should == [load_file]
80
80
  end
81
+
82
+ it "should raise an error for invalid keys" do
83
+ lambda do
84
+ subject.server(:server6, "example.com", :invalid_key => "Hello") do |server|
85
+ ssh.shell "bash"
86
+ end
87
+ end.should raise_error
88
+ end
81
89
  end
82
90
 
83
91
  context "when registering a node" do
@@ -158,6 +166,15 @@ describe DRbQS::ProcessDefinition::Register do
158
166
  subject.node(:node_group, :group => :node_error)
159
167
  end.should raise_error
160
168
  end
169
+
170
+ it "should raise an error for invalid keys" do
171
+ uri = 'druby://:12345'
172
+ lambda do
173
+ subject.node(:node_error, :invalid_key => "Hello") do |node|
174
+ node.connect uri
175
+ end
176
+ end.should raise_error
177
+ end
161
178
  end
162
179
 
163
180
  context "when loading other server difinition" do
@@ -452,20 +469,25 @@ describe DRbQS::ProcessDefinition::Register do
452
469
  h[:node].should == nodes
453
470
  end
454
471
 
455
- it "should set default value for some keys." do
456
- subject.default(:log => '/tmp/drbqs/log', :some_key => 'some_value')
472
+ it "should set default value of log file." do
473
+ subject.default(:log => '/tmp/drbqs/log')
457
474
  h = subject.__default__
458
475
  h[:log].should == '/tmp/drbqs/log'
459
- h[:some_key].should == 'some_value'
460
476
  end
461
477
 
462
478
  it "should clear values." do
463
- subject.default(key1: 'val1', key2: 'val2', key3: 'val3')
464
- subject.default_clear(:key1, :key2)
479
+ subject.default(:log => 'val1', :port => '12345', :server => :server1)
480
+ subject.default_clear(:log, :port)
465
481
  h = subject.__default__
466
- h[:key1].should be_nil
467
- h[:key2].should be_nil
468
- h[:key3].should == 'val3'
482
+ h[:log].should be_nil
483
+ h[:port].should be_nil
484
+ h[:server].should == :server1
485
+ end
486
+
487
+ it "should raise an error for invalid keys" do
488
+ lambda do
489
+ subject.default(:invalid_key => 'val1')
490
+ end.should raise_error
469
491
  end
470
492
  end
471
493
  end
@@ -1,16 +1,14 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
- require 'drbqs/ext/task'
4
-
5
3
  describe DRbQS::CommandTask::CommandExecute do
6
4
  it "should execute command" do
7
- cmd_exec = DRbQS::CommandTask::CommandExecute.new('ls > /dev/null')
8
- cmd_exec.exec.should == 0
5
+ cmd_exec = DRbQS::CommandTask::CommandExecute.new(['ls > /dev/null', "echo hello > /dev/null"])
6
+ cmd_exec.exec.should == [0, 0]
9
7
  end
10
8
 
11
9
  it "should enqueue files" do
12
10
  DRbQS::Transfer.should_receive(:enqueue).exactly(2)
13
11
  cmd_exec = DRbQS::CommandTask::CommandExecute.new('ls > /dev/null', :transfer => ['hello', 'world'])
14
- cmd_exec.exec
12
+ cmd_exec.exec.should == [0]
15
13
  end
16
14
  end
@@ -64,7 +64,7 @@ describe DRbQS::Server do
64
64
  end
65
65
 
66
66
  after(:all) do
67
- DRbQS::Temporary.delete_all
67
+ DRbQS::Temporary.delete
68
68
  @manage.send_exit_signal
69
69
  lambda do
70
70
  drbqs_wait_kill_server(@server_process_id)
@@ -24,12 +24,12 @@ describe DRbQS::Node do
24
24
  it "should connect to server." do
25
25
  node_number = 10
26
26
  DRb::DRbObject.should_receive(:new_with_uri).and_return(@drb_object)
27
- node_connection = mock('node connection')
27
+ node_connection = double('node connection')
28
28
  node_connection.stub(:node_number).and_return(node_number)
29
29
  node_connection.stub(:get_initialization).and_return(nil)
30
- task_client = mock('task client')
30
+ task_client = double('task client')
31
31
  task_client.stub(:node_number).and_return(node_number)
32
- worker = mock('worker')
32
+ worker = double('worker')
33
33
  worker.stub(:create_process)
34
34
  worker.stub(:on_error)
35
35
  worker.stub(:on_result)
@@ -108,7 +108,7 @@ describe DRbQS::Node::TaskClient do
108
108
  @task_id = 3
109
109
  @task_ary = [[1, 3, 5, 7], :size, []]
110
110
  add_task_to_tuplespace(@task_id, @task_ary)
111
- @get_task_id = subject.add_new_task(1)
111
+ @get_task_id = @task_client.add_new_task(1)
112
112
  end
113
113
 
114
114
  it "should have non empty task queue." do
@@ -138,8 +138,8 @@ describe DRbQS::Node::TaskClient do
138
138
  @task_id = 8
139
139
  @task_ary = [[1, 3, 5, 7], :size, []]
140
140
  add_task_to_tuplespace(@task_id, @task_ary)
141
- @get_task_id = subject.add_new_task(1)
142
- @dequeued_task = subject.dequeue_task
141
+ @get_task_id = @task_client.add_new_task(1)
142
+ @dequeued_task = @task_client.dequeue_task
143
143
  end
144
144
 
145
145
  it "should get a task" do
@@ -165,9 +165,9 @@ describe DRbQS::Node::TaskClient do
165
165
  @task_id = 27
166
166
  @task_ary = ["abcdef", :size, []]
167
167
  add_task_to_tuplespace(@task_id, @task_ary)
168
- @get_task_id = subject.add_new_task(1)
169
- @dequeued_task = subject.dequeue_task
170
- subject.queue_result(1, :result_object)
168
+ @get_task_id = @task_client.add_new_task(1)
169
+ @dequeued_task = @task_client.dequeue_task
170
+ @task_client.queue_result(1, :result_object)
171
171
  end
172
172
 
173
173
  it "should have empty task queue." do
@@ -189,10 +189,10 @@ describe DRbQS::Node::TaskClient do
189
189
  @task_id = 28
190
190
  @task_ary = ["abcdef", :size, []]
191
191
  add_task_to_tuplespace(@task_id, @task_ary)
192
- subject.add_new_task(1)
193
- @dequeued_task = subject.dequeue_task
194
- subject.queue_result(@task_id, :result_object)
195
- @send_returned_value = subject.send_result
192
+ @task_client.add_new_task(1)
193
+ @dequeued_task = @task_client.dequeue_task
194
+ @task_client.queue_result(@task_id, :result_object)
195
+ @send_returned_value = @task_client.send_result
196
196
  end
197
197
 
198
198
  it "should get nil returned value." do