drbqs 0.0.4 → 0.0.5

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