drbqs 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
data/bin/drbqs-manage ADDED
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'drbqs'
4
+ require 'optparse'
5
+
6
+ Version = '0.0.1'
7
+
8
+ help_message =<<HELP
9
+ Usage: #{File.basename(__FILE__)} <command> <uri>
10
+ Manage DRbQS server by sending messages.
11
+ <command> is 'exit-signal'.
12
+
13
+ HELP
14
+
15
+ begin
16
+ OptionParser.new(help_message) do |opt|
17
+ opt.on('--debug', 'Set $DEBUG true.') do |v|
18
+ $DEBUG = true
19
+ end
20
+ opt.parse!(ARGV)
21
+ end
22
+ rescue OptionParser::InvalidOption
23
+ $stderr.print <<MES
24
+ error: Invalid Option
25
+ #{help_message}
26
+ MES
27
+ exit(2)
28
+ rescue OptionParser::InvalidArgument
29
+ $stderr.print <<MES
30
+ error: Invalid Argument
31
+ #{help_message}
32
+ MES
33
+ exit(2)
34
+ end
35
+
36
+ if ARGV.size != 2
37
+ raise "Invalid arguments number. Please refer '#{File.basename(__FILE__)} -h'."
38
+ end
39
+
40
+ command = ARGV[0]
41
+ uri = ARGV[1]
42
+
43
+ manage = DRbQS::Manage.new(uri)
44
+
45
+ case command
46
+ when 'exit-signal'
47
+ manage.send_exit_signal
48
+ else
49
+ raise "Invalid command: #{command}"
50
+ end
data/bin/drbqs-node CHANGED
@@ -6,7 +6,9 @@ require 'optparse'
6
6
  Version = '0.0.1'
7
7
 
8
8
  help_message =<<HELP
9
- #{File.basename(__FILE__)} [uri] [process_number]
9
+ Usage: #{File.basename(__FILE__)} [<uri>] [<process_number>] [options ...]
10
+ Start DRbQS nodes connecting to <uri>.
11
+
10
12
  HELP
11
13
 
12
14
  LOG_PREFIX_DEFAULT = 'drbqs_node'
@@ -37,6 +39,9 @@ begin
37
39
  opt.on('--log-stdout', 'Use stdout for outputting logs. This option cancels --log-prefix.') do |v|
38
40
  options[:log_prefix] = nil
39
41
  end
42
+ opt.on('--debug', 'Set $DEBUG true.') do |v|
43
+ $DEBUG = true
44
+ end
40
45
  opt.parse!(ARGV)
41
46
  end
42
47
  rescue OptionParser::InvalidOption
data/bin/drbqs-server CHANGED
@@ -6,13 +6,24 @@ require 'optparse'
6
6
  Version = '0.0.1'
7
7
 
8
8
  help_message =<<HELP
9
- #{File.basename(__FILE__)} server_definition.rb [other files ...]
9
+ Usage: #{File.basename(__FILE__)} <definition.rb> [other files ...] [options ...]
10
+ #{File.basename(__FILE__)} <definition.rb> [other files ...] [options ...] -- [server options ...]
11
+ Start DRbQS server of definition files.
12
+
10
13
  HELP
11
14
 
12
15
  options = {
13
16
  :log_file => STDOUT
14
17
  }
15
18
 
19
+ if n = ARGV.index('--')
20
+ command_argv = ARGV[0..(n - 1)]
21
+ server_argv = ARGV[(n + 1)..-1]
22
+ else
23
+ command_argv = ARGV
24
+ server_argv = []
25
+ end
26
+
16
27
  begin
17
28
  OptionParser.new(help_message) do |opt|
18
29
  opt.on('-p PORT', '--port', Integer, 'Set the port number of server.') do |v|
@@ -32,7 +43,10 @@ begin
32
43
  raise "Invalid log level."
33
44
  end
34
45
  end
35
- opt.parse!(ARGV)
46
+ opt.on('--debug', 'Set $DEBUG true.') do |v|
47
+ $DEBUG = true
48
+ end
49
+ opt.parse!(command_argv)
36
50
  end
37
51
  rescue OptionParser::InvalidOption
38
52
  $stderr.print <<MES
@@ -48,13 +62,14 @@ MES
48
62
  exit(2)
