roma 1.1.0 → 1.2.0

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +21 -0
  3. data/Gemfile.lock +47 -0
  4. data/bin/check_tc_flag +39 -0
  5. data/bin/roma-adm +43 -0
  6. data/bin/ssroute +0 -3
  7. data/lib/roma/async_process.rb +203 -208
  8. data/lib/roma/command/sys_command_receiver.rb +52 -10
  9. data/lib/roma/config.rb +3 -0
  10. data/lib/roma/event/handler.rb +11 -4
  11. data/lib/roma/event/jaro_winkler.rb +23 -0
  12. data/lib/roma/event/levenshtein.rb +23 -0
  13. data/lib/roma/plugin/plugin_cmd_aliases.rb +1 -32
  14. data/lib/roma/romad.rb +23 -0
  15. data/lib/roma/routing/cb_rttable.rb +2 -0
  16. data/lib/roma/routing/random_partitioner.rb +43 -36
  17. data/lib/roma/routing/rttable.rb +5 -3
  18. data/lib/roma/stats.rb +4 -1
  19. data/lib/roma/tools/check_tc_flag.rb +25 -0
  20. data/lib/roma/tools/cpdb.rb +3 -2
  21. data/lib/roma/tools/mkconfig.rb +22 -13
  22. data/lib/roma/tools/roma-adm.rb +82 -0
  23. data/lib/roma/version.rb +1 -1
  24. data/test/config4mhash.rb +2 -0
  25. data/test/config4storage_error.rb +2 -0
  26. data/test/config4test.rb +2 -0
  27. data/test/cpdbtest/config4cpdb_base.rb +67 -0
  28. data/test/cpdbtest/config4cpdb_dbm.rb +9 -0
  29. data/test/cpdbtest/config4cpdb_groonga.rb +9 -0
  30. data/test/cpdbtest/config4cpdb_rh.rb +9 -0
  31. data/test/cpdbtest/config4cpdb_sqlite3.rb +9 -0
  32. data/test/cpdbtest/config4cpdb_tc.rb +9 -0
  33. data/test/cpdbtest/config4cpdb_tcmem.rb +9 -0
  34. data/test/roma-test-utils.rb +140 -40
  35. data/test/t_cpdata.rb +76 -80
  36. data/test/t_cpdb.rb +95 -0
  37. data/test/t_logshift.rb +86 -0
  38. data/test/t_mhash.rb +56 -54
  39. data/test/t_routing_logic.rb +121 -0
  40. data/test/t_writebehind.rb +202 -207
  41. metadata +25 -8
  42. data/bin/tc_data_restore.rb +0 -123
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'timeout'
4
+
5
+ module Roma
6
+ class CheckTc
7
+ def initialize(storage_path, library_path)
8
+ @storage_path = storage_path
9
+ @library_path = library_path
10
+ end
11
+
12
+ def check_flag
13
+ status = {}
14
+ timeout(5){
15
+ Dir.glob("#{@storage_path}/*.tc").each{|f|
16
+ res = `#{@library_path}/bin/tchmgr inform #{f}`
17
+ res =~ /additional flags:(.*)\n/
18
+ status.store(f, $1)
19
+ }
20
+ }
21
+ status
22
+ end
23
+
24
+ end # CheckTc
25
+ end # Roma
@@ -22,8 +22,8 @@ module Roma
22
22
  def check_storage_type
23
23
  stats('st_class') do |line|
24
24
  storage_type = line.match(/storages\[.+\]\.storage\.st_class\s(.+)/)[1].chomp
25
- unless storage_type =~ /^(TCStorage|RubyHashStorage)$/
26
- puts "ERROR:cpdb supports just TCStorage or RubyHashStorage system, your storage type is #{storage_type}"
25
+ unless storage_type =~ /^(TCStorage)$/
26
+ puts "ERROR:cpdb supports just TCStorage system, your storage type is #{storage_type}"
27
27
  exit
28
28
  end
29
29
  end
@@ -127,6 +127,7 @@ begin
127
127
  sc.check_storage_type
128
128
  sc.backup_all
129
129
  sc.set_gui_last_snapshot
130
+ puts "finished"
130
131
  ensure
131
132
  sc.close
132
133
  end
@@ -50,10 +50,12 @@ module Roma
50
50
  choice:
51
51
  - Ruby Hash
52
52
  - Tokyo Cabinet
