drbqs 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,6 +1,62 @@
1
1
  = drbqs
2
2
 
3
- Description goes here.
3
+ Task queuing system over network that is implemented by dRuby.
4
+
5
+ == Usage
6
+
7
+ === Preparation
8
+
9
+ We prepare a class to send tasks over network,
10
+ which has data and a method to deal with tasks.
11
+
12
+ We make sum.rb as the following.
13
+
14
+ class Sum
15
+ def initialize(start_num, end_num)
16
+ @num = [start_num, end_num]
17
+ end
18
+
19
+ def exec
20
+ (@num[0]..@num[1]).inject(0) { |sum, i| sum += i }
21
+ end
22
+ end
23
+
24
+ The Sum class calculates sum of numbers from start_num to end_num.
25
+ The task we want to calculate is summation of numbers.
26
+
27
+ === Start server
28
+
29
+ We make server.rb as the following.
30
+
31
+ require_relative 'sum.rb'
32
+
33
+ DRbQS.define_server do |server|
34
+ 10.step(100, 10) do |i|
35
+ task = DRbQS::Task.new(Sum.new(i - 10, i), :exec)
36
+ server.queue.add(task)
37
+ end
38
+
39
+ server.set_finish_hook do |serv|
40
+ serv.exit
41
+ end
42
+ end
43
+
44
+ In terminal, we load server.rb and execute server of drbqs.
45
+
46
+ drbqs-server server.rb -p 13500
47
+
48
+ === Start node and connect server
49
+
50
+ We type in terminal.
51
+
52
+ drbqs-node druby://localhost:13500/
53
+
54
+ To use two cpu cores we execute two processes by the following.
55
+
56
+ drbqs-node 2 druby://localhost:13500/
57
+
58
+ Then, if it succeeds, the calculation starts.
59
+ If it finishes, the server and node ends.
4
60
 
5
61
  == Contributing to drbqs
6
62
 
data/Rakefile CHANGED
@@ -16,7 +16,7 @@ Jeweler::Tasks.new do |gem|
16
16
  gem.homepage = "http://github.com/ytaka/drbqs"
17
17
  gem.license = "GPL3"
18
18
  gem.summary = "dRuby Queueing System"
19
- gem.description = "Queuing system over network that is implemented by dRuby."
19
+ gem.description = "Task queuing system over network that is implemented by dRuby."
20
20
  gem.email = "d@ytak.info"
21
21
  gem.authors = ["Takayuki YAMAGUCHI"]
22
22
  # Include your dependencies below. Runtime dependencies are required when using your gem,
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/bin/drbqs-server ADDED
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'drbqs'
4
+ require 'optparse'
5
+
6
+ Version = '0.0.1'
7
+
8
+ help_message =<<HELP
9
+ #{File.basename(__FILE__)} server_definition.rb [other files ...]
10
+ HELP
11
+
12
+ options = {
13
+ :log_file => STDOUT
14
+ }
15
+
16
+ begin
17
+ OptionParser.new(help_message) do |opt|
18
+ opt.on('-p PORT', '--port', Integer, 'Set the port number of server.') do |v|
19
+ options[:port] = v
20
+ end
21
+ opt.on('--acl FILE', String, 'Set a file to define ACL.') do |v|
22
+ options[:acl] = v
23
+ end
24
+ opt.on('--log-file STR', String, "Set the path of log file. If this options is not set, use STDOUT.") do |v|
25
+ options[:log_file] = v
26
+ end
27
+ opt.on('--log-level LEVEL', String,
28
+ "Set the log level. The value accepts 'fatal', 'error', 'warn', 'info', and 'debug'. The default is 'error'.") do |v|
29
+ if /^(fatal)|(error)|(warn)|(info)|(debug)$/i =~ v
30
+ options[:log_level] = eval("Logger::#{v.upcase}")
31
+ else
32
+ raise "Invalid log level."
33
+ end
34
+ end
35
+ opt.parse!(ARGV)
36
+ end
37
+ rescue OptionParser::InvalidOption
38
+ $stderr.print <<MES
39
+ error: Invalid Option
40
+ #{help_message}
41
+ MES
42
+ exit(2)
43
+ rescue OptionParser::InvalidArgument
44
+ $stderr.print <<MES
45
+ error: Invalid Argument
46
+ #{help_message}
47
+ MES
48
+ exit(2)
49
+ end
50
+
51
+ if ARGV.size == 0 || !File.exist?(ARGV[0])
52
+ raise "Invalid arguments. Please refer '#{File.basename(__FILE__)} -h'."
53
+ end
54
+
55
+ ARGV.each do |path|
56
+ puts "load #{path}"
57
+ load path
58
+ end
59
+
60
+ DRbQS.start_server(options)
data/drbqs.gemspec CHANGED
@@ -5,15 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{drbqs}
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
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-02-28}
13
- s.default_executable = %q{drbqs-node}
14
- s.description = %q{Queuing system over network that is implemented by dRuby.}
12
+ s.date = %q{2011-03-01}
13
+ s.description = %q{Task queuing system over network that is implemented by dRuby.}
15
14
  s.email = %q{d@ytak.info}
