drbqs 0.0.13 → 0.0.14

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 (115) hide show
  1. data/Gemfile +10 -7
  2. data/README.md +52 -11
  3. data/Rakefile +32 -10
  4. data/VERSION +1 -1
  5. data/bin/drbqs-manage +3 -93
  6. data/bin/drbqs-node +3 -89
  7. data/bin/drbqs-server +3 -117
  8. data/bin/drbqs-ssh +6 -0
  9. data/drbqs.gemspec +118 -97
  10. data/example/README.md +2 -2
  11. data/lib/drbqs/config/config.rb +88 -0
  12. data/lib/drbqs/config/process_list.rb +194 -0
  13. data/lib/drbqs/config/ssh_host.rb +41 -0
  14. data/lib/drbqs/{execute_node.rb → manage/execute_node.rb} +6 -4
  15. data/lib/drbqs/manage/manage.rb +100 -0
  16. data/lib/drbqs/manage/send_signal.rb +45 -0
  17. data/lib/drbqs/manage/ssh_execute.rb +23 -0
  18. data/lib/drbqs/manage/ssh_shell.rb +143 -0
  19. data/lib/drbqs/node/connection.rb +69 -0
  20. data/lib/drbqs/{client.rb → node/node.rb} +48 -18
  21. data/lib/drbqs/node/task_client.rb +94 -0
  22. data/lib/drbqs/server/acl_file.rb +15 -0
  23. data/lib/drbqs/server/check_alive.rb +23 -0
  24. data/lib/drbqs/server/history.rb +49 -0
  25. data/lib/drbqs/server/message.rb +142 -0
  26. data/lib/drbqs/server/node_list.rb +59 -0
  27. data/lib/drbqs/server/queue.rb +128 -0
  28. data/lib/drbqs/{server.rb → server/server.rb} +66 -74
  29. data/lib/drbqs/server/server_hook.rb +72 -0
  30. data/lib/drbqs/server/transfer_setting.rb +30 -0
  31. data/lib/drbqs/task/command_task.rb +43 -0
  32. data/lib/drbqs/{task.rb → task/task.rb} +18 -39
  33. data/lib/drbqs/{task_generator.rb → task/task_generator.rb} +2 -0
  34. data/lib/drbqs/utility/argument.rb +27 -0
  35. data/lib/drbqs/utility/command_line/command_base.rb +27 -0
  36. data/lib/drbqs/utility/command_line/command_manage.rb +121 -0
  37. data/lib/drbqs/utility/command_line/command_node.rb +103 -0
  38. data/lib/drbqs/utility/command_line/command_server.rb +165 -0
  39. data/lib/drbqs/utility/command_line/command_ssh.rb +126 -0
  40. data/lib/drbqs/utility/command_line.rb +15 -0
  41. data/lib/drbqs/utility/misc.rb +72 -0
  42. data/lib/drbqs/{server_define.rb → utility/server_define.rb} +23 -8
  43. data/lib/drbqs/utility/temporary.rb +49 -0
  44. data/lib/drbqs/{ssh/transfer.rb → utility/transfer/file_transfer.rb} +18 -58
  45. data/lib/drbqs/utility/transfer/transfer_client.rb +90 -0
  46. data/lib/drbqs.rb +10 -22
  47. data/spec/config/config_spec.rb +84 -0
  48. data/spec/config/process_list_spec.rb +149 -0
  49. data/spec/config/ssh_host_spec.rb +81 -0
  50. data/spec/integration_test/01_basic_usage_spec.rb +54 -0
  51. data/spec/integration_test/02_use_generator_spec.rb +53 -0
  52. data/spec/integration_test/03_use_temporary_file_spec.rb +26 -0
  53. data/spec/integration_test/04_use_unix_domain_spec.rb +34 -0
  54. data/spec/integration_test/05_server_exit_signal_spec.rb +23 -0
  55. data/spec/integration_test/06_node_exit_after_task_spec.rb +42 -0
  56. data/spec/integration_test/07_command_server_with_node_spec.rb +44 -0
  57. data/spec/integration_test/definition/server01.rb +20 -0
  58. data/spec/integration_test/definition/server02.rb +16 -0
  59. data/spec/integration_test/definition/task_obj_definition.rb +49 -0
  60. data/spec/manage/manage_spec.rb +33 -0
  61. data/spec/manage/send_signal_spec.rb +39 -0
  62. data/spec/{ssh_shell_spec.rb → manage/ssh_shell_spec.rb} +8 -8
  63. data/spec/node/connection_spec.rb +66 -0
  64. data/spec/node/task_client_spec.rb +212 -0
  65. data/spec/server/acl_file_spec.rb +9 -0
  66. data/spec/{server_check_alive_spec.rb → server/check_alive_spec.rb} +15 -11
  67. data/spec/{data → server/data}/acl.txt +0 -0
  68. data/spec/{history_spec.rb → server/history_spec.rb} +9 -5
  69. data/spec/server/message_spec.rb +195 -0
  70. data/spec/server/node_list_spec.rb +111 -0
  71. data/spec/server/queue_spec.rb +239 -0
  72. data/spec/{server_hook_spec.rb → server/server_hook_spec.rb} +23 -17
  73. data/spec/server/server_spec.rb +89 -0
  74. data/spec/server/transfer_setting_spec.rb +37 -0
  75. data/spec/spec_helper.rb +65 -0
  76. data/spec/task/file_transfer_spec.rb +107 -0
  77. data/spec/{task_generator_spec.rb → task/task_generator_spec.rb} +2 -2
  78. data/spec/{task_spec.rb → task/task_spec.rb} +3 -1
  79. data/spec/utility/argument_spec.rb +39 -0
  80. data/spec/utility/command_line/command_base_spec.rb +33 -0
  81. data/spec/utility/command_line/commands_spec.rb +15 -0
  82. data/spec/utility/misc_spec.rb +77 -0
  83. data/spec/utility/server_define_spec.rb +59 -0
  84. data/spec/utility/temporary_spec.rb +39 -0
  85. metadata +158 -93
  86. data/example/drbqs-manage-test.rb +0 -3
  87. data/example/drbqs-node-test.rb +0 -3
  88. data/example/drbqs-server-test.rb +0 -3
  89. data/lib/drbqs/acl_file.rb +0 -13
  90. data/lib/drbqs/config.rb +0 -98
  91. data/lib/drbqs/connection.rb +0 -67
  92. data/lib/drbqs/history.rb +0 -34
  93. data/lib/drbqs/manage.rb +0 -84
  94. data/lib/drbqs/message.rb +0 -119
  95. data/lib/drbqs/node_list.rb +0 -52
  96. data/lib/drbqs/queue.rb +0 -138
  97. data/lib/drbqs/server_hook.rb +0 -67
  98. data/lib/drbqs/ssh/host.rb +0 -26
  99. data/lib/drbqs/ssh/shell.rb +0 -139
  100. data/lib/drbqs/task_client.rb +0 -86
  101. data/lib/drbqs/utils.rb +0 -19
  102. data/spec/acl_file_spec.rb +0 -9
  103. data/spec/config_spec.rb +0 -14
  104. data/spec/connection_spec.rb +0 -49
  105. data/spec/manage_spec.rb +0 -57
  106. data/spec/message_spec.rb +0 -81
  107. data/spec/node_list_spec.rb +0 -68
  108. data/spec/queue_spec.rb +0 -59
  109. data/spec/server_define_spec.rb +0 -45
  110. data/spec/server_spec.rb +0 -56
  111. data/spec/task_client_spec.rb +0 -53
  112. data/spec/test/test1.rb +0 -13
  113. data/spec/test1_spec.rb +0 -80
  114. data/spec/test2_spec.rb +0 -69
  115. data/spec/transfer_spec.rb +0 -13