53
+ - Groonga
53
54
  default: 1
54
55
  next:
55
56
  - menu
56
57
  - memory
58
+ - memory
57
59
  memory:
58
60
  name: memory_size_GB
59
61
  path_name:
@@ -83,9 +85,14 @@ module Roma
83
85
  plugin:
84
86
  name: selected_plugin
85
87
  path_name: plugin
86
- message: Please select which plugin will you use.(plugin_storage.rb was already set)
88
+ message: Please select which plugin will you use.(plugin_storage.rb is essential unless you make alternative plugin.)
87
89
  choice:
88
- #{load_path(PLUGIN_DIR) << "Select all plugins"}
90
+ #{
91
+ list = load_path(PLUGIN_DIR) << "Select all plugins"
92
+ list.delete("plugin_storage.rb")
93
+ list.unshift("plugin_storage.rb")
94
+ list
95
+ }
89
96
  default: 1
90
97
  next:
91
98
  #{
@@ -161,7 +168,6 @@ module Roma
161
168
  ret = Array.new
162
169
  files = Dir::entries(path)
163
170
  files.delete("plugin_stub.rb") if files.include?("plugin_stub.rb")
164
- files.delete("plugin_storage.rb") if files.include?("plugin_storage.rb")
165
171
 
166
172
  files.each do |file|
167
173
  ret << file if File::ftype(File.join(path, file)) == "file"
@@ -353,7 +359,7 @@ module Roma
353
359
  clear_screen
354
360
 
355
361
  if @next_hash == "add_plugin"
356
- @results["plugin"].value.unshift("plugin_storage.rb")
362
+ @results["plugin"].value.unshift("plugin_storage.rb") unless @results["plugin"].value.include?("plugin_storage.rb")
357
363
  @next_hash = "menu"
358
364
  end
359
365
 
@@ -504,17 +510,22 @@ module Roma
504
510
  #make config.rb based on input data
505
511
  def save_data(res)
506
512
  if res.key?("storage")
507
- if res["storage"].value == "Ruby Hash"
513
+ case res["storage"].value
514
+ when "Ruby Hash"
508
515
  req = "rh_storage"
509
516
  storage = "RubyHashStorage"
510
- end
511
-
512
- if res["storage"].value == "Tokyo Cabinet"
517
+ when "Tokyo Cabinet"
513
518
  req = "tc_storage"
514
519
  storage = "TCStorage"
515
520
  bnum = Calculate.get_bnum(res)
516
521
  bnum = 5000000 if bnum < 5000000
517
522
  xmsiz = Calculate.get_xmsize_max(res)
523
+ when "Groonga"
524
+ req = "groonga_storage"
525
+ storage = "GroongaStorage"
526
+ bnum = Calculate.get_bnum(res)
527
+ bnum = 5000000 if bnum < 5000000
528
+ xmsiz = Calculate.get_xmsize_max(res)
518
529
  end
519
530
  end
520
531
 
@@ -532,17 +543,15 @@ module Roma
532
543
  body = ch_assign(body, "require", " ", "roma\/storage\/#{req}")
533
544
  body = ch_assign(body, "STORAGE_CLASS", "Roma::Storage::#{storage}")
534
545
 
535
- if req == "rh_storage"
546
+ case req
547
+ when "rh_storage"
536
548
  body = ch_assign(body, "STORAGE_OPTION","")
537
- end
538
-
539
- if req == "tc_storage"
549
+ when /^(tc_storage|groonga_storage)$/
540
550
  body = ch_assign(body, "STORAGE_OPTION", "bnum=#{bnum}\#xmsiz=#{xmsiz}\#opts=d#dfunit=10")
541
551
  end
542
552
  end
543
553
 
544
554
  if res.key?("plugin")
545
- res["plugin"].value.unshift("plugin_storage.rb")
546
555
  body = ch_assign(body, "PLUGIN_FILES", res["plugin"].value)
547
556
  end