16
- s.executables = ["drbqs-node"]
15
+ s.executables = ["drbqs-node", "drbqs-server"]
17
16
  s.extra_rdoc_files = [
18
17
  "LICENSE.txt",
19
18
  "README.rdoc"
@@ -27,6 +26,7 @@ Gem::Specification.new do |s|
27
26
  "Rakefile",
28
27
  "VERSION",
29
28
  "bin/drbqs-node",
29
+ "bin/drbqs-server",
30
30
  "drbqs.gemspec",
31
31
  "lib/drbqs.rb",
32
32
  "lib/drbqs/acl_file.rb",
@@ -35,6 +35,7 @@ Gem::Specification.new do |s|
35
35
  "lib/drbqs/message.rb",
36
36
  "lib/drbqs/queue.rb",
37
37
  "lib/drbqs/server.rb",
38
+ "lib/drbqs/server_define.rb",
38
39
  "lib/drbqs/task_client.rb",
39
40
  "spec/acl_file_spec.rb",
40
41
  "spec/data/acl.txt",
data/lib/drbqs/server.rb CHANGED
@@ -21,6 +21,11 @@ module DRbQS
21
21
  class Server
22
22
  attr_reader :queue
23
23
 
24
+ # :port
25
+ # :acl
26
+ # :log_file
27
+ # :log_level
28
+ # :check_alive
24
29
  def initialize(opts = {})
25
30
  @port = opts[:port] || ROOT_DEFAULT_PORT
26
31
  @acl = acl_init(opts[:acl])
@@ -0,0 +1,21 @@
1
+ module DRbQS
2
+
3
+ @@server_create = nil
4
+
5
+ def self.define_server(&block)
6
+ if @@server_create
7
+ raise ArgumentError, "The server has already defined."
8
+ end
9
+ @@server_create = block
10
+ end
11
+
12
+ 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
20
+ end
21
+ end
data/lib/drbqs.rb CHANGED
@@ -6,6 +6,8 @@ require 'drb/acl'
6
6
  require 'rinda/tuplespace'
7
7
  require 'rinda/rinda'
8
8
 
9
+ require 'drbqs/server_define'
10
+
9
11
  module DRbQS
10
12
  autoload :Server, 'drbqs/server'
11
13
  autoload :Client, 'drbqs/client'
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: drbqs
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.3
5
+ version: 0.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Takayuki YAMAGUCHI
@@ -10,8 +10,8 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-28 00:00:00 +09:00
14
- default_executable: drbqs-node
13
+ date: 2011-03-01 00:00:00 +09:00
14
+ default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rspec
@@ -68,10 +68,11 @@ dependencies:
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: *id005
71
- description: Queuing system over network that is implemented by dRuby.
71
+ description: Task queuing system over network that is implemented by dRuby.
72
72
  email: d@ytak.info
73
73
  executables:
74
74
  - drbqs-node
75
+ - drbqs-server
75
76
  extensions: []
76
77
 
77
78
  extra_rdoc_files:
@@ -86,6 +87,7 @@ files:
86
87
  - Rakefile
87
88
  - VERSION
88
89
  - bin/drbqs-node
90
+ - bin/drbqs-server
89
91
  - drbqs.gemspec
90
92
  - lib/drbqs.rb
91
93
  - lib/drbqs/acl_file.rb
@@ -94,6 +96,7 @@ files:
94
96
  - lib/drbqs/message.rb
95
97
  - lib/drbqs/queue.rb
96
98
  - lib/drbqs/server.rb
99
+ - lib/drbqs/server_define.rb
97
100
  - lib/drbqs/task_client.rb
98
101
  - spec/acl_file_spec.rb
99
102
  - spec/data/acl.txt
@@ -114,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
114
117
  requirements:
115
118
  - - ">="
116
119
  - !ruby/object:Gem::Version
117
- hash: 4288822500604112980
120
+ hash: 1097812397295030278
118
121
  segments:
119
122
  - 0
120
123
  version: "0"