data/lib/drbqs/message.rb DELETED
@@ -1,119 +0,0 @@
1
- require 'drbqs/node_list'
2
-
3
- module DRbQS
4
- class MessageServer
5
- include HistoryUtils
6
-
7
- def initialize(message, logger = nil)
8
- @message = message
9
- @node_list = NodeList.new
10
- @logger = logger
11
- end
12
-
13
- def get_message
14
- begin
15
- mes = @message.take([:server, Symbol, nil], 0)
16
- manage_message(*mes[1..2])
17
- rescue Rinda::RequestExpiredError
18
- nil
19
- end
20
- end
21
-
22
- def manage_message(mes, arg)
23
- @logger.info("Get message") { [mes, arg] } if @logger
24
- case mes
25
- when :connect
26
- a = [arg, @node_list.get_new_id(arg)]
27
- @logger.info("New node") { a } if @logger
28
- @message.write(a)
29
- when :alive
30
- @node_list.set_alive(arg)
31
- when :exit_server
32
- @logger.info("Get exit message from #{arg.to_s}") if @logger
33
- when :request_status
34
- @logger.info("Get status request from #{arg.to_s}") if @logger
35
- when :node_error
36
- @node_list.delete(arg[0])
37
- @logger.info("Node Error (#{arg[0]})") { arg[1] } if @logger
38
- return [mes, arg[0]]
39
- else
40
- @logger.error("Invalid message from #{arg.to_s}") if @logger
41
- return nil
42
- end
43
- return [mes]
44
- end
45
- private :manage_message
46
-
47
- def check_connection
48
- deleted = @node_list.delete_not_alive
49
- @logger.info("IDs of deleted nodes") { deleted } if deleted.size > 0 && @logger
50
- @node_list.each do |id, str|
51
- @message.write([id, :alive_p])
52
- end
53
- @node_list.set_check_connection
54
- deleted
55
- end
56
-
57
- def send_signal_to_all_nodes(signal)
58
- @node_list.each do |node_id, id_str|
59
- @message.write([node_id, signal])
60
- end
61
- end
62
- private :send_signal_to_all_nodes
63
-
64
- def send_exit
65
- send_signal_to_all_nodes(:exit)
66
- end
67
-
68
- def send_finalization(task)
69
- set_finalization(task)
70
- send_signal_to_all_nodes(:finalize)
71
- end
72
-
73
- def send_status(calculating_task_id)
74
- s = ''
75
- @node_list.history.each do |node_id, events|
76
- if events.size == 0 || events.size > 2
77
- raise "Invalid history of nodes: #{events.inspect}"
78
- end
79
- connect = events[0]
80
- s << sprintf("%4d %s\t", node_id, connect[2])
81
- if disconnect = events[1]
82
- s << "disconnected: (#{time_to_string(connect[0])} - #{time_to_string(disconnect[0])})\n"
83
- else
84
- task_ids = calculating_task_id[node_id]
85
- s << "task: #{task_ids.map { |num| num.to_s }.join(', ')} (#{time_to_string(connect[0])})\n"
86
- end
87
- end
88
- begin
89
- @message.take([:status, nil], 0)
90
- rescue Rinda::RequestExpiredError
91
- end
92
- @message.write([:status, s])
93
- end
94
-
95
- def node_not_exist?
96
- @node_list.empty?
97
- end
98
-
99
- def set_special_task(label, task)
100
- begin
101
- @message.take([label, nil, Symbol, nil], 0)
102
- rescue Rinda::RequestExpiredError
103
- end
104
- @message.write(task.drb_args(label))
105
- end
106
- private :set_special_task
107
-
108
- # If the task has already set,
109
- # the method overwrite old task of initialization by new task.
110
- def set_initialization(task)
111
- set_special_task(:initialize, task)
112
- end
113
-
114
- def set_finalization(task)
115
- set_special_task(:finalization, task)
116
- end
117
- end
118
-
119
- end
@@ -1,52 +0,0 @@
1
- require 'drbqs/history'
2
-
3
- module DRbQS
4
- class NodeList
5
- attr_reader :history
6
-
7
- def initialize
8
- @id = 0
9
- @list = {}
10
- @check = []
11
- @history = History.new
12
- end
13
-
14
- def get_new_id(id_str)
15
- @id += 1
16
- @list[@id] = id_str
17
- @history.set(@id, :connect, @list[@id])
18
- @id
19
- end
20
-
21
- def each(&block)
22
- @list.each(&block)
23
- end
24
-
25
- def set_check_connection
26
- @check = @list.keys
27
- end
28
-
29
- def delete(id)
30
- @list.delete(id)
31
- @history.set(id, :disconnect)
32
- end
33
-
34
- def delete_not_alive
35
- @check.each do |id|
36
- delete(id)
37
- end
38
- deleted = @check
39
- @check = []
40
- deleted
41
- end
42
-
43
- def set_alive(id)
44
- @check.delete(id)
45
- end
46
-
47
- def empty?
48
- @list.size == 0
49
- end
50
- end
51
-
52
- end
data/lib/drbqs/queue.rb DELETED
@@ -1,138 +0,0 @@
1
- require 'drbqs/history'
2
-
3
- module DRbQS
4
-
5
- class QueueServer
6
- include HistoryUtils
7
-
8
- attr_reader :calculating, :history
9
-
10
- def initialize(queue, result, logger = nil)
11
- @queue = queue
12
- @result = result
13
- @task_id = 0
14
- @cache = {}
15
- @calculating = Hash.new { |hash, key| hash[key] = Array.new }
16
- @history = DRbQS::History.new
17
- @logger = logger
18
- end
19
-
20
- def queue_task(task_id)
21
- @queue.write(@cache[task_id].drb_args(task_id))
22
- end
23
- private :queue_task
24
-
25
- # &hook take two arguments: a QueueServer object and a result of task.
26
- # Return task ID (for debug).
27
- def add(task)
28
- @task_id += 1
29
- @logger.info("New task: #{@task_id}") if @logger
30
- @cache[@task_id] = task
31
- queue_task(@task_id)
32
- @history.set(@task_id, :add)
33
- @task_id
34
- end
35
-
36
- def get_accept_signal
37
- count = 0
38
- begin
39
- loop do
40
- sym, task_id, node_id = @result.take([:accept, Fixnum, Fixnum], 0)
41
- count += 1
42
- @calculating[node_id] << task_id
43
- @history.set(task_id, :calculate, node_id)
44
- @logger.info("Accept: task #{task_id} by node #{node_id}.") if @logger
45
- end
46
- rescue Rinda::RequestExpiredError
47
- @logger.debug("Accept: #{count} signals.") if @logger
48
- end
49
- count
50
- end
51
-
52
- def requeue_for_deleted_node_id(deleted)
53
- deleted.each do |node_id|
54
- if task_id_ary = @calculating[node_id]
55
- task_id_ary.each do |task_id|
56
- queue_task(task_id)
57
- @history.set(task_id, :requeue)
58
- @logger.info("Requeue: task #{task_id}.") if @logger
59
- end
60
- @calculating.delete(node_id)
61
- end
62
- end
63
- end
64
-
65
- def delete_task_id(node_id, task_id)
66
- unless @calculating[node_id].delete(task_id)
67
- @logger.error("Task #{task_id} does not exist in list of calculating tasks.") if @logger
68
- end
69
- if ary = @calculating.find { |k, v| v.include?(task_id) }
70
- @logger.error("Node #{ary[0]} is calculating task #{task_id}, too.") if @logger
71
- end
72
- end
73
- private :delete_task_id
74
-
75
- def exec_task_hook(main_server, task_id, result)
76
- if task = @cache.delete(task_id)
77
- if hook = task.hook
78
- @history.set(task_id, :hook)
79
- hook.call(main_server, result)
80
- end
81
- else
82
- @logger.error("Task #{task_id} is not cached.") if @logger
83
- end
84
- end
85
-
86
- def get_result(main_server)
87
- count = 0
88
- begin
89
- loop do
90
- get_accept_signal
91
- sym, task_id, node_id, result = @result.take([:result, Fixnum, Fixnum, nil], 0)
92
- count += 1
93
- @history.set(task_id, :result, node_id)
94
- @logger.info("Get: result of #{task_id} from node #{node_id}.") if @logger
95
- delete_task_id(node_id, task_id)
96
- exec_task_hook(main_server, task_id, result)
97
- end
98
- rescue Rinda::RequestExpiredError
99
- @logger.debug("Get: #{count} results.") if @logger
100
- end
101
- count
102
- end
103
-
104
- def calculating_task_number
105
- @calculating.inject(0) { |s, key_val| s + key_val[1].size }
106
- end
107
-
108
- # If queue is empty, return true. Otherwise, false.
109
- # Even if there are calculating tasks,
110
- # the method can return true.
111
- def empty?
112
- @cache.size - calculating_task_number == 0
113
- end
114
-
115
- # If there are no tasks in queue and calculating,
116
- # return true. Otherwise, false.
117
- def finished?
118
- @cache.size == 0
119
- end
120
-
121
- def all_logs
122
- s = ''
123
- @history.each do |task_id, events|
124
- s << "Task #{task_id}\n"
125
- events.each do |ev|
126
- case ev[1]
127
- when :add, :requeue, :hook
128
- s << " #{time_to_string(ev[0])}\t#{ev[1]}\n"
129
- when :calculate, :result
130
- s << " #{time_to_string(ev[0])}\t#{ev[1]} (node #{ev[2]})\n"
131
- end
132
- end
133
- end
134
- s
135
- end
136
- end
137
-
138
- end
@@ -1,67 +0,0 @@
1
- module DRbQS
2
- class ServerHook
3
- def initialize
4
- @hook = Hash.new { |h, k| h[k] = Array.new }
5
- @argument_number = {}
6
- @finish_exit = nil
7
- set_argument_number(:empty_queue, 1)
8
- set_argument_number(:finish, 1)
9
- end
10
-
11
- def set_argument_number(key, num)
12
- @argument_number[key] = num
13
- end
14
- private :set_argument_number
15
-
16
- def create_proc_name(key)
17
- name = "#{key.to_s}#{rand(1000)}"
18
- if @hook.has_key?(name)
19
- create_proc_name(key)
20
- else
21
- name
22
- end
23
- end
24
- private :create_proc_name
25
-
26
- def add(key, name = nil, &block)
27
- if (n = @argument_number[key]) && (block.arity != n)
28
- raise ArgumentError, "Invalid argument number of hook of #{key.inspect}."
29
- end
30
- name ||= create_proc_name(key)
31
- @hook[key] << [name, block]
32
- name
33
- end
34
-
35
- def delete(key, name = nil)
36
- if name
37
- @hook[key].delete_if { |ary| ary[0] == name }
38
- else
39
- @hook[key].clear
40
- end
41
- end
42
-
43
- def specific_proc(key)
44
- case key
45
- when :finish
46
- @finish_exit.call if @finish_exit
47
- end
48
- end
49
- private :specific_proc
50
-
51
- def hook_names(key)
52
- @hook[key].map { |a| a[0] }
53
- end
54
-
55
- def exec(key, *args)
56
- @hook[key].each do |ary|
57
- ary[1].call(*args)
58
- end
59
- specific_proc(key)
60
- end
61
-
62
- def set_finish_exit(&block)
63
- @finish_exit = block
64
- end
65
- end
66
-
67
- end
@@ -1,26 +0,0 @@
1
- require 'yaml'
2
- require 'drbqs/config'
3
-
4
- module DRbQS
5
- class SSHHost
6
- def initialize
7
- @dir = DRbQS::Config.get_host_file_directory
8
- @host_files = (Dir.glob("#{@dir}/*.yaml") + Dir.glob("#{@dir}/*.yml")).map { |s| File.basename(s) }
9
- end
10
-
11
- def get(name)
12
- if (name.size > 0) && (host = @host_files.find { |s| /^#{name}/ =~ s })
13
- return File.join(@dir, host)
14
- end
15
- return nil
16
- end
17
- private :get
18
-
19
- def get_options(name)
20
- if path = get(name)
21
- return [path, YAML.load_file(path)]
22
- end
23
- return [nil, {}]
24
- end
25
- end
26
- end
@@ -1,139 +0,0 @@
1
- require 'net/ssh'
2
- require 'net/ssh/shell'
3
-
4
- module DRbQS
5
-
6
- # Requirements:
7
- # bash
8
- # nohup
9
- class SSHShell
10
- class GetInvalidExitStatus < StandardError
11
- end
12
-
13
- attr_reader :user, :host, :directory, :port
14
-
15
- DEFAULT_RVM_SCRIPT = '$HOME/.rvm/scripts/rvm'
16
- DEFAULT_OUTPUT_FILE = 'drbqs_nohup.log'
17
-
18
- # :shell shell to use
19
- # :dir base directory of ssh server
20
- # :rvm version of ruby on rvm
21
- # :rvm_init path of script to initialize rvm
22
- # :output file to output of stdout and stderr
23
- def initialize(dest, opts = {})
24
- @user, @host, @port = split_destination(dest)
25
- if !(@host && @user)
26
- raise "Invalid destination of ssh server."
27
- end
28
- @shell = opts[:shell] || 'bash'
29
- @rvm = opts[:rvm]
30
- @rvm_init = opts[:rvm_init]
31
- if (@rvm || @rvm_init) && !(String === @rvm_init)
32
- @rvm_init = DEFAULT_RVM_SCRIPT
33
- end
34
- @nohup_output = opts[:output] || DEFAULT_OUTPUT_FILE
35
- @directory = opts[:dir]
36
- @out = $stdout
37
- @nice = opts[:nice]
38
- @nohup = opts[:nohup]
39
- end
40
-
41
- def split_destination(dest)
42
- if (n = dest.index("@")) && n > 0
43
- user = dest[0..(n - 1)]
44
- host_dir = dest[(n + 1)..-1]
45
- else
46
- raise "Not include '@': #{dest}"
47
- end
48
- if n = host_dir.index(':')
49
- host = host_dir[0..(n - 1)]
50
- port = host_dir[(n + 1)..-1]
51
- else
52
- host = host_dir
53
- port = nil
54
- end
55
- [user && user.size > 0 ? user : nil,
56
- host && host.size > 0 ? host : nil,
57
- port && port.size > 0 ? port.to_i : nil]
58
- end
59
- private :split_destination
60
-
61
- def output_command(cmd, result)
62
- @out.puts "#{@user}@#{@host}$ #{cmd}" if @out
63
- @out.print result
64
- end
65
- private :output_command
66
-
67
- def shell_exec_get_output(sh, cmd)
68
- result = ''
69
- pr_cmd = sh.execute!(cmd) do |sh_proc|
70
- sh_proc.on_output do |pr, data|
71
- result << data
72
- end
73
- sh_proc.on_error_output do |pr, data|
74
- result << data
75
- end
76
- end
77
- [pr_cmd, result]
78
- end
79
- private :shell_exec_get_output
80
-
81
- def shell_exec(sh, cmd)
82
- ary = shell_exec_get_output(sh, cmd)
83
- output_command(cmd, ary[1])
84
- ary
85
- end
86
- private :shell_exec
87
-
88
- def shell_exec_check(sh, cmd)
89
- ary = shell_exec(sh, cmd)
90
- if ary[0].exit_status != 0
91
- raise GetInvalidExitStatus, "Can not execute '#{cmd}' on #{@host} properly."
92
- end
93
- ary
94
- end
95
- private :shell_exec_check
96
-
97
- def execute_command(&block)
98
- Net::SSH.start(@host, @user, :port => @port) do |ssh|
99
- ssh.shell(@shell) do |sh|
100
- shell_exec_check(sh, "cd #{@directory}") if @directory
101
- shell_exec_check(sh, "source #{@rvm_init}") if @rvm_init
102
- shell_exec_check(sh, "rvm use #{@rvm}") if @rvm
103
- yield(sh)
104
- shell_exec(sh, "exit")
105
- end
106
- end
107
- end
108
- private :execute_command
109
-
110
- def get_environment
111
- execute_command do |sh|
112
- ['echo "directory: " `pwd`',
113
- 'echo "files:"',
114
- 'ls',
115
- 'if which rvm > /dev/null; then rvm info; else ruby -v; fi'].each do |cmd|
116
- shell_exec(sh, cmd)
117
- end
118
- end
119
- end
120
-
121
- def start(*args)
122
- cmd = args.join(' ')
123
- if @nice
124
- if Integer === @nice
125
- cmd = "nice -n #{@nice.to_s} " + cmd
126
- else
127
- cmd = "nice " + cmd
128
- end
129
- end
130
- execute_command do |sh|
131
- if @nohup
132
- pr, path = shell_exec_check(sh, "filename-create new -p middle -D parent -t time #{@nohup_output}")
133
- cmd = "nohup #{cmd} > #{path.strip} 2>&1 &"
134
- end
135
- shell_exec(sh, cmd)
136
- end
137
- end
138
- end
139
- end
@@ -1,86 +0,0 @@
1
- module DRbQS
2
- class TaskClient
3
- attr_reader :node_id, :calculating_task
4
-
5
- def initialize(node_id, queue, result, logger = nil)
6
- @node_id = node_id
7
- @queue = queue
8
- @result = result
9
- @calculating_task = nil
10
- @task_queue = Queue.new
11
- @result_queue = Queue.new
12
- @logger = logger
13
- end
14
-
15
- def calculating?
16
- !!@calculating_task
17
- end
18
-
19
- def task_empty?
20
- @task_queue.empty?
21
- end
22
-
23
- def result_empty?
24
- @result_queue.empty?
25
- end
26
-
27
- def dequeue_result
28
- @result_queue.deq
29
- end
30
- private :dequeue_result
31
-
32
- def queue_task(task_id, ary)
33
- @calculating_task = task_id
34
- @task_queue.enq(ary)
35
- end
36
-
37
- def dequeue_task
38
- @task_queue.deq
39
- end
40
-
41
- def get_task
42
- begin
43
- @queue.take([Fixnum, nil, Symbol, nil], 0)
44
- rescue Rinda::RequestExpiredError
45
- nil
46
- end
47
- end
48
-
49
- def add_new_task
50
- unless @calculating_task
51
- if ary = get_task
52
- task_id, obj, method_sym, args = ary
53
- @logger.info("Send accept signal: node #{@node_id} caluclating #{task_id}") if @logger
54
- @result.write([:accept, task_id, @node_id])
55
- queue_task(task_id, [obj, method_sym, args])
56
- end
57
- end
58
- end
59
-
60
- def send_result
61
- if !result_empty?
62
- result = dequeue_result
63
- @logger.info("Send result: #{@calculating_task}") { result.inspect } if @logger
64
- @result.write([:result, @calculating_task, @node_id, result])
65
- @calculating_task = nil
66
- end
67
- end
68
-
69
- def queue_result(result)
70
- @result_queue.enq(result)
71
- end
72
-
73
- def dump_result_queue
74
- results = []
75
- while !result_empty?
76
- results << dequeue_result
77
- end
78
- if results.size > 0
79
- Marshal.dump(results)
80
- else
81
- nil
82
- end
83
- end
84
- end
85
-
86
- end
data/lib/drbqs/utils.rb DELETED
@@ -1,19 +0,0 @@
1
- module DRbQS
2
- module Utils
3
- def create_logger(log_file, log_level)
4
- if log_file
5
- if IO === log_file
6
- log_output = log_file
7
- else
8
- log_output = FileName.create(log_file, :position => :middle, :directory => :parent, :type => :number)
9
- end
10
- logger = Logger.new(log_output)
11
- logger.level = log_level || Logger::ERROR
12
- return logger
13
- end
14
- return nil
15
- end
16
- module_function :create_logger
17
- end
18
-
19
- end
@@ -1,9 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
- require 'drbqs/acl_file'
3
-
4
- describe DRbQS::ACLFile do
5
- it "should return an ACL object" do
6
- acl = DRbQS::ACLFile.load(File.dirname(__FILE__) + '/data/acl.txt')
7
- acl.should be_an_instance_of ACL
8
- end
9
- end
data/spec/config_spec.rb DELETED
@@ -1,14 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe DRbQS::Config do
4
- it "should return nil" do
5
- DRbQS::Config.set_directory(File.dirname(__FILE__) + '/not_exist_path')
6
- DRbQS::Config.get_acl_file.should be_nil
7
- end
8
-
9
- it "should return existing path" do
10
- path = File.dirname(__FILE__) + '/data'
11
- DRbQS::Config.set_directory(path)
12
- DRbQS::Config.get_acl_file.should == File.join(path, 'acl.txt')
13
- end
14
- end