drbqs 0.0.14 → 0.0.15

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 (101) hide show
  1. data/VERSION +1 -1
  2. data/bin/drbqs-execute +6 -0
  3. data/bin/drbqs-manage +2 -2
  4. data/bin/drbqs-node +2 -2
  5. data/bin/drbqs-server +2 -2
  6. data/bin/drbqs-ssh +2 -2
  7. data/drbqs.gemspec +53 -16
  8. data/example/error_server/error.rb +6 -0
  9. data/example/error_server/server_def.rb +7 -0
  10. data/example/{error → error_task}/error.rb +0 -0
  11. data/example/{error → error_task}/server_def.rb +0 -0
  12. data/example/sum2/execute_def.rb +27 -0
  13. data/lib/drbqs/command_line/argument.rb +29 -0
  14. data/lib/drbqs/command_line/command_base.rb +81 -0
  15. data/lib/drbqs/command_line/command_execute.rb +33 -0
  16. data/lib/drbqs/command_line/command_line.rb +19 -0
  17. data/lib/drbqs/command_line/command_manage.rb +34 -0
  18. data/lib/drbqs/command_line/command_node.rb +26 -0
  19. data/lib/drbqs/command_line/command_server.rb +41 -0
  20. data/lib/drbqs/command_line/command_ssh.rb +51 -0
  21. data/lib/drbqs/command_line/option_setting.rb +42 -0
  22. data/lib/drbqs/execute/process_define.rb +213 -0
  23. data/lib/drbqs/execute/register.rb +147 -0
  24. data/lib/drbqs/{utility → execute}/server_define.rb +7 -14
  25. data/lib/drbqs/manage/execute_node.rb +4 -2
  26. data/lib/drbqs/manage/manage.rb +23 -16
  27. data/lib/drbqs/manage/send_signal.rb +31 -4
  28. data/lib/drbqs/manage/ssh_execute.rb +50 -6
  29. data/lib/drbqs/manage/ssh_shell.rb +95 -50
  30. data/lib/drbqs/node/connection.rb +1 -1
  31. data/lib/drbqs/node/node.rb +67 -17
  32. data/lib/drbqs/node/state.rb +109 -0
  33. data/lib/drbqs/node/task_client.rb +7 -7
  34. data/lib/drbqs/server/history.rb +16 -0
  35. data/lib/drbqs/server/message.rb +80 -15
  36. data/lib/drbqs/server/node_list.rb +16 -3
  37. data/lib/drbqs/server/prof.rb +48 -0
  38. data/lib/drbqs/server/queue.rb +20 -2
  39. data/lib/drbqs/server/server.rb +112 -70
  40. data/lib/drbqs/server/server_hook.rb +26 -6
  41. data/lib/drbqs/server/test/node.rb +34 -0
  42. data/lib/drbqs/server/test/server.rb +74 -0
  43. data/lib/drbqs/setting/base.rb +120 -0
  44. data/lib/drbqs/setting/data_container.rb +39 -0
  45. data/lib/drbqs/setting/execute.rb +71 -0
  46. data/lib/drbqs/setting/manage.rb +163 -0
  47. data/lib/drbqs/setting/node.rb +84 -0
  48. data/lib/drbqs/setting/server.rb +230 -0
  49. data/lib/drbqs/setting/setting.rb +14 -0
  50. data/lib/drbqs/setting/source.rb +220 -0
  51. data/lib/drbqs/setting/ssh.rb +165 -0
  52. data/lib/drbqs/task/task_generator.rb +4 -2
  53. data/lib/drbqs/utility/misc.rb +15 -1
  54. data/lib/drbqs/utility/temporary.rb +4 -2
  55. data/lib/drbqs.rb +3 -2
  56. data/spec/command_line/command_base_spec.rb +47 -0
  57. data/spec/{utility/command_line → command_line}/commands_spec.rb +3 -3
  58. data/spec/command_line/option_setting_spec.rb +29 -0
  59. data/spec/execute/def/execute1.rb +24 -0
  60. data/spec/execute/def/no_def.rb +2 -0
  61. data/spec/execute/process_define_spec.rb +167 -0
  62. data/spec/execute/register_spec.rb +77 -0
  63. data/spec/{utility → execute}/server_define_spec.rb +0 -0
  64. data/spec/integration_test/01_basic_usage_spec.rb +1 -1
  65. data/spec/integration_test/02_use_generator_spec.rb +1 -1
  66. data/spec/integration_test/03_use_temporary_file_spec.rb +1 -1
  67. data/spec/integration_test/04_use_unix_domain_spec.rb +1 -1
  68. data/spec/integration_test/05_server_exit_signal_spec.rb +1 -1
  69. data/spec/integration_test/06_node_exit_after_task_spec.rb +1 -1
  70. data/spec/integration_test/07_command_server_with_node_spec.rb +19 -16
  71. data/spec/integration_test/08_shutdown_unused_nodes_spec.rb +38 -0
  72. data/spec/integration_test/09_server_process_data_spec.rb +74 -0
  73. data/spec/integration_test/10_test_server_spec.rb +18 -0
  74. data/spec/integration_test/definition/task_obj_definition.rb +14 -0
  75. data/spec/manage/send_signal_spec.rb +8 -0
  76. data/spec/manage/ssh_shell_spec.rb +1 -1
  77. data/spec/node/state_spec.rb +148 -0
  78. data/spec/node/task_client_spec.rb +15 -0
  79. data/spec/server/history_spec.rb +51 -20
  80. data/spec/server/message_spec.rb +7 -2
  81. data/spec/server/node_list_spec.rb +1 -1
  82. data/spec/server/queue_spec.rb +93 -4
  83. data/spec/server/server_hook_spec.rb +62 -0
  84. data/spec/setting/base_spec.rb +35 -0
  85. data/spec/setting/data_container_spec.rb +92 -0
  86. data/spec/setting/execute_spec.rb +51 -0
  87. data/spec/setting/manage_spec.rb +63 -0
  88. data/spec/setting/node_spec.rb +43 -0
  89. data/spec/setting/server_spec.rb +46 -0
  90. data/spec/setting/source_spec.rb +245 -0
  91. data/spec/spec_helper.rb +17 -10
  92. data/spec/utility/argument_spec.rb +7 -7
  93. metadata +179 -146
  94. data/lib/drbqs/utility/argument.rb +0 -27
  95. data/lib/drbqs/utility/command_line/command_base.rb +0 -27
  96. data/lib/drbqs/utility/command_line/command_manage.rb +0 -121
  97. data/lib/drbqs/utility/command_line/command_node.rb +0 -103
  98. data/lib/drbqs/utility/command_line/command_server.rb +0 -165
  99. data/lib/drbqs/utility/command_line/command_ssh.rb +0 -126
  100. data/lib/drbqs/utility/command_line.rb +0 -15
  101. data/spec/utility/command_line/command_base_spec.rb +0 -33