548
557
 
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'socket'
4
+ require 'timeout'
5
+
6
+ module Roma
7
+ class Adm
8
+ def initialize(cmd, port)
9
+ @cmd = cmd.dup #to avoid frozen error
10
+ @port = port
11
+ end
12
+
13
+ def check_type
14
+ # waiting value input command
15
+ require_value_cmd = Regexp.new(/^(set|add|replace|append|prepend|cas|alist_delete|alist_include\?|alist_insert|alist_sized_insert|alist_swap_and_insert|alist_swap_and_sized_insert|alist_join_with_time|alist_join|alist_push|alist_sized_push|alist_swap_and_push|alist_update_at)/)
16
+
17
+ case @cmd
18
+ when "balse", "shutdown" # yes/no check
19
+ make_command("halt_cmd")
20
+ @halt_cmd = true
21
+ when "start" # alias cmd
22
+ make_command("booting")
23
+ @alias = true
24
+ when require_value_cmd
25
+ make_command("value")
26
+ else
27
+ t = Thread.new do
28
+ loop{
29
+ print "."
30
+ sleep 1
31
+ }
32
+ end
33
+ end
34
+ end
35
+
36
+ def send_command(host="localhost")
37
+ if @alias
38
+ base_path = Pathname(__FILE__).dirname.parent.parent.parent.expand_path
39
+ `#{base_path}/#{@cmd}` # bash
40
+ elsif @halt_cmd
41
+ return `echo -e "#{@cmd}" | nc -i1 #{host} #{@port}` # bash
42
+ else
43
+ timeout(5) {
44
+ res = []
45
+ TCPSocket.open(host, @port) do |sock|
46
+ sock.puts @cmd
47
+ while select [sock], nil, nil, 0.5
48
+ res << sock.gets.chomp!
49
+ end
50
+ end
51
+ return res
52
+ }
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ def make_command(type)
59
+ case type
60
+ when "halt_cmd"
61
+ puts("Are you sure?(yes/no)\r\n")
62
+ if STDIN.gets.chomp != "yes"
63
+ raise "confirmation was rejected"
64
+ else
65
+ @cmd.concat("\r\nyes\r\nyes\r\n")
66
+ end
67
+ when "booting"
68
+ puts("Please input hostname or ip address which is used for ROMA.\r\n Ex.) roma_serverA, 192.168.33.11\r\n")
69
+ hostname = STDIN.gets.chomp
70
+ puts("Please input PATH of config.rb.\r\n Ex.) /home/roma/config.rb\r\n")
71
+ config_path = STDIN.gets.chomp
72
+ @cmd = "bin/romad #{hostname} -p #{@port} -d --config #{config_path}"
73
+ when "value"
74
+ puts("Please input value.\r\n")
75
+ value = STDIN.gets.chomp
76
+ @cmd.concat("\r\n#{value}\r\n")
77
+ end
78
+ end
79
+
80
+ end #Adm
81
+ end # Roma
82
+
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Roma
3
- VERSION = "1.1.0"
3
+ VERSION = "1.2.0"
4
4
  end
@@ -4,6 +4,8 @@ require 'roma/storage/tc_storage'
4
4
  module Roma
5
5
 
6
6
  module Config
7
+ VERSION = "1.2.0"
8
+
7
9
  DEFAULT_PORT = 12000
8
10
  DEFAULT_NAME = 'ROMA'
9
11
 
@@ -4,6 +4,8 @@ require 'roma/storage/storage_error_storage'
4
4
  module Roma
5
5
 
6
6
  module Config
7
+ VERSION = "1.2.0"
8
+
7
9
  DEFAULT_PORT = 12000
8
10
  DEFAULT_NAME = 'ROMA'
9
11
 
@@ -3,6 +3,8 @@ require 'roma/storage/rh_storage'
3
3
  module Roma
4
4
 
5
5
  module Config
6
+ VERSION = "1.2.0"
7
+
6
8
  DEFAULT_PORT = 12000
7
9
  DEFAULT_NAME = 'ROMA'
8
10
 
