drbqs 0.0.19 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/docs/TestProfiler.md +30 -0
- data/drbqs.gemspec +2 -1
- data/{example → examples}/README.md +0 -0
- data/{example → examples}/command/server_def.rb +1 -1
- data/{example → examples}/error_server/error.rb +0 -0
- data/{example → examples}/error_server/server_def.rb +0 -0
- data/{example → examples}/error_task/error.rb +0 -0
- data/{example → examples}/error_task/server_def.rb +1 -1
- data/examples/execute/README.md +7 -0
- data/examples/execute/execute.rb +10 -0
- data/examples/execute/server.rb +27 -0
- data/{example/sum → examples/execute}/sum.rb +0 -0
- data/{example → examples}/group/execute.rb +5 -2
- data/{example → examples}/group/server.rb +0 -0
- data/{example → examples}/group/sum.rb +0 -0
- data/{example → examples}/mandelbrot/README.md +0 -0
- data/{example → examples}/mandelbrot/execute.rb +4 -1
- data/{example → examples}/mandelbrot/mandelbrot.rb +0 -0
- data/{example → examples}/mandelbrot/server.rb +0 -0
- data/examples/server/server.rb +20 -0
- data/{example → examples}/simple/README.md +0 -0
- data/{example → examples}/simple/execute.rb +0 -0
- data/{example → examples}/simple/server.rb +0 -0
- data/{example → examples}/simple/task.rb +0 -0
- data/{example → examples}/sum/server_def.rb +5 -1
- data/examples/sum/sum.rb +10 -0
- data/{example → examples}/sum2/execute_def.rb +0 -0
- data/{example → examples}/sum2/server_def.rb +3 -4
- data/{example → examples}/sum2/sum.rb +0 -0
- data/{example → examples}/transfer/file.rb +0 -0
- data/{example → examples}/transfer/server_def.rb +0 -0
- data/lib/drbqs.rb +5 -0
- data/lib/drbqs/command_line/command_execute.rb +1 -0
- data/lib/drbqs/command_line/command_server.rb +1 -1
- data/lib/drbqs/config/process_list.rb +9 -7
- data/lib/drbqs/execute/process_define.rb +109 -18
- data/lib/drbqs/execute/register.rb +41 -33
- data/lib/drbqs/ext/task/command_task.rb +20 -17
- data/lib/drbqs/node/connection.rb +1 -2
- data/lib/drbqs/node/node.rb +3 -4
- data/lib/drbqs/server/server.rb +9 -3
- data/lib/drbqs/setting/base.rb +1 -0
- data/lib/drbqs/setting/data_container.rb +2 -2
- data/lib/drbqs/setting/execute.rb +9 -2
- data/lib/drbqs/setting/node.rb +7 -1
- data/lib/drbqs/setting/server.rb +4 -1
- data/lib/drbqs/task/registrar.rb +1 -2
- data/lib/drbqs/utility/misc.rb +6 -1
- data/lib/drbqs/utility/temporary.rb +27 -34
- data/lib/drbqs/version.rb +1 -1
- data/lib/drbqs/worker/worker_process_set.rb +3 -1
- data/spec/command_line/command_base_spec.rb +2 -2
- data/spec/config/config_spec.rb +5 -4
- data/spec/config/ssh_host_spec.rb +1 -1
- data/spec/execute/process_define_spec.rb +65 -18
- data/spec/execute/register_spec.rb +31 -9
- data/spec/ext/task/command_task_spec.rb +3 -5
- data/spec/integration_test/09_server_process_data_spec.rb +1 -1
- data/spec/node/node_spec.rb +3 -3
- data/spec/node/task_client_spec.rb +10 -10
- data/spec/server/history_spec.rb +22 -10
- data/spec/server/queue_spec.rb +11 -11
- data/spec/server/server_spec.rb +2 -2
- data/spec/server/transfer_setting_spec.rb +1 -1
- data/spec/setting/source_spec.rb +11 -10
- data/spec/task/task_spec.rb +5 -5
- data/spec/utility/misc_spec.rb +1 -1
- data/spec/utility/temporary_spec.rb +1 -7
- data/spec/utility/transfer/transfer_client_connect_spec.rb +4 -4
- data/spec/utility/transfer/transfer_file_list_spec.rb +2 -2
- data/spec/utility/transfer/transfer_spec.rb +23 -8
- metadata +108 -70
- data/example/execute/execute.rb +0 -41
- data/example/execute/server.rb +0 -14
- data/example/execute/task.rb +0 -0
- data/example/server/server.rb +0 -11
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d97c7024904ace9423e4447cf220ee2c2b6a5b32
|
4
|
+
data.tar.gz: e2ea40c666d2033eebe43659f833ea032f05a720
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6cb2dfd423583c9426ce5138144dd46a37455c62208164c3ef26425578f991ce8e9e69998897170fb00e2cd13147846a89135d8a8048d6e7d48c413bd2944445
|
7
|
+
data.tar.gz: 069f933a4cdc05074e70e9a4081fe33e289a6f7959c9e9949f34f5e229bd4e968acb6ed9f594c4dc394923ee738eb79f033fe70231aa21a72abccff4f3492e9d
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Test and profiler
|
2
|
+
|
3
|
+
## Test
|
4
|
+
|
5
|
+
When we are developing program,
|
6
|
+
we want to execute tasks in single process and check errors.
|
7
|
+
For that purpose we use the option --test.
|
8
|
+
For example,
|
9
|
+
|
10
|
+
drbqs-server server.rb --test exec
|
11
|
+
|
12
|
+
In order to execute only two tasks, we type
|
13
|
+
|
14
|
+
drbqs-server server.rb --test exec,2
|
15
|
+
|
16
|
+
## Profiler
|
17
|
+
|
18
|
+
At a time we can use profiler.
|
19
|
+
|
20
|
+
drbqs-server server.rb --test exec --profile
|
21
|
+
|
22
|
+
Then drbqs creates drbqs_prof.txt that has profile data.
|
23
|
+
|
24
|
+
To profile a program and show the result by kcachegrind,
|
25
|
+
|
26
|
+
drbqs-server server.rb --test exec --profile --profile-printer calltree
|
27
|
+
|
28
|
+
and then
|
29
|
+
|
30
|
+
kcachegrind drbqs_prof.txt
|
data/drbqs.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
# specify any dependencies here; for example:
|
22
|
-
s.add_development_dependency "rspec", ">= 2.
|
22
|
+
s.add_development_dependency "rspec", ">= 2.14.1"
|
23
23
|
s.add_development_dependency "yard", ">= 0.7.2"
|
24
24
|
s.add_runtime_dependency 'filename', '>= 0.1.0'
|
25
25
|
s.add_runtime_dependency "user_config", ">= 0.0.2"
|
@@ -27,4 +27,5 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_runtime_dependency 'net-ssh-shell', '>= 0.2.0'
|
28
28
|
s.add_runtime_dependency "net-sftp", ">= 2.0.5"
|
29
29
|
s.add_runtime_dependency "sys-proctable"
|
30
|
+
s.add_runtime_dependency "activesupport"
|
30
31
|
end
|
File without changes
|
@@ -7,7 +7,7 @@ DRbQS.define_server do |server, argv, opts|
|
|
7
7
|
sleep_time = 2
|
8
8
|
server.task_generator do |reg|
|
9
9
|
3.times do |i|
|
10
|
-
reg.add(DRbQS::CommandTask.new(
|
10
|
+
reg.add(DRbQS::CommandTask.new("sleep #{sleep_time}", "echo 'hello world (#{i})'"))
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env drbqs-execute
|
2
|
+
|
3
|
+
usage message: "Message of this file", server: File.join(File.dirname(__FILE__), 'server.rb')
|
4
|
+
|
5
|
+
default server: :server, log: "/tmp/drbqs_log"
|
6
|
+
|
7
|
+
server :server do |server|
|
8
|
+
server.load File.join(File.dirname(__FILE__), "server.rb")
|
9
|
+
server.log_level "debug"
|
10
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'sum.rb'
|
2
|
+
|
3
|
+
DRbQS.option_parser do |opt, hash|
|
4
|
+
opt.on('--step NUM', Integer) do |v|
|
5
|
+
hash[:step] = v
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
output_path = File.expand_path(File.join(File.dirname(__FILE__), "../../example_execute.log"))
|
10
|
+
|
11
|
+
DRbQS.define_server(:check_alive => 5) do |server, argv, opts|
|
12
|
+
start_num = (argv[0] || 10).to_i
|
13
|
+
end_num = (argv[1] || 50).to_i
|
14
|
+
step_num = opts[:step] || 10
|
15
|
+
start_num.step(end_num, step_num) do |i|
|
16
|
+
task = DRbQS::Task.new(Sum.new(i - 10, i), :exec, :args => [], :note => "#{i-10} to #{i}") do |srv, ret|
|
17
|
+
open(output_path, "a+") do |f|
|
18
|
+
f.puts "Receive: #{ret.inspect}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
server.queue.add(task)
|
22
|
+
end
|
23
|
+
|
24
|
+
server.add_hook(:finish) do |serv|
|
25
|
+
serv.exit
|
26
|
+
end
|
27
|
+
end
|
File without changes
|
@@ -1,8 +1,11 @@
|
|
1
|
-
default :server => :server_local, :port => 13789, :log => '/tmp/drbqs_execute'
|
1
|
+
default :server => :server_local, :port => 13789, :node => [:node_odd, :node_even], :log => '/tmp/drbqs_execute'
|
2
2
|
|
3
3
|
current_dir = File.expand_path(File.dirname(__FILE__))
|
4
4
|
|
5
|
-
usage :message =>
|
5
|
+
usage :message => <<MES, :server => File.join(current_dir, 'server.rb')
|
6
|
+
Calculate sum of numbers.
|
7
|
+
Results are output to logs in /tmp/drbqs_execute
|
8
|
+
MES
|
6
9
|
|
7
10
|
server :server, "localhost" do |server|
|
8
11
|
server.load File.expand_path(File.join(File.dirname(__FILE__), 'server.rb'))
|
File without changes
|
File without changes
|
File without changes
|
@@ -2,7 +2,10 @@ DIR = File.dirname(__FILE__)
|
|
2
2
|
|
3
3
|
current_dir = File.expand_path(File.dirname(__FILE__))
|
4
4
|
|
5
|
-
usage :message =>
|
5
|
+
usage :message => <<MES, :server => File.join(current_dir, 'server.rb')
|
6
|
+
Calculate Mandelbrot set.
|
7
|
+
Result is output to the directory "result_mandelbrot".
|
8
|
+
MES
|
6
9
|
|
7
10
|
server :local_server, "localhost" do |srv|
|
8
11
|
srv.load File.join(DIR, 'server.rb')
|
File without changes
|
File without changes
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#
|
2
|
+
# Start server:
|
3
|
+
# drbqs-server examples/server/server.rb
|
4
|
+
# Start node:
|
5
|
+
# drbqs-node bin/drbqs-node druby://:13501
|
6
|
+
# Stop server:
|
7
|
+
# drbqs-manage signal druby://:13501 server-exit
|
8
|
+
#
|
9
|
+
|
10
|
+
server = DRbQS::Server.new(:port => 13501)
|
11
|
+
server.task_generator do |reg|
|
12
|
+
5.times do |i|
|
13
|
+
reg.create_add(i, :to_s)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
server.set_initialization_task(DRbQS::Task.new(Kernel, :puts, :args => ['hook: initialize']))
|
17
|
+
server.set_finalization_task(DRbQS::Task.new(Kernel, :puts, :args => ['hook: finalize']))
|
18
|
+
server.set_signal_trap
|
19
|
+
server.start
|
20
|
+
server.wait
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,8 +1,12 @@
|
|
1
1
|
#
|
2
2
|
# Usage:
|
3
|
+
# * Start only server
|
3
4
|
# drbqs-server server_def.rb -- 30 50
|
4
5
|
# drbqs-server server_def.rb -- 100 500 --step 100
|
5
6
|
#
|
7
|
+
# * Start server with 2 nodes
|
8
|
+
# drbqs-server examples/sum/server_def.rb --execute-node 2
|
9
|
+
#
|
6
10
|
|
7
11
|
require_relative 'sum.rb'
|
8
12
|
|
@@ -17,7 +21,7 @@ DRbQS.define_server(:check_alive => 5) do |server, argv, opts|
|
|
17
21
|
end_num = (argv[1] || 50).to_i
|
18
22
|
step_num = opts[:step] || 10
|
19
23
|
start_num.step(end_num, step_num) do |i|
|
20
|
-
task = DRbQS::Task.new(Sum.new(i - 10, i), :exec,
|
24
|
+
task = DRbQS::Task.new(Sum.new(i - 10, i), :exec, :note => "#{i-10} to #{i}") do |srv, ret|
|
21
25
|
puts "Receive: #{ret.inspect}"
|
22
26
|
end
|
23
27
|
server.queue.add(task)
|
data/examples/sum/sum.rb
ADDED
File without changes
|
@@ -13,16 +13,15 @@ DRbQS.option_parser do |opt, hash|
|
|
13
13
|
end
|
14
14
|
|
15
15
|
DRbQS.define_server do |server, argv, opts|
|
16
|
-
start_num = (argv[0] || 10).to_i
|
17
|
-
end_num = (argv[1] || 100).to_i
|
16
|
+
start_num = (argv[0] || 10).to_i
|
17
|
+
end_num = (argv[1] || 100).to_i
|
18
18
|
step_num = opts[:step] || 10
|
19
19
|
|
20
20
|
server.task_generator do |reg|
|
21
|
-
start_num.step(
|
21
|
+
(start_num..end_num).step(step_num) do |i|
|
22
22
|
reg.create_add(Sum.new(i - 10, i), :exec) do |srv, ret|
|
23
23
|
puts "Receive: #{ret.inspect}"
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
27
|
-
server.add_task_generator(tgen)
|
28
27
|
end
|
File without changes
|
File without changes
|
File without changes
|
data/lib/drbqs.rb
CHANGED
@@ -13,11 +13,16 @@ require 'drbqs/version'
|
|
13
13
|
require 'drbqs/execute/server_define'
|
14
14
|
require 'drbqs/utility/misc'
|
15
15
|
|
16
|
+
require 'active_support/core_ext/hash/keys'
|
17
|
+
require 'active_support/core_ext/array/extract_options'
|
18
|
+
|
16
19
|
module DRbQS
|
17
20
|
autoload :Server, 'drbqs/server/server'
|
18
21
|
autoload :Node, 'drbqs/node/node'
|
19
22
|
autoload :Config, 'drbqs/config/config'
|
20
23
|
autoload :Setting, 'drbqs/setting/setting'
|
24
|
+
autoload :Temporary, 'drbqs/utility/temporary'
|
25
|
+
autoload :CommandTask, 'drbqs/ext/task'
|
21
26
|
|
22
27
|
ROOT_DEFAULT_PORT = 13500
|
23
28
|
end
|
@@ -20,6 +20,7 @@ HELP
|
|
20
20
|
set(:node, '-n STR', '--node STR', String, 'Set the comma sparated key of nodes.')
|
21
21
|
set(:no_server, '--no-server', 'Not execute server.')
|
22
22
|
set(:no_node, '--no-node', 'Not execute node.')
|
23
|
+
set(:wait_server_finish, "--wait-server-finish", "Wait finish of server process.")
|
23
24
|
set(:information, '-i', '--information', 'Show information.')
|
24
25
|
set(:help, '-h', '--help', 'Show this command help and usage of definition file.') do |opt|
|
25
26
|
$stdout.print opt
|
@@ -26,7 +26,7 @@ HELP
|
|
26
26
|
set(:sftp_host, '--sftp-host HOST', String, 'Set the host of sftp destination.')
|
27
27
|
set(:profile, '--profile', 'Use profile for test exec.')
|
28
28
|
set(:profile_printer, '--profile-printer PRINTER', String,
|
29
|
-
'Set the printer type for profile. The value is
|
29
|
+
'Set the printer type for profile. The value is flat, graph, graphhtml, or calltree.')
|
30
30
|
set(:test, '--test STR', String, 'Execute test.')
|
31
31
|
set(:execute_node, '--execute-node NUM', Integer, 'Execute nodes.')
|
32
32
|
set(:help, '-h', '--help', 'Show this command help and server specific help.') do |opt|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "cgi"
|
2
|
+
|
1
3
|
module DRbQS
|
2
4
|
class ProcessList
|
3
5
|
PROCESS_ROOT_DIRECTORY = 'process'
|
@@ -68,9 +70,9 @@ module DRbQS
|
|
68
70
|
def uri_to_file(uri)
|
69
71
|
case uri
|
70
72
|
when /^druby.*:(\d+)$/
|
71
|
-
"druby_#{Regexp.last_match[1]}.yaml"
|
72
|
-
when /^drbunix:(
|
73
|
-
"
|
73
|
+
"druby_#{CGI.escape(Regexp.last_match[1])}.yaml"
|
74
|
+
when /^drbunix:(.+)$/
|
75
|
+
"drbunix_#{CGI.escape(Regexp.last_match[1])}.yaml"
|
74
76
|
else
|
75
77
|
raise ArgumentError, "Invalid uri of drbqs server: #{uri}"
|
76
78
|
end
|
@@ -80,10 +82,10 @@ module DRbQS
|
|
80
82
|
def file_to_uri(file)
|
81
83
|
s = file.sub(/\.yaml$/, '')
|
82
84
|
case s
|
83
|
-
when /^
|
84
|
-
|
85
|
-
when /^
|
86
|
-
|
85
|
+
when /^druby_(.+)$/
|
86
|
+
"druby://:#{CGI.unescape(Regexp.last_match[1])}"
|
87
|
+
when /^drbunix_(.+)$/
|
88
|
+
"drbunix:#{CGI.unescape(Regexp.last_match[1])}"
|
87
89
|
else
|
88
90
|
raise ArgumentError, "Invalid file name in process list: #{file}"
|
89
91
|
end
|
@@ -5,6 +5,10 @@ module DRbQS
|
|
5
5
|
|
6
6
|
attr_reader :register
|
7
7
|
|
8
|
+
# @param [Symbol] server Symbol of server name
|
9
|
+
# @param [Array] node An array of Symbol which means node name
|
10
|
+
# @param [String] port Port number
|
11
|
+
# @param [IO,nil] io IO object to output
|
8
12
|
def initialize(server, node, port, io = nil)
|
9
13
|
@server = server
|
10
14
|
@node = node
|
@@ -97,14 +101,35 @@ module DRbQS
|
|
97
101
|
private :server_port
|
98
102
|
|
99
103
|
def server_uri(name)
|
104
|
+
uri = nil
|
100
105
|
if ary = get_server_setting(name)
|
101
|
-
|
102
|
-
|
103
|
-
|
106
|
+
data = ary[1]
|
107
|
+
if data[:unix_domain_socket]
|
108
|
+
uri = DRbQS::Misc.uri_drbunix(data[:setting].value.unix.first)
|
109
|
+
else
|
110
|
+
uri = DRbQS::Misc.create_uri(:host => data[:args][0], :port => server_port)
|
111
|
+
end
|
104
112
|
end
|
113
|
+
uri
|
105
114
|
end
|
106
115
|
private :server_uri
|
107
116
|
|
117
|
+
PATH_CPUINFO = "/proc/cpuinfo"
|
118
|
+
|
119
|
+
def get_suitable_process_num
|
120
|
+
n = 0
|
121
|
+
if File.exist?(PATH_CPUINFO)
|
122
|
+
n = File.read(PATH_CPUINFO).lines.count { |l| /^processor/ =~ l }
|
123
|
+
end
|
124
|
+
if n <= 0
|
125
|
+
n = 1
|
126
|
+
puts_progress "Can not determine suitable process number, that is, can not count 'processor' lines in /proc/cpuinfo"
|
127
|
+
end
|
128
|
+
puts_progress "Execute #{n} processes to deal with tasks"
|
129
|
+
n
|
130
|
+
end
|
131
|
+
private :get_suitable_process_num
|
132
|
+
|
108
133
|
def execute_server(server_args)
|
109
134
|
if ary = get_server_setting(@server)
|
110
135
|
name = ary[0].to_s
|
@@ -121,9 +146,18 @@ module DRbQS
|
|
121
146
|
server_setting.value.daemon FileName.create(local_log_directory, "server_execute.log", :position => :middle)
|
122
147
|
end
|
123
148
|
server_setting.set_server_argument(*server_args)
|
124
|
-
|
125
|
-
|
126
|
-
|
149
|
+
if data[:unix_domain_socket]
|
150
|
+
unless server_setting.value.unix
|
151
|
+
server_setting.value.unix DRbQS::Temporary.socket_path
|
152
|
+
end
|
153
|
+
unless server_setting.value.execute_node
|
154
|
+
server_setting.value.execute_node get_suitable_process_num
|
155
|
+
end
|
156
|
+
else
|
157
|
+
server_setting.value.port server_port
|
158
|
+
unless server_setting.set?(:sftp_host)
|
159
|
+
server_setting.value.sftp_host hostname
|
160
|
+
end
|
127
161
|
end
|
128
162
|
setting.parse!
|
129
163
|
unless data[:ssh]
|
@@ -158,12 +192,15 @@ module DRbQS
|
|
158
192
|
setting.value.connect name.to_s
|
159
193
|
end
|
160
194
|
else
|
161
|
-
node_log_dir = FileName.create(local_log_directory,
|
195
|
+
node_log_dir = FileName.create(local_log_directory, "node_#{name}_log", :directory => :self)
|
162
196
|
setting.clear :log_stdout
|
163
197
|
setting.value.log_prefix File.join(node_log_dir, 'node')
|
164
198
|
setting.value.daemon File.join(node_log_dir, 'execute.log')
|
165
199
|
end
|
166
200
|
setting.parse!
|
201
|
+
# TODO:
|
202
|
+
# If node is on localhost then program is terminated here,
|
203
|
+
# because the node is executed as daemon process.
|
167
204
|
setting.exec
|
168
205
|
rescue Exception => err
|
169
206
|
puts_progress "Fail to execute node '#{name.to_s}'"
|
@@ -183,10 +220,16 @@ module DRbQS
|
|
183
220
|
end
|
184
221
|
private :each_node_to_execute
|
185
222
|
|
223
|
+
TIME_INTERVAL_EXECUTE_NODE = 1
|
224
|
+
|
186
225
|
def execute_node
|
187
226
|
uri = server_uri(@server)
|
188
|
-
|
189
|
-
|
227
|
+
if uri && /^drbunix/ !~ uri
|
228
|
+
each_node_to_execute do |name, data|
|
229
|
+
execute_one_node(name, data, uri)
|
230
|
+
# If there is no time interval then drb does not work properly.
|
231
|
+
sleep(TIME_INTERVAL_EXECUTE_NODE)
|
232
|
+
end
|
190
233
|
end
|
191
234
|
end
|
192
235
|
|
@@ -222,25 +265,39 @@ module DRbQS
|
|
222
265
|
end
|
223
266
|
string_name_size = ary.max
|
224
267
|
info[:server].each do |name, data|
|
225
|
-
|
226
|
-
|
227
|
-
|
268
|
+
if data[:unix_domain_socket]
|
269
|
+
prop = "local(unix socket domain)"
|
270
|
+
elsif data[:ssh]
|
271
|
+
prop = "ssh"
|
272
|
+
else
|
273
|
+
prop = "local(ssh)"
|
274
|
+
end
|
275
|
+
str << (info[:default][:server] == name ? " * " : (data[:template] ? " - " : " "))
|
228
276
|
str << sprintf("%- #{string_name_size}s %s\n", name, prop)
|
229
277
|
end
|
230
|
-
str << "
|
278
|
+
str << "\nNode:\n"
|
231
279
|
info[:node].each do |name, data|
|
232
280
|
if data[:type] == :group
|
233
281
|
prop = 'group: ' << data[:args].map(&:to_s).join(',')
|
234
282
|
else
|
235
283
|
prop = (data[:ssh] ? 'ssh' : 'local')
|
236
|
-
if data[:template]
|
237
|
-
prop << ',template'
|
238
|
-
end
|
239
284
|
end
|
240
|
-
|
285
|
+
if info[:default][:node].include?(name)
|
286
|
+
str << " * "
|
287
|
+
elsif data[:type] == :group
|
288
|
+
str << " # "
|
289
|
+
elsif data[:template]
|
290
|
+
str << " - "
|
291
|
+
else
|
292
|
+
str << " "
|
293
|
+
end
|
241
294
|
str << sprintf("%- #{string_name_size}s %s\n", name, prop)
|
242
295
|
end
|
243
|
-
str << "
|
296
|
+
str << "\nDefault port:\n #{info[:default][:port]}"
|
297
|
+
str << "\n\nHelp:\n"
|
298
|
+
str << " ssh: Process over SSH\n"
|
299
|
+
str << " local: Process on localhost\n"
|
300
|
+
str << " *: default, -: template, #: node group"
|
244
301
|
end
|
245
302
|
|
246
303
|
def usage
|
@@ -257,5 +314,39 @@ module DRbQS
|
|
257
314
|
''
|
258
315
|
end
|
259
316
|
end
|
317
|
+
|
318
|
+
def test_consistency
|
319
|
+
# Test existence of default server
|
320
|
+
if @server && !get_server_setting(@server)
|
321
|
+
raise "Invalid default server: #{@server.inspect}"
|
322
|
+
end
|
323
|
+
# Test existences of default nodes
|
324
|
+
if node_names = default_value(:node)
|
325
|
+
all_node_find_p = true
|
326
|
+
node_names.each do |node|
|
327
|
+
unless get_node_data(node)
|
328
|
+
all_node_find_p = false
|
329
|
+
$stderr.puts "Node definition #{node.inspect} does not exist!"
|
330
|
+
end
|
331
|
+
end
|
332
|
+
unless all_node_find_p
|
333
|
+
raise "Invalid default node."
|
334
|
+
end
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
TIME_INTERVAL_WAIT_SERVER_FINISH = 3
|
339
|
+
|
340
|
+
def wait_server_finish
|
341
|
+
if uri = server_uri(@server)
|
342
|
+
puts_progress "Wait finish of server #{uri}"
|
343
|
+
manage = DRbQS::Manage.new(:uri => uri)
|
344
|
+
while manage.server_respond?
|
345
|
+
sleep(TIME_INTERVAL_EXECUTE_NODE)
|
346
|
+
end
|
347
|
+
else
|
348
|
+
puts_progress "We tried to wait finish, however, we can not determine server uri"
|
349
|
+
end
|
350
|
+
end
|
260
351
|
end
|
261
352
|
end
|