49
63
  end
50
64
 
51
- if ARGV.size == 0 || !File.exist?(ARGV[0])
65
+ if command_argv.size == 0 || !File.exist?(command_argv[0])
52
66
  raise "Invalid arguments. Please refer '#{File.basename(__FILE__)} -h'."
53
67
  end
54
68
 
55
- ARGV.each do |path|
69
+ command_argv.each do |path|
56
70
  puts "load #{path}"
57
71
  load path
58
72
  end
59
73
 
74
+ DRbQS.parse_option(server_argv)
60
75
  DRbQS.start_server(options)
data/drbqs.gemspec CHANGED
@@ -5,14 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{drbqs}
8
- s.version = "0.0.4"
8
+ s.version = "0.0.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Takayuki YAMAGUCHI"]
12
- s.date = %q{2011-03-01}
12
+ s.date = %q{2011-03-05}
13
13
  s.description = %q{Task queuing system over network that is implemented by dRuby.}
14
14
  s.email = %q{d@ytak.info}
15
- s.executables = ["drbqs-node", "drbqs-server"]
15
+ s.executables = ["drbqs-manage", "drbqs-node", "drbqs-server"]
16
16
  s.extra_rdoc_files = [
17
17
  "LICENSE.txt",
18
18
  "README.rdoc"
@@ -25,13 +25,21 @@ Gem::Specification.new do |s|
25
25
  "README.rdoc",
26
26
  "Rakefile",
27
27
  "VERSION",
28
+ "bin/drbqs-manage",
28
29
  "bin/drbqs-node",
29
30
  "bin/drbqs-server",
30
31
  "drbqs.gemspec",
32
+ "example/README.md",
33
+ "example/drbqs-manage-test.rb",
34
+ "example/drbqs-node-test.rb",
35
+ "example/drbqs-server-test.rb",
36
+ "example/sum/server_def.rb",
37
+ "example/sum/sum.rb",
31
38
  "lib/drbqs.rb",
32
39
  "lib/drbqs/acl_file.rb",
33
40
  "lib/drbqs/client.rb",
34
41
  "lib/drbqs/connection.rb",
42
+ "lib/drbqs/manage.rb",
35
43
  "lib/drbqs/message.rb",
36
44
  "lib/drbqs/queue.rb",
37
45
  "lib/drbqs/server.rb",
data/example/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # Examples
2
+
3
+ ## Usage
4
+
5
+ We execute server by the following command:
6
+
7
+ ruby drbqs-server-test.rb sum/server_def.rb
8
+
9
+ For nodes we type the following command:
10
+
11
+ ruby drbqs-client-test.rb -l sum/sum.rb --log-stdout
@@ -0,0 +1,3 @@
1
+ $: << File.expand_path(File.dirname(__FILE__) + '/../lib/')
2
+
3
+ load(File.dirname(__FILE__) + '/../bin/drbqs-manage')
@@ -0,0 +1,3 @@
1
+ $: << File.expand_path(File.dirname(__FILE__) + '/../lib/')
2
+
3
+ load(File.dirname(__FILE__) + '/../bin/drbqs-node')
@@ -0,0 +1,3 @@
1
+ $: << File.expand_path(File.dirname(__FILE__) + '/../lib/')
2
+
3
+ load(File.dirname(__FILE__) + '/../bin/drbqs-server')
@@ -0,0 +1,27 @@
1
+ #
2
+ # Usage:
3
+ # drbqs-server server_def.rb -- 30 50
4
+ # drbqs-server server_def.rb -- 100 500 --step 100
5
+ #
6
+
7
+ require_relative 'sum.rb'
8
+
9
+ DRbQS.option_parser do |opt, hash|
10
+ opt.on('--step NUM', Integer) do |v|
11
+ hash[:step] = v
12
+ end
13
+ end
14
+
15
+ DRbQS.define_server do |server, argv, opts|
16
+ start_num = (argv[0] || 10).to_i
17
+ end_num = (argv[1] || 100).to_i
18
+ step_num = opts[:step] || 10
19
+ start_num.step(end_num, step_num) do |i|
20
+ task = DRbQS::Task.new(Sum.new(i - 10, i), :exec)
21
+ server.queue.add(task)
22
+ end
23
+
24
+ server.set_finish_hook do |serv|
25
+ serv.exit
26
+ end
27
+ end
@@ -0,0 +1,9 @@
1
+ class Sum
2
+ def initialize(start_num, end_num)
3
+ @num = [start_num, end_num]
4
+ end
5
+
6
+ def exec
7
+ (@num[0]..@num[1]).inject(0) { |sum, i| sum += i }
8
+ end
9
+ end
@@ -19,6 +19,8 @@ module DRbQS
19
19
  s = create_id_string
20
20
  @message.write([:connect, s])
21
21
  @id = @message.take([s, Fixnum])[1]
22
+ @logger.info("Get node id: #{@id}") if @logger
23
+ @id
22
24
  end
23
25
 
24
26
  def get_initialization
@@ -36,7 +38,9 @@ module DRbQS
36
38
  case sym
37
39
  when :alive_p
38
40
  @message.write([:alive, @id])
41
+ @logger.info("Send alive signal of node id #{@id}") if @logger
39
42
  when :exit
43
+ @logger.info("Get exit signal") if @logger
40
44
  Kernel.exit
41
45
  end
42
46
  rescue Rinda::RequestExpiredError
@@ -0,0 +1,15 @@
1
+ require 'socket'
2
+
3
+ module DRbQS
4
+
5
+ class Manage
6
+ def initialize(access_uri)
7
+ @access_uri = access_uri
8
+ end
9
+
10
+ def send_exit_signal
11
+ obj = DRbObject.new_with_uri(@access_uri)
12
+ obj[:message].write([:exit_server, "Command of #{Socket.gethostname}"])
13
+ end
14
+ end
15
+ end
data/lib/drbqs/message.rb CHANGED
@@ -54,14 +54,17 @@ module DRbQS
54
54
  end
55
55
 
56
56
  def manage_message(mes, arg)
57
- @logger.debug("Get message") { [mes, arg] } if @logger
57
+ @logger.info("Get message") { [mes, arg] } if @logger
58
58
  case mes
59
59
  when :connect
60
60
  a = [arg, @node_list.get_new_id(arg)]
61
- @logger.debug("New node") { a } if @logger
61
+ @logger.info("New node") { a } if @logger
62
62
  @message.write(a)
63
63
  when :alive
64
64
  @node_list.set_alive(arg)
65
+ when :exit_server
66
+ @logger.info("Get exit message from #{arg.to_s}") if @logger
67
+ return :exit_server
65
68
  else
66
69
  puts "Invalid message from #{arg.to_s}"
67
70
  end
data/lib/drbqs/server.rb CHANGED
@@ -67,7 +67,7 @@ module DRbQS
67
67
 
68
68
  def check_connection(force = nil)
69
69
  if force || @check_alive.significant_interval?
70
- @logger.info("Check connection") if @logger
70
+ @logger.debug("Check connection") if @logger
71
71
  @message.check_connection
72
72
  @check_alive.set_checking
73
73
  end
@@ -118,13 +118,26 @@ module DRbQS
118
118
  Kernel.exit
119
119
  end
120
120
 
121
+ def set_signal_trap
122
+ Signal.trap(:TERM) do
123
+ self.exit
124
+ end
125
+ end
126
+
127
+ def check_message
128
+ if @message.get_message == :exit_server
129
+ self.exit
130
+ end
131
+ end
132
+ private :check_message
133
+
121
134
  def wait
122
135
  loop do
123
- @message.get_message
136
+ check_message
124
137
  check_connection
125
138
  count_results = @queue.get_result
126
139
  exec_hook
127
- @logger.info("Calculating tasks: #{@queue.calculating_task_number}") if @logger
140
+ @logger.debug("Calculating tasks: #{@queue.calculating_task_number}") if @logger
128
141
  if count_results <= 1
129
142
  sleep(WAIT_NEW_RESULT)
130
143
  end
@@ -1,21 +1,71 @@
1
1
  module DRbQS
2
2
 
3
- @@server_create = nil
3
+ class ServerDefinition
4
+ HELP_MESSAGE =<<HELP
5
+ [Server specific options]
6
+ These options are separated by '--' from command options.
4
7
 
5
- def self.define_server(&block)
6
- if @@server_create
7
- raise ArgumentError, "The server has already defined."
8
+ HELP
9
+
10
+ def initialize
11
+ @server_create = nil
12
+ @option_parse = nil
13
+ @opts = {}
14
+ @argv = nil
15
+ end
16
+
17
+ def define_server(&block)
18
+ if @server_create
19
+ raise ArgumentError, "The server has already defined."
20
+ end
21
+ @server_create = block
22
+ end
23
+
24
+ def option_parser(&block)
25
+ if @option_parse
26
+ raise ArgumentError, "The options parser has already defined."
27
+ end
28
+ @option_parse = block
29
+ end
30
+
31
+ def parse_option(opt_argv)
32
+ if @option_parse
33
+ OptionParser.new(HELP_MESSAGE) do |opt|
34
+ @option_parse.call(opt, @opts)
35
+ opt.parse!(opt_argv)
36
+ end
37
+ end
38
+ @argv = opt_argv
39
+ end
40
+
41
+ def start_server(options)
42
+ unless @server_create
43
+ raise "Can not get server definition."
44
+ end
45
+ server = DRbQS::Server.new(options)
46
+ @server_create.call(server, @argv, @opts)
47
+ # @server_create.call(server)
48
+ server.set_signal_trap
49
+ server.start
50
+ server.wait
8
51
  end
9
- @@server_create = block
52
+ end
53
+
54
+ @@server_def = ServerDefinition.new
55
+
56
+ def self.define_server(&block)
57
+ @@server_def.define_server(&block)
58
+ end
59
+
60
+ def self.option_parser(&block)
61
+ @@server_def.option_parser(&block)
62
+ end
63
+
64
+ def self.parse_option(opt_argv)
65
+ @@server_def.parse_option(opt_argv)
10
66
  end
11
67
 
12
68
  def self.start_server(options)
13
- unless @@server_create
14
- raise "Can not get server definition."
15
- end
16
- server = DRbQS::Server.new(options)
17
- @@server_create.call(server)
18
- server.start
19
- server.wait
69
+ @@server_def.start_server(options)
20
70
  end
21
71
  end
data/lib/drbqs.rb CHANGED
@@ -11,6 +11,7 @@ require 'drbqs/server_define'
11
11
  module DRbQS
12
12
  autoload :Server, 'drbqs/server'
13
13
  autoload :Client, 'drbqs/client'
14
+ autoload :Manage, 'drbqs/manage'
14
15
 
15
16
  ROOT_DEFAULT_PORT = 13500
16
17
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: drbqs
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.4
5
+ version: 0.0.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Takayuki YAMAGUCHI
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-01 00:00:00 +09:00
13
+ date: 2011-03-05 00:00:00 +09:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -71,6 +71,7 @@ dependencies:
71
71
  description: Task queuing system over network that is implemented by dRuby.
72
72
  email: d@ytak.info
73
73
  executables:
74
+ - drbqs-manage
74
75
  - drbqs-node
75
76
  - drbqs-server
76
77
  extensions: []
@@ -86,13 +87,21 @@ files:
86
87
  - README.rdoc
87
88
  - Rakefile
88
89
  - VERSION
90
+ - bin/drbqs-manage
89
91
  - bin/drbqs-node
90
92
  - bin/drbqs-server
91
93
  - drbqs.gemspec
94
+ - example/README.md
95
+ - example/drbqs-manage-test.rb
96
+ - example/drbqs-node-test.rb
97
+ - example/drbqs-server-test.rb
98
+ - example/sum/server_def.rb
99
+ - example/sum/sum.rb
92
100
  - lib/drbqs.rb
93
101
  - lib/drbqs/acl_file.rb
94
102
  - lib/drbqs/client.rb
95
103
  - lib/drbqs/connection.rb
104
+ - lib/drbqs/manage.rb
96
105
  - lib/drbqs/message.rb
97
106
  - lib/drbqs/queue.rb
98
107
  - lib/drbqs/server.rb
@@ -117,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
126
  requirements:
118
127
  - - ">="
119
128
  - !ruby/object:Gem::Version
120
- hash: 1097812397295030278
129
+ hash: 3980203744145532744
121
130
  segments:
122
131
  - 0
123
132
  version: "0"