@@ -0,0 +1,67 @@
1
+ module CpdbBase
2
+
3
+ module Config
4
+ VERSION = "1.2.0"
5
+
6
+ DEFAULT_PORT = 12000
7
+ DEFAULT_NAME = 'ROMA'
8
+
9
+ # :no_action | :auto_assign | :shutdown
10
+ DEFAULT_LOST_ACTION = :auto_assign
11
+
12
+ # log setting
13
+ LOG_SHIFT_AGE = 10
14
+ LOG_SHIFT_SIZE = 1024 * 1024 * 10
15
+ LOG_PATH = '.'
16
+ # :debug | :info | :warn | :error
17
+ LOG_LEVEL = :debug
18
+
19
+ # routing setting
20
+ RTTABLE_PATH = '.'
21
+
22
+ # connection setting
23
+ # like a MaxStartups spec in the sshd_config
24
+ # 'start:rate:full'
25
+ CONNECTION_CONTINUOUS_LIMIT = '200:30:300'
26
+
27
+ # storage setting
28
+ #STORAGE_CLASS = Roma::Storage::GroongaStorage
29
+ STORAGE_DIVNUM = 10
30
+ STORAGE_PATH = '.'
31
+ STORAGE_DUMP_PATH = '/tmp'
32
+ STORAGE_OPTION = ''
33
+
34
+ # 5 days ago
35
+ STORAGE_DELMARK_EXPTIME = 60 * 60 * 24 * 5
36
+
37
+ # data copy setting
38
+ DATACOPY_STREAM_COPY_WAIT_PARAM = 0.0001
39
+
40
+ # plugin setting
41
+ PLUGIN_FILES = ['plugin_storage.rb','plugin_alist.rb','plugin_map.rb','plugin_mapcount.rb']
42
+
43
+ # write-behind setting
44
+ WRITEBEHIND_PATH = './wb'
45
+ WRITEBEHIND_SHIFT_SIZE = 1024 * 1024 * 10
46
+
47
+ # redundant setting
48
+ REDUNDANT_ZREDUNDANT_SIZE = 0
49
+
50
+ def self.get_stat
51
+ ret = {}
52
+ ret['config.DEFAULT_LOST_ACTION'] = DEFAULT_LOST_ACTION
53
+ ret['config.LOG_SHIFT_AGE'] = LOG_SHIFT_AGE
54
+ ret['config.LOG_SHIFT_SIZE'] = LOG_SHIFT_SIZE
55
+ ret['config.LOG_PATH'] = File.expand_path(LOG_PATH)
56
+ ret['config.RTTABLE_PATH'] = File.expand_path(RTTABLE_PATH)
57
+ ret['config.STORAGE_DELMARK_EXPTIME'] = STORAGE_DELMARK_EXPTIME
58
+ ret['config.DATACOPY_STREAM_COPY_WAIT_PARAM'] = DATACOPY_STREAM_COPY_WAIT_PARAM
59
+ ret['config.PLUGIN_FILES'] = PLUGIN_FILES.inspect
60
+ ret['config.WRITEBEHIND_PATH'] = File.expand_path(WRITEBEHIND_PATH)
61
+ ret['config.WRITEBEHIND_SHIFT_SIZE'] = WRITEBEHIND_SHIFT_SIZE
62
+ ret
63
+ end
64
+
65
+ end
66
+
67
+ end
@@ -0,0 +1,9 @@
1
+ require 'roma/storage/dbm_storage'
2
+ require_relative 'config4cpdb_base'
3
+
4
+ module Roma
5
+ module Config
6
+ include CpdbBase::Config
7
+ STORAGE_CLASS = Roma::Storage::DbmStorage
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'roma/storage/groonga_storage'
2
+ require_relative 'config4cpdb_base'
3
+
4
+ module Roma
5
+ module Config
6
+ include CpdbBase::Config
7
+ STORAGE_CLASS = Roma::Storage::GroongaStorage
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'roma/storage/rh_storage'
2
+ require_relative 'config4cpdb_base'
3
+
4
+ module Roma
5
+ module Config
6
+ include CpdbBase::Config
7
+ STORAGE_CLASS = Roma::Storage::RubyHashStorage
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'roma/storage/sqlite3_storage'
2
+ require_relative 'config4cpdb_base'
3
+
4
+ module Roma
5
+ module Config
6
+ include CpdbBase::Config
7
+ STORAGE_CLASS = Roma::Storage::SQLite3Storage
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'roma/storage/tc_storage'
2
+ require_relative 'config4cpdb_base'
3
+
4
+ module Roma
5
+ module Config
6
+ include CpdbBase::Config
7
+ STORAGE_CLASS = Roma::Storage::TCStorage
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'roma/storage/tc_storage'
2
+ require_relative 'config4cpdb_base'
3
+
4
+ module Roma
5
+ module Config
6
+ include CpdbBase::Config
7
+ STORAGE_CLASS = Roma::Storage::TCMemStorage
8
+ end
9
+ end
@@ -4,71 +4,171 @@ require 'fileutils'
4
4
  require 'rbconfig'
5
5
  require 'roma/config'
