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