drbqs 0.0.19 → 0.1.0

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.
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