6
6
  require 'roma/messaging/con_pool'
7
+ require 'roma/logging/rlogger'
8
+ require 'roma/client/rclient'
9
+ require 'roma/client/client_pool'
10
+
11
+ Roma::Client::RomaClient.class_eval do
12
+ def init_sync_routing_proc
13
+ end
14
+ end
7
15
 
8
16
  module RomaTestUtils
17
+ DEFAULT_CONFIG = 'config4test.rb'
18
+ DEFAULT_HOST = 'localhost'
19
+ DEFAULT_IP = '127.0.0.1'
20
+ DEFAULT_PORTS = %w(11211 11212)
21
+ DEFAULT_NODES = DEFAULT_PORTS.map { |port| "#{DEFAULT_HOST}_#{port}" }
22
+ DEFAULT_TIMEOUT_SEC = 90
23
+ SHELL_LOG = 'roma_test_outputs.log'
24
+
25
+ Roma::Logging::RLogger.create_singleton_instance("#{Roma::Config::LOG_PATH}/roma_test.log",
26
+ Roma::Config::LOG_SHIFT_AGE,
27
+ Roma::Config::LOG_SHIFT_SIZE)
28
+
9
29
  module_function
30
+
31
+ def start_roma(conf = DEFAULT_CONFIG, div_bits: 3, replication_in_host: true)
32
+ FileUtils.rm_rf(Dir.glob("#{Roma::Config::STORAGE_PATH}/#{DEFAULT_NODES[0][0..-2]}?*"))
33
+ FileUtils.rm_rf(Dir.glob("#{Roma::Config::STORAGE_PATH}/#{DEFAULT_IP}_#{DEFAULT_PORTS[0][0..-2]}?*"))
34
+ sleep 0.1
35
+
36
+ system("#{ruby_path} #{mkroute_path} #{DEFAULT_NODES.join(' ')} -d #{div_bits} --replication_in_host >> #{SHELL_LOG} 2>&1")
37
+ sleep 0.2
38
+
39
+ DEFAULT_NODES.each do |node|
40
+ do_command_romad(node, conf, replication_in_host)
41
+ end
42
+ sleep 1
43
+ end
44
+
45
+ def join_roma(node, conf = DEFAULT_CONFIG, replication_in_host: true)
46
+ do_command_romad(node, conf, replication_in_host, true)
47
+ end
48
+
49
+ def do_command_romad(node, conf, replication_in_host = true, is_join = false)
50
+ host, port = node.split('_')
51
+ romad_command = [
52
+ ruby_path, romad_path, host,
53
+ '-p', port,
54
+ '-d', '--verbose', '--disabled_cmd_protect',
55
+ '--config', "#{test_dir}/#{conf}"
56
+ ]
57
+ romad_command << '--replication_in_host' if replication_in_host
58
+ romad_command << "-j #{DEFAULT_NODES[0]}" if is_join
59
+ romad_command << ">> #{SHELL_LOG} 2>&1"
60
+
61
+ system(romad_command.join(' '))
62
+ end
63
+
64
+ def get_client
65
+ client_pool = Roma::Client::ClientPool.instance
66
+ client_pool.servers = DEFAULT_NODES
67
+ client_pool.client
68
+ end
69
+
70
+ def wait_join(node)
71
+ client = get_client
72
+ wait_count = 0
73
+ retry_count = 0
74
+ sleep 5
75
+
76
+ until client.rttable.nodes.include?(node)
77
+ sleep 1
78
+ client.update_rttable
79
+ wait_count += 1
80
+ fail "#{__method__} timeout" if wait_count > DEFAULT_TIMEOUT_SEC
81
+ end
82
+
83
+ while client.stats(node: node)['stats.run_join'] == 'true'
84
+ sleep 1
85
+ wait_count += 1
86
+ fail "#{__method__} timeout" if wait_count > DEFAULT_TIMEOUT_SEC
87
+ end
88
+ end
89
+
90
+ def wait_failover(down_node)
91
+ client = get_client
92
+ stats_node = down_node == DEFAULT_NODES[0] ? DEFAULT_NODES[1] : DEFAULT_NODES[0]
93
+ wait_count = 0
94
+ sleep 1
95
+
96
+ while client.stats(node: stats_node)['routing.nodes'] =~ /#{down_node}/
97
+ sleep 1
98
+ wait_count += 1
99
+ fail "#{__method__} timeout" if wait_count > DEFAULT_TIMEOUT_SEC
100
+ end
101
+ end
102
+
103
+ def wait_release(node)
104
+ client = get_client
105
+ wait_count = 0
106
+ sleep 1
107
+
108
+ while client.stats(node: node)['stats.run_release'] == 'true'
109
+ sleep 1
110
+ wait_count += 1
111
+ fail "#{__method__} timeout" if wait_count > DEFAULT_TIMEOUT_SEC
112
+ end
113
+ end
114
+
115
+ def stop_roma
116
+ balse_message = %w(balse yes)
117
+ send_message(messages: balse_message)
118
+ Roma::Client::ConPool.instance.close_all
119
+ Roma::Messaging::ConPool.instance.close_all
120
+ end
121
+
122
+ def stop_roma_node(node)
123
+ send_message(messages: 'rbalse', node: node)
124
+ Roma::Client::ConPool.instance.close_all
125
+ Roma::Messaging::ConPool.instance.close_all
126
+ end
127
+
128
+ def release_roma_node(node)
129
+ send_message(messages: 'release', node: node)
130
+ end
131
+
132
+ private
133
+
10
134
  def base_dir