@@ -0,0 +1,39 @@
1
+ module DRbQS
2
+ class Setting
3
+ class Source
4
+ class DataContainer < BasicObject
5
+ attr_accessor :argument
6
+ attr_reader :__data__
7
+
8
+ def initialize(array_class)
9
+ @argument = []
10
+ @__data__ = {}
11
+ @__array__ = array_class
12
+ end
13
+
14
+ def method_missing(name, *args)
15
+ if args.size > 0
16
+ s = name.to_s
17
+ key = (/=$/ =~ s ? s[0...-1].intern : name.intern)
18
+ @__data__[key] = (@__array__ === args[0] ? args[0] : args)
19
+ else
20
+ @__data__[name]
21
+ end
22
+ end
23
+
24
+ def __delete__(name)
25
+ @__data__.delete(name.intern)
26
+ end
27
+ end
28
+
29
+ def self.clone_container(obj)
30
+ cl = DRbQS::Setting::Source::DataContainer.new(Array)
31
+ cl.argument = obj.argument.clone
32
+ obj.__data__.each do |key, val|
33
+ cl.__data__[key] = val
34
+ end
35
+ cl
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,71 @@
1
+ require 'drbqs/execute/process_define'
2
+
3
+ module DRbQS
4
+ class Setting
5
+ class Execute < DRbQS::Setting::Base
6
+ attr_accessor :server_argument
7
+
8
+ def initialize
9
+ super(:all_keys_defined => true) do
10
+ [:port, :server, :node].each do |key|
11
+ register_key(key, :check => 1)
12
+ end
13
+ [:no_server, :no_node, :information, :help].each do |key|
14
+ register_key(key, :bool => true)
15
+ end
16
+ set_argument_condition(:<=, 1)
17
+ end
18
+ @server_argument = []
19
+ end
20
+
21
+ # If there are invalid arguments,
22
+ # this method raises an error.
23
+ def parse!
24
+ super
25
+ @port = get_first(:port) do |val|
26
+ val.to_i
27
+ end
28
+ @no_server = get_first(:no_server)
29
+ @server = get_first(:server) do |val|
30
+ val.intern
31
+ end
32
+ @no_node = get_first(:no_node)
33
+ @node = get_first(:node) do |val|
34
+ val.split(',').map do |s|
35
+ s.intern
36
+ end
37
+ end
38
+ @definition = get_argument[0]
39
+ if get_first(:help)
40
+ @mode = :help
41
+ elsif get_first(:information)
42
+ @mode = :information
43
+ else
44
+ @mode = nil
45
+ end
46
+ if !@output_help && !@definition
47
+ raise DRbQS::Setting::InvalidArgument, "Definition file must be specified."
48
+ end
49
+ end
50
+
51
+ def exec(io = nil)
52
+ process_def = DRbQS::ProcessDefinition.new(@server, @node, @port, io)
53
+ process_def.load(@definition) if @definition
54
+ case @mode
55
+ when :help
56
+ io.puts process_def.usage if io
57
+ when :information
58
+ io.puts process_def.information_string if io
59
+ else
60
+ unless @no_server
61
+ process_def.execute_server(@server_argument)
62
+ end
63
+ unless @no_node
64
+ process_def.execute_node
65
+ end
66
+ end
67
+ true
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,163 @@
1
+ module DRbQS
2
+ class Setting
3
+ class Manage < DRbQS::Setting::Base
4
+ include DRbQS::Command::Argument
5
+
6
+ def initialize
7
+ super(:all_keys_defined => true) do
8
+ set_argument_condition(:>, 0)
9
+ end
10
+ end
11
+
12
+ def check_all_arguments
13
+ case @mode
14
+ when 'initialize'
15
+ check_argument_size(@argv, :>=, 0, :<=, 1)
16
+ when 'process'
17
+ check_argument_size(@argv, :>=, 0, :<=, 1)
18
+ if @argv[0] && !['clear', 'list'].include?(@argv[0])
19
+ raise DRbQS::Setting::InvalidArgument, "Invalid command 'process #{@argv[0]}'"
20
+ end
21
+ when 'status', 'history'
22
+ check_argument_size(@argv, :==, 1)
23
+ when 'signal'
24
+ case @argv[1]
25
+ when 'server-exit'
26
+ check_argument_size(@argv, :==, 2)
27
+ when 'node-exit-after-task', 'node-wake', 'node-sleep'
28
+ check_argument_size(@argv, :==, 3)
29
+ else
30
+ raise DRbQS::Setting::InvalidArgument, "Invalid signal type '#{@argv[1]}'"
31
+ end
32
+ when 'send'
33
+ check_argument_size(@argv, :==, 3)
34
+ case @argv[0]
35
+ when 'string'
36
+ unless @argv[2]
37
+ raise DRbQS::Setting::InvalidArgument, "String data is not set"
38
+ end
39
+ when 'file'
40
+ unless File.exist?(@argv[2])
41
+ raise DRbQS::Setting::InvalidArgument, "File '#{@argv[2]}' does not exist"
42
+ end
43
+ else
44
+ raise DRbQS::Setting::InvalidArgument, "Invalid option '#{argv[2]}' for 'send'"
45
+ end
46
+ else
47
+ raise DRbQS::Setting::InvalidArgument, "Invalid command '#{@mode}'"
48
+ end
49
+ end
50
+ private :check_all_arguments
51
+
52
+ # If there are invalid arguments,
53
+ # this method raises an error.
54
+ def parse!
55
+ super
56
+ ary = get_argument
57
+ @mode = ary[0].to_s
58
+ @argv = ary[1..-1]
59
+ check_all_arguments
60
+ end
61
+
62
+ def command_initialize
63
+ @manage.set_home_directory(@argv[0])
64
+ @manage.create_config
65
+ end
66
+ private :command_initialize
67
+
68
+ def command_process(io)
69
+ if @argv[0] == 'clear'
70
+ @manage.clear_process
71
+ return true
72
+ end
73
+ result = ''
74
+ list = @manage.list_process
75
+ result << "Server\n"
76
+ list[:server].each do |uri, data|
77
+ result << "#{uri}\n"
78
+ data.each do |k, v|
79
+ result << sprintf(" %-10s %s\n", k, v)
80
+ end
81
+ end
82
+ result << "\nNode\n"
83
+ list[:node].each do |pid, data|
84
+ result << "#{pid}\n"
85
+ data.each do |k, v|
86
+ result << sprintf(" %-10s %s\n", k, v)
87
+ end
88
+ end
89
+ io.print result if io
90
+ end
91
+ private :command_process
92
+
93
+ def request_to_server(io, method_name)
94
+ @manage.set_uri(@argv[0])
95
+ if status = @manage.__send__(method_name)
96
+ io.puts status if io
97
+ end
98
+ end
99
+ private :request_to_server
100
+
101
+ def command_status(io)
102
+ request_to_server(io, :get_status)
103
+ end
104
+ private :command_status
105
+
106
+ def command_history
107
+ request_to_server(io, :get_history)
108
+ end
109
+ private :command_history
110
+
111
+ def signal_to_node(method_name)
112
+ node_id = @argv[2].to_i
113
+ @manage.__send__(method_name, node_id)
114
+ end
115
+ private :signal_to_node
116
+
117
+ def command_signal
118
+ @manage.set_uri(@argv[0])
119
+ case @argv[1]
120
+ when 'server-exit'
121
+ @manage.send_exit_signal
122
+ when 'node-exit-after-task'
123
+ signal_to_node(:send_node_exit_after_task)
124
+ when 'node-wake'
125
+ signal_to_node(:send_node_wake)
126
+ when 'node-sleep'
127
+ signal_to_node(:send_node_sleep)
128
+ end
129
+ end
130
+ private :command_signal
131
+
132
+ def command_send
133
+ @manage.set_uri(@argv[1])
134
+ case @argv[0]
135
+ when 'string'
136
+ data = @argv[2]
137
+ when 'file'
138
+ data = File.read(@argv[2])
139
+ end
140
+ @manage.send_data(data)
141
+ end
142
+ private :command_send
143
+
144
+ def exec(io = nil)
145
+ @manage = DRbQS::Manage.new
146
+ case @mode
147
+ when 'initialize'
148
+ command_initialize
149
+ when 'process'
150
+ command_process(io)
151
+ when 'status'
152
+ command_status(io)
153
+ when 'history'
154
+ command_history(io)
155
+ when 'signal'
156
+ command_signal
157
+ when 'send'
158
+ command_send
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,84 @@
1
+ module DRbQS
2
+ class Setting
3
+ class Node < DRbQS::Setting::Base
4
+ LOG_PREFIX_DEFAULT = 'drbqs_node'
5
+
6
+ def initialize
7
+ super(:all_keys_defined => true, :log_level => true, :daemon => true) do
8
+ register_key(:load, :check => [:>, 0], :add => true)
9
+ register_key(:process, :check => 1, :default => [1])
10
+ register_key(:loadavg, :check => 1)
11
+ register_key(:log_prefix, :check => 1, :default => [LOG_PREFIX_DEFAULT])
12
+ register_key(:log_stdout, :bool => true)
13
+ register_key(:connect, :check => 1)
14
+ set_argument_condition(:==, 1)
15
+ end
16
+ end
17
+
18
+ def preprocess!
19
+ if connect = get_first(:connect)
20
+ value.argument.unshift(connect)
21
+ clear(:connect)
22
+ end
23
+ end
24
+ private :preprocess!
25
+
26
+ # If there are invalid arguments,
27
+ # this method raises an error.
28
+ def parse!
29
+ super
30
+ parse_load
31
+ parse_loadavg
32
+ if !get(:log_stdout)
33
+ @options[:log_prefix] = get_first(:log_prefix) do |val|
34
+ str = val.to_s
35
+ str += 'out' if /\/$/ =~ str
36
+ str
37
+ end
38
+ end
39
+ @process_num = get_first(:process)
40
+ @uri = get_argument[0]
41
+ end
42
+
43
+ def parse_load
44
+ @options[:load] = []
45
+ get(:load).to_a.each do |path|
46
+ @options[:load] << File.expand_path(path)
47
+ end
48
+ end
49
+ private :parse_load
50
+
51
+ def parse_loadavg
52
+ @options[:node_opts] = {}
53
+ if args = get(:loadavg)
54
+ max_loadavg, sleep_time = args[0].split(':', -1)
55
+ @options[:node_opts][:max_loadavg] = max_loadavg && max_loadavg.size > 0 ? max_loadavg.to_f : nil
56
+ @options[:node_opts][:sleep_time] = sleep_time && sleep_time.size > 0 ? sleep_time.to_i : nil
57
+ end
58
+ end
59
+ private :parse_loadavg
60
+
61
+ def exec(io = nil)
62
+ return true if exec_as_daemon
63
+
64
+ @options[:load].each do |path|
65
+ io.puts "load #{path}" if io
66
+ unless File.exist?(path)
67
+ raise DRbQS::Setting::InvalidArgument, "#{path} does not exist."
68
+ end
69
+ load path
70
+ end
71
+
72
+ if io
73
+ io.puts "Connect to #{@uri}"
74
+ io.puts "Execute #{@process_num} processes"
75
+ end
76
+
77
+ exec_node = DRbQS::ExecuteNode.new(@uri, @options[:log_prefix], @options[:log_level], @options[:node_opts])
78
+ exec_node.execute(@process_num)
79
+ exec_node.wait
80
+ true
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,230 @@
1
+ module DRbQS
2
+ class Setting
3
+ class Server < DRbQS::Setting::Base
4
+ include DRbQS::Misc
5
+
6
+ NODE_INTERVAL_TIME = 1
7
+
8
+ def initialize
9
+ super(:all_keys_defined => true, :log_level => true, :daemon => true) do
10
+ [:port, :unix, :acl, :sftp_user, :sftp_host,
11
+ :profile_printer, :test, :execute_node].each do |key|
12
+ register_key(key, :check => 1)
13
+ end
14
+ register_key(:log_file, :check => 1, :default => [STDOUT])
15
+ register_key(:profile, :bool => true)
16
+ register_key(:load, :add => true)
17
+ register_key(:help, :bool => true)
18
+ set_argument_condition(:>, 0)
19
+ end
20
+ @server_argument = DRbQS::Setting::Source.new(nil)
21
+ @command_type = :server_start
22
+ @test_opts = {}
23
+ @execute_node_number = nil
24
+ end
25
+
26
+ def parse_test
27
+ @test_opts[:profile] = get(:profile)
28
+ @test_opts[:printer] = get_first(:printer) do |val|
29
+ val.intern
30
+ end
31
+ if test = get_first(:test)
32
+ @command_type = "test_#{test.to_s}"
33
+ end
34
+ end
35
+ private :parse_test
36
+
37
+ def parse_execute_node
38
+ @execute_node_number = get_first(:execute_node) do |val|
39
+ val.to_i
40
+ end
41
+ end
42
+ private :parse_execute_node
43
+
44
+ def preprocess!
45
+ if files = get(:load)
46
+ value.argument.concat(files)
47
+ clear(:load)
48
+ end
49
+ end
50
+ private :preprocess!
51
+
52
+ def parse!
53
+ if get(:help)
54
+ @command_type = :help
55
+ return true
56
+ end
57
+ super
58
+ parse_test
59
+ parse_execute_node
60
+ @options[:port] = get_first(:port) do |val|
61
+ val.to_i
62
+ end
63
+ @options[:unix] = get_first(:unix)
64
+ @options[:acl] = get_first(:acl)
65
+ @options[:sftp_user] = get_first(:sftp_user)
66
+ @options[:sftp_host] = get_first(:sftp_host)
67
+ @options[:log_file] = get_first(:log_file)
68
+ @options.delete_if do |key, val|
69
+ !val
70
+ end
71
+ end
72
+
73
+ def set_server_argument(*args)
74
+ @server_argument.set_argument(*args)
75
+ end
76
+
77
+ def command_line_argument(escape = nil)
78
+ ary = super(escape)
79
+ server_args = @server_argument.command_line_argument(escape)
80
+ if server_args.size > 0
81
+ ary << '--'
82
+ ary.concat(server_args)
83
+ end
84
+ ary
85
+ end
86
+
87
+ def command_test(io)
88
+ args = @command_type.split('_')[1].split(',')
89
+ type = args.shift.intern
90
+ limit = args[0] ? args[0].to_i : nil
91
+ server = DRbQS.create_test_server(@options)
92
+ case type
93
+ when :task
94
+ server.test_task_generator(:limit => limit, :progress => true)
95
+ when :exec
96
+ data = server.test_exec(:limit => limit, :profile => @test_opts[:profile], :printer => @test_opts[:printer])
97
+ if io
98
+ s = sprintf("Results: %d tasks; total %.4fs", data[:task], data[:end] - data[:start])
99
+ s << sprintf("; %.4fs per one task", (data[:end] - data[:start]) / data[:task]) if data[:task] > 0
100
+ s << "\nOutput the profile data to #{data[:profile]}" if data[:profile]
101
+ io.puts s
102
+ end
103
+ else
104
+ raise DRbQS::Setting::InvalidArgument, "Not yet implemented test '#{type}'"
105
+ end
106
+ end
107
+ private :command_test
108
+
109
+ def command_start_server
110
+ DRbQS.start_server(@options)
111
+ end
112
+ private :command_start_server
113
+
114
+ def current_server_uri
115
+ DRbQS::Misc.create_uri(@options)
116
+ end
117
+ private :current_server_uri
118
+
119
+ def wait_server_process(uri, server_pid = nil)
120
+ manage = DRbQS::Manage.new(:uri => uri)
121
+ unless manage.wait_server_process(server_pid)
122
+ raise "The process of the server of #{uri} does not exist."
123
+ end
124
+ rescue DRbQS::Manage::NoServerRespond => err
125
+ raise DRbQS::Manage::NoServerRespond, "The server of #{uri} does not respond."
126
+ end
127
+ private :wait_server_process
128
+
129
+ def execute_node_and_wait(uri)
130
+ node_log_file = nil
131
+ unless IO === @options[:log_file]
132
+ node_log_file = FileName.create(@options[:log_file], :add => :always, :position => :middle, :delimiter => '', :format => "_node_%02d")
133
+ end
134
+ exec_node = DRbQS::ExecuteNode.new(uri, node_log_file, @options[:log_level])
135
+ exec_node.execute(@execute_node_number, NODE_INTERVAL_TIME)
136
+ exec_node.wait
137
+ end
138
+ private :execute_node_and_wait
139
+
140
+ def command_server_with_nodes
141
+ server_pid = fork do
142
+ begin
143
+ DRbQS.start_server(@options)
144
+ rescue SystemExit
145
+ rescue Exception => err
146
+ $stderr.puts "*** Error occurs on server process #{Process.pid}. ***"
147
+ output_error(err)
148
+ end
149
+ end
150
+ uri = current_server_uri
151
+ wait_server_process(uri, server_pid)
152
+ execute_node_and_wait(uri)
153
+ end
154
+ private :command_server_with_nodes
155
+
156
+ def command_server_help(io)
157
+ if io
158
+ begin
159
+ get_argument.each do |path|
160
+ if File.exist?(path)
161
+ Kernel.load(path)
162
+ end
163
+ end
164
+ if mes = DRbQS.option_help_message
165
+ io.print "\n" << mes
166
+ end
167
+ rescue => err
168
+ new_err = err.class.new("Error in loading #{path}: #{err.to_s}")
169
+ new_err.set_backtrace(err.backtrace)
170
+ raise new_err
171
+ end
172
+ end
173
+ end
174
+ private :command_server_help
175
+
176
+ def setup_arguments
177
+ get_argument.each do |path|
178
+ if File.exist?(path)
179
+ Kernel.load(path)
180
+ else
181
+ raise DRbQS::Setting::InvalidArgument, "#{path} does not exist."
182
+ end
183
+ end
184
+ unless @options[:acl]
185
+ @options[:acl] = DRbQS::Config.new.get_acl_file
186
+ end
187
+ DRbQS.parse_option(@server_argument.get_argument)
188
+ end
189
+ private :setup_arguments
190
+
191
+ def fork_daemon_process
192
+ if @__daemon__
193
+ case @command_type
194
+ when /^test/
195
+ raise DRbQS::Setting::InvalidArgument, "Test of server does not support daemon"
196
+ else
197
+ fork do
198
+ exec_as_daemon
199
+ end
200
+ uri = current_server_uri
201
+ wait_server_process(uri)
202
+ end
203
+ true
204
+ else
205
+ nil
206
+ end
207
+ end
208
+ private :fork_daemon_process
209
+
210
+ def exec(io = nil)
211
+ if @command_type == :help
212
+ command_server_help(io)
213
+ elsif !fork_daemon_process
214
+ setup_arguments
215
+ case @command_type
216
+ when /^test/
217
+ command_test(io)
218
+ else
219
+ if @execute_node_number
220
+ command_server_with_nodes
221
+ else
222
+ command_start_server
223
+ end
224
+ end
225
+ end
226
+ true
227
+ end
228
+ end
229
+ end
230
+ end
@@ -0,0 +1,14 @@
1
+ require 'drbqs/command_line/argument'
2
+ require 'drbqs/setting/data_container'
3
+ require 'drbqs/setting/source'
4
+ require 'drbqs/setting/base'
5
+
6
+ module DRbQS
7
+ class Setting
8
+ autoload :Server, 'drbqs/setting/server'
9
+ autoload :Node, 'drbqs/setting/node'
10
+ autoload :Manage, 'drbqs/setting/manage'
11
+ autoload :SSH, 'drbqs/setting/ssh'
12
+ autoload :Execute, 'drbqs/setting/execute'
13
+ end
14
+ end