drbqs 0.0.1 → 0.0.2

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.1
1
+ 0.0.2
data/drbqs.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{drbqs}
8
- s.version = "0.0.1"
8
+ s.version = "0.0.2"
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-26}
12
+ s.date = %q{2011-02-27}
13
13
  s.description = %q{Queuing system over network that is implemented by dRuby.}
14
14
  s.email = %q{d@ytak.info}
15
15
  s.extra_rdoc_files = [
data/lib/drbqs/client.rb CHANGED
@@ -28,13 +28,15 @@ module DRbQS
28
28
  end
29
29
  end
30
30
 
31
+ WAIT_NEW_TASK = 1
32
+
31
33
  def calculate
32
34
  cn = Thread.new do
33
35
  loop do
34
36
  @task_client.add_new_task
35
37
  @connection.respond_alive_signal
36
38
  @task_client.send_result
37
- sleep(1)
39
+ sleep(WAIT_NEW_TASK)
38
40
  end
39
41
  end
40
42
  exec = Thread.new do
@@ -25,7 +25,7 @@ module DRbQS
25
25
  begin
26
26
  ary = @message.read([:initialize, nil, Symbol, nil], 0)
27
27
  ary[1..-1]
28
- rescue
28
+ rescue Rinda::RequestExpiredError
29
29
  nil
30
30
  end
31
31
  end
@@ -39,7 +39,7 @@ module DRbQS
39
39
  when :exit
40
40
  Kernel.exit
41
41
  end
42
- rescue
42
+ rescue Rinda::RequestExpiredError
43
43
  end
44
44
  end
45
45
  end
data/lib/drbqs/message.rb CHANGED
@@ -93,7 +93,7 @@ module DRbQS
93
93
  def set_initialization(task)
94
94
  begin
95
95
  @message.take([:initialize, nil, Symbol, nil], 0)
96
- rescue
96
+ rescue Rinda::RequestExpiredError
97
97
  end
98
98
  @message.write(task.drb_args(:initialize))
99
99
  end
data/lib/drbqs/queue.rb CHANGED
@@ -28,7 +28,7 @@ module DRbQS
28
28
  @result = result
29
29
  @task_id = 0
30
30
  @cache = {}
31
- @calculating = {}
31
+ @calculating = Hash.new { |hash, key| hash[key] = Array.new }
32
32
  @logger = logger
33
33
  end
34
34
 
@@ -46,43 +46,63 @@ module DRbQS
46
46
  end
47
47
 
48
48
  def get_accept_signal
49
+ count = 0
49
50
  begin
50
- sym, task_id, node_id = @result.take([:accept, Fixnum, Fixnum], 0)
51
- @calculating[node_id] = task_id
52
- @logger.info("Accept: task #{task_id} by node #{node_id}.") if @logger
53
- rescue
51
+ loop do
52
+ sym, task_id, node_id = @result.take([:accept, Fixnum, Fixnum], 0)
53
+ count += 1
54
+ @calculating[node_id] << task_id
55
+ @logger.info("Accept: task #{task_id} by node #{node_id}.") if @logger
56
+ end
57
+ rescue Rinda::RequestExpiredError
58
+ @logger.debug("Accept: #{count} signals.") if @logger
54
59
  end
60
+ count
55
61
  end
56
62
 
57
63
  def requeue_for_deleted_node_id(deleted)
58
64
  deleted.each do |node_id|
59
- if task_id = @calculating[node_id]
60
- queue_task(task_id)
61
- @calculating.delete(task_id)
65
+ if task_id_ary = @calculating[node_id]
66
+ task_id_ary.each { |task_id| queue_task(task_id) }
67
+ @calculating.delete(node_id)
62
68
  end
63
69
  end
64
70
  end
65
71
 
66
72
  def get_result
73
+ count = 0
67
74
  begin
68
75
  loop do
76
+ get_accept_signal
69
77
  sym, task_id, result = @result.take([:result, Fixnum, nil], 0)
70
- @logger.info("Get: result of #{task_id}.") if @logger
71
- @calculating.delete(task_id)
78
+ count += 1
79
+ if ary = @calculating.find { |k, v| v.include?(task_id) }
80
+ node_id = ary[0]
81
+ @calculating[node_id].delete(task_id)
82
+ else
83
+ node_id = nil
84
+ end
85
+ @logger.info("Get: result of #{task_id} from node #{node_id}.") if @logger
72
86
  task = @cache.delete(task_id)
73
87
  if hook = task.hook
74
88
  hook.call(self, result)
75
89
  end
76
90
  end
77
- rescue
91
+ rescue Rinda::RequestExpiredError
92
+ @logger.debug("Get: #{count} results.") if @logger
78
93
  end
94
+ count
95
+ end
96
+
97
+ def calculating_task_number
98
+ @calculating.inject(0) { |s, key_val| s + key_val[1].size }
79
99
  end
80
100
 
81
101
  # If queue is empty, return true. Otherwise, false.
82
102
  # Even if there are calculating tasks,
83
103
  # the method can return true.
84
104
  def empty?
85
- @cache.size - @calculating.size == 0
105
+ @cache.size - calculating_task_number == 0
86
106
  end
87
107
 
88
108
  # If there are no tasks in queue and calculating,
@@ -90,10 +110,6 @@ module DRbQS
90
110
  def finished?
91
111
  @cache.size == 0
92
112
  end
93
-
94
- def calculating_task_number
95
- @calculating.size
96
- end
97
113
  end
98
114
 
99
115
  end
data/lib/drbqs/server.rb CHANGED
@@ -87,6 +87,7 @@ module DRbQS
87
87
  private :exec_hook
88
88
 
89
89
  WAIT_NODE_EXIT = 3
90
+ WAIT_NEW_RESULT = 1
90
91
 
91
92
  def exit
92
93
  @message.send_exit
@@ -101,9 +102,12 @@ module DRbQS
101
102
  loop do
102
103
  @message.get_message
103
104
  check_connection
104
- @queue.get_result
105
+ count_results = @queue.get_result
105
106
  exec_hook
106
- sleep(1)
107
+ @logger.info("Calculating tasks: #{@queue.calculating_task_number}") if @logger
108
+ if count_results <= 1
109
+ sleep(WAIT_NEW_RESULT)
110
+ end
107
111
  end
108
112
  end
109
113
  end
@@ -16,8 +16,9 @@ module DRbQS
16
16
  task_id, obj, method_sym, args = @queue.take([Fixnum, nil, Symbol, nil], 0)
17
17
  @calculating_task = task_id
18
18
  @task_queue.enq([obj, method_sym, args])
19
- @result.write([:accept, task_id, @node_id])
20
- rescue
19
+ @logger.info("Send accept signal: node #{@node_id} caluclating #{@calculating_task}") if @logger
20
+ @result.write([:accept, @calculating_task, @node_id])
21
+ rescue Rinda::RequestExpiredError
21
22
  end
22
23
  end
23
24
  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.1
5
+ version: 0.0.2
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-02-26 00:00:00 +09:00
13
+ date: 2011-02-27 00:00:00 +09:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -109,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - ">="
111
111
  - !ruby/object:Gem::Version
112
- hash: 2055221894709119612
112
+ hash: 1630307079048384788
113
113
  segments:
114
114
  - 0
115
115
  version: "0"