11
135
  Pathname(__FILE__).dirname.parent.expand_path
12
136
  end
13
137
 
14
138
  def bin_dir
15
- base_dir + "bin"
139
+ base_dir + 'bin'
16
140
  end
17
141
 
18
142
  def test_dir
19
- base_dir + "test"
143
+ base_dir + 'test'
20
144
  end
21
145
 
22
146
  def mkroute_path
23
- (bin_dir + "mkroute").to_s
147
+ (bin_dir + 'mkroute').to_s
24
148
  end
25
149
 
26
150
  def romad_path
27
- (bin_dir + "romad").to_s
151
+ (bin_dir + 'romad').to_s
28
152
  end
29
153
 
30
154
  def ruby_path
31
- File.join(RbConfig::CONFIG["bindir"],
32
- RbConfig::CONFIG["ruby_install_name"])
155
+ File.join(RbConfig::CONFIG['bindir'],
156
+ RbConfig::CONFIG['ruby_install_name'])
33
157
  end
34
158
 
35
- def start_roma conf='config4test.rb'
36
- sh = Shell.new
37
- sh.transact do
38
- Dir.glob("localhost_1121?.*").each{|f| rm f }
39
- end
40
- FileUtils.rm_rf("#{Roma::Config::STORAGE_PATH}/localhost_11211")
41
- FileUtils.rm_rf("#{Roma::Config::STORAGE_PATH}/localhost_11212")
42
- sleep 0.1
43
-
44
- sh.system(ruby_path, mkroute_path,
45
- "localhost_11211","localhost_11212",
46
- "-d","3",
47
- "--replication_in_host")
48
- sleep 0.2
49
- do_command_romad conf
50
- sleep 1
51
- end
159
+ def send_message(messages: [], node: DEFAULT_NODES[0])
160
+ conn = Roma::Messaging::ConPool.instance.get_connection(node)
161
+ return false unless conn
52
162
 
53
- def do_command_romad conf
54
- sh = Shell.new
55
- sh.system(ruby_path,romad_path,"localhost","-p","11211","-d","--verbose",
56
- "--disabled_cmd_protect","--config","#{test_dir}/#{conf}")
57
- sh.system(ruby_path,romad_path,"localhost","-p","11212","-d","--verbose",
58
- "--disabled_cmd_protect","--config","#{test_dir}/#{conf}")
59
- end
163
+ messages = [messages] if messages.class == String
60
164
 
61
- def stop_roma
62
- conn = Roma::Messaging::ConPool.instance.get_connection("localhost_11211")
63
- if conn
64
- conn.write "balse\r\n"
65
- conn.gets
66
- conn.write "yes\r\n"
165
+ messages.each do |message|
166
+ conn.write "#{message}\r\n"
67
167
  conn.gets
68
- conn.close
69
168
  end
70
- Roma::Client::ConPool.instance.close_all
71
- rescue =>e
72
- puts "#{e} #{$@}"
169
+ rescue => e
170
+ puts "#{e} #{$ERROR_POSITION}"
171
+ ensure
172
+ Roma::Messaging::ConPool.instance.return_connection(node, conn)
73
173
  end
74
174
  end