roma 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +42 -2
- data/Gemfile +1 -15
- data/LICENSE +1 -1
- data/README.md +78 -0
- data/Rakefile +1 -62
- data/bin/chg_redundancy +10 -0
- data/bin/cpdb +7 -0
- data/bin/key_access +7 -0
- data/bin/key_list +7 -0
- data/bin/log_merger +7 -0
- data/{ruby/server/bin → bin}/mkconfig +3 -1
- data/bin/mkrecent +7 -0
- data/bin/mkroute +7 -0
- data/{ruby/server/bin → bin}/multi_commander +4 -3
- data/bin/recoverlost +11 -0
- data/bin/recoverlost_alist +10 -0
- data/bin/recoverlost_alist_all +10 -0
- data/bin/recoverlost_alist_keys +10 -0
- data/bin/roma_watcher +10 -0
- data/{ruby/server/bin → bin}/romad +3 -2
- data/bin/safecopy_integration_test +10 -0
- data/bin/safecopy_test +10 -0
- data/bin/sample_watcher +10 -0
- data/bin/sample_watcher2 +10 -0
- data/bin/sample_watcher3 +10 -0
- data/bin/simple_bench +11 -0
- data/bin/ssroute +10 -0
- data/bin/tc_data_restore.rb +123 -0
- data/bin/test-scenario +11 -0
- data/bin/tribunus +7 -0
- data/{ruby/server/lib → lib}/roma/async_process.rb +105 -26
- data/{ruby/server/lib → lib}/roma/command/bg_command_receiver.rb +0 -0
- data/{ruby/server/lib → lib}/roma/command/command_definition.rb +12 -12
- data/{ruby/server/lib → lib}/roma/command/mh_command_receiver.rb +4 -4
- data/{ruby/server/lib → lib}/roma/command/receiver.rb +0 -0
- data/{ruby/server/lib → lib}/roma/command/rt_command_receiver.rb +7 -0
- data/{ruby/server/lib → lib}/roma/command/sys_command_receiver.rb +68 -3
- data/{ruby/server/lib → lib}/roma/command/util_command_receiver.rb +0 -0
- data/{ruby/server/lib → lib}/roma/command/vn_command_receiver.rb +0 -0
- data/{ruby/server/lib → lib}/roma/command_plugin.rb +0 -0
- data/{ruby/server/lib → lib}/roma/config.rb +4 -1
- data/{ruby/server/lib → lib}/roma/dns_cache.rb +0 -0
- data/{ruby/server/lib → lib}/roma/event/con_pool.rb +0 -0
- data/{ruby/server/lib → lib}/roma/event/handler.rb +0 -0
- data/{ruby/server/lib → lib}/roma/logging/rlogger.rb +61 -2
- data/{ruby/server/lib → lib}/roma/messaging/con_pool.rb +14 -0
- data/{ruby/server/lib → lib}/roma/plugin/plugin_alist.rb +0 -0
- data/{ruby/server/lib → lib}/roma/plugin/plugin_cmd_aliases.rb +0 -0
- data/{ruby/server/lib → lib}/roma/plugin/plugin_debug.rb +0 -0
- data/{ruby/server/lib → lib}/roma/plugin/plugin_gui.rb +12 -13
- data/{ruby/server/lib → lib}/roma/plugin/plugin_map.rb +0 -0
- data/{ruby/server/lib → lib}/roma/plugin/plugin_mapcount.rb +0 -0
- data/{ruby/server/lib → lib}/roma/plugin/plugin_storage.rb +11 -11
- data/{ruby/server/lib → lib}/roma/plugin/plugin_test.rb +0 -0
- data/{ruby/server/lib → lib}/roma/romad.rb +25 -1
- data/{ruby/server/lib → lib}/roma/routing/cb_rttable.rb +0 -0
- data/{ruby/server/lib → lib}/roma/routing/merkle_tree.rb +0 -0
- data/{ruby/server/lib → lib}/roma/routing/random_balancer.rb +0 -0
- data/{ruby/server/lib → lib}/roma/routing/random_partitioner.rb +0 -0
- data/{ruby/server/lib → lib}/roma/routing/routing_data.rb +0 -0
- data/{ruby/server/lib → lib}/roma/routing/rttable.rb +0 -0
- data/{ruby/server/lib → lib}/roma/stats.rb +11 -0
- data/{ruby/server/lib → lib}/roma/storage/basic_storage.rb +3 -0
- data/{ruby/server/lib → lib}/roma/storage/dbm_storage.rb +0 -0
- data/{ruby/server/lib → lib}/roma/storage/dummy_storage.rb +0 -0
- data/lib/roma/storage/groonga_storage.rb +101 -0
- data/{ruby/server/lib → lib}/roma/storage/rh_storage.rb +0 -0
- data/{ruby/server/lib → lib}/roma/storage/sqlite3_storage.rb +0 -0
- data/{ruby/server/lib → lib}/roma/storage/tc_storage.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/chg_redundancy.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/cpdb.rb +13 -2
- data/{ruby/server/lib → lib}/roma/tools/key_access.rb +1 -1
- data/{ruby/server/lib → lib}/roma/tools/key_list.rb +1 -1
- data/{ruby/server/lib → lib}/roma/tools/log_merger.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/mkconfig.rb +1 -1
- data/{ruby/server/lib → lib}/roma/tools/mkrecent.rb +1 -1
- data/{ruby/server/lib → lib}/roma/tools/mkroute.rb +5 -1
- data/{ruby/server/lib → lib}/roma/tools/multi_commander.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/recoverlost.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/recoverlost_alist.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/recoverlost_alist_all.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/recoverlost_alist_keys.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/recoverlost_lib.rb +1 -1
- data/{ruby/server/lib → lib}/roma/tools/roma_watcher.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/roma_watcher_config.yml.example +0 -0
- data/{ruby/server/lib → lib}/roma/tools/safecopy_integration_test.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/safecopy_test.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/sample_watcher.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/sample_watcher2.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/sample_watcher3.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/simple_bench.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/simple_bench2.rb +0 -0
- data/{ruby/server/lib → lib}/roma/tools/ssroute.rb +1 -1
- data/{ruby/server/lib → lib}/roma/tools/test-scenario.rb +3 -3
- data/{ruby/server/lib → lib}/roma/tools/tribunus.rb +1 -1
- data/lib/roma/version.rb +4 -0
- data/{ruby/server/lib → lib}/roma/write_behind.rb +0 -0
- data/{ruby/server/test → test}/config4mhash.rb +0 -0
- data/{ruby/server/test → test}/config4storage_error.rb +0 -0
- data/{ruby/server/test → test}/config4test.rb +0 -0
- data/{ruby/server/test → test}/rcirb.rb +0 -0
- data/{ruby/server/test → test}/roma-test-utils.rb +10 -14
- data/test/run-test.rb +20 -0
- data/{ruby/server/test → test}/storage_error_storage.rb +0 -0
- data/{ruby/server/test → test}/t_command_definition.rb +10 -10
- data/{ruby/server/test → test}/t_cpdata.rb +0 -0
- data/{ruby/server/test → test}/t_eventmachine.rb +0 -0
- data/{ruby/server/test → test}/t_listplugin.rb +9 -3
- data/{ruby/server/test → test}/t_mapcountplugin.rb +0 -0
- data/{ruby/server/test → test}/t_mapplugin.rb +9 -3
- data/{ruby/server/test → test}/t_mhash.rb +7 -7
- data/{ruby/server/test → test}/t_protocol.rb +0 -0
- data/{ruby/server/test → test}/t_rclient.rb +8 -2
- data/{ruby/server/test → test}/t_routing_data.rb +0 -0
- data/{ruby/server/test → test}/t_storage.rb +58 -26
- data/{ruby/server/test → test}/t_storage_error.rb +5 -3
- data/{ruby/server/test → test}/t_writebehind.rb +17 -17
- metadata +225 -122
- data/README +0 -17
- data/ruby/server/bin/chg_redundancy +0 -10
- data/ruby/server/bin/cpdb +0 -6
- data/ruby/server/bin/key_access +0 -7
- data/ruby/server/bin/key_list +0 -7
- data/ruby/server/bin/log_merger +0 -6
- data/ruby/server/bin/mkrecent +0 -6
- data/ruby/server/bin/mkroute +0 -6
- data/ruby/server/bin/recoverlost +0 -10
- data/ruby/server/bin/recoverlost_alist +0 -10
- data/ruby/server/bin/recoverlost_alist_all +0 -10
- data/ruby/server/bin/recoverlost_alist_keys +0 -10
- data/ruby/server/bin/roma_watcher +0 -7
- data/ruby/server/bin/safecopy_integration_test +0 -10
- data/ruby/server/bin/safecopy_test +0 -10
- data/ruby/server/bin/sample_watcher +0 -7
- data/ruby/server/bin/sample_watcher2 +0 -7
- data/ruby/server/bin/sample_watcher3 +0 -7
- data/ruby/server/bin/simple_bench +0 -11
- data/ruby/server/bin/ssroute +0 -6
- data/ruby/server/bin/test-scenario +0 -11
- data/ruby/server/bin/tribunus +0 -6
- data/ruby/server/lib/roma/version.rb +0 -4
- data/ruby/server/test/run-test.rb +0 -17
@@ -41,7 +41,7 @@ module Roma
|
|
41
41
|
end
|
42
42
|
|
43
43
|
unless @storages.key?(hname)
|
44
|
-
send_data("SERVER_ERROR #{hname}
|
44
|
+
send_data("SERVER_ERROR #{hname} does not exists.\r\n")
|
45
45
|
return
|
46
46
|
end
|
47
47
|
data = @storages[hname].get(vn, key, 0)
|
@@ -64,7 +64,7 @@ module Roma
|
|
64
64
|
end
|
65
65
|
|
66
66
|
unless @storages.key?(hname)
|
67
|
-
send_data("SERVER_ERROR #{hname}
|
67
|
+
send_data("SERVER_ERROR #{hname} does not exists.\r\n")
|
68
68
|
return
|
69
69
|
end
|
70
70
|
data = @storages[hname].get(vn, key, 0)
|
@@ -138,7 +138,7 @@ module Roma
|
|
138
138
|
return send_data("#{res}\r\n")
|
139
139
|
end
|
140
140
|
unless @storages.key?(hname)
|
141
|
-
send_data("SERVER_ERROR #{hname}
|
141
|
+
send_data("SERVER_ERROR #{hname} does not exists.\r\n")
|
142
142
|
return
|
143
143
|
end
|
144
144
|
|
@@ -180,7 +180,7 @@ module Roma
|
|
180
180
|
return send_data("SERVER_ERROR Routing table is inconsistent.\r\n")
|
181
181
|
end
|
182
182
|
unless @storages.key?(hname)
|
183
|
-
send_data("SERVER_ERROR #{hname}
|
183
|
+
send_data("SERVER_ERROR #{hname} does not exists.\r\n")
|
184
184
|
return
|
185
185
|
end
|
186
186
|
|
@@ -218,7 +218,7 @@ module Roma
|
|
218
218
|
d = Digest::SHA1.hexdigest(key).hex % @rttable.hbits
|
219
219
|
vn = @rttable.get_vnode_id(d)
|
220
220
|
unless @storages.key?(hname)
|
221
|
-
send_data("SERVER_ERROR #{hname}
|
221
|
+
send_data("SERVER_ERROR #{hname} does not exists.\r\n")
|
222
222
|
return
|
223
223
|
end
|
224
224
|
if @storages[hname].rdelete(vn, key, d, s[2].to_i)
|
@@ -319,7 +319,7 @@ module Roma
|
|
319
319
|
end
|
320
320
|
|
321
321
|
unless @storages.key?(hname)
|
322
|
-
send_data("SERVER_ERROR #{hname}
|
322
|
+
send_data("SERVER_ERROR #{hname} does not exists.\r\n")
|
323
323
|
return
|
324
324
|
end
|
325
325
|
|
@@ -358,7 +358,7 @@ module Roma
|
|
358
358
|
end
|
359
359
|
|
360
360
|
unless @storages.key?(hname)
|
361
|
-
send_data("SERVER_ERROR #{hname}
|
361
|
+
send_data("SERVER_ERROR #{hname} does not exists.\r\n")
|
362
362
|
return
|
363
363
|
end
|
364
364
|
|
@@ -413,7 +413,7 @@ module Roma
|
|
413
413
|
@log.error("forward get failed:nid=#{nid} key=#{k}")
|
414
414
|
return nil
|
415
415
|
elsif res == "END\r\n"
|
416
|
-
# value
|
416
|
+
# value does not found
|
417
417
|
elsif res.start_with?("ERROR")
|
418
418
|
@rttable.proc_succeed(nid)
|
419
419
|
con.close_connection
|
@@ -454,7 +454,7 @@ module Roma
|
|
454
454
|
def store(fnc, hname, vn, k, d, expt, v, nodes)
|
455
455
|
expt = chg_time_expt(expt)
|
456
456
|
unless @storages.key?(hname)
|
457
|
-
send_data("SERVER_ERROR #{hname}
|
457
|
+
send_data("SERVER_ERROR #{hname} does not exists.\r\n")
|
458
458
|
return
|
459
459
|
end
|
460
460
|
|
@@ -481,7 +481,7 @@ module Roma
|
|
481
481
|
def store_cas(hname, vn, k, d, clk, expt, v, nodes)
|
482
482
|
expt = chg_time_expt(expt)
|
483
483
|
unless @storages.key?(hname)
|
484
|
-
send_data("SERVER_ERROR #{hname}
|
484
|
+
send_data("SERVER_ERROR #{hname} does not exists.\r\n")
|
485
485
|
return
|
486
486
|
end
|
487
487
|
|
@@ -587,7 +587,7 @@ module Roma
|
|
587
587
|
|
588
588
|
def store_incr_decr(fnc, hname, vn, k, d, v, nodes)
|
589
589
|
unless @storages.key?(hname)
|
590
|
-
send_data("SERVER_ERROR #{hname}
|
590
|
+
send_data("SERVER_ERROR #{hname} does not exists.\r\n")
|
591
591
|
return
|
592
592
|
end
|
593
593
|
|
File without changes
|
@@ -156,12 +156,21 @@ module Roma
|
|
156
156
|
if Config.const_defined?(:DATACOPY_STREAM_COPY_WAIT_PARAM)
|
157
157
|
@stats.stream_copy_wait_param = Config::DATACOPY_STREAM_COPY_WAIT_PARAM
|
158
158
|
end
|
159
|
+
if Config.const_defined?(:LOG_STREAM_SHOW_WAIT_PARAM)
|
160
|
+
@stats.stream_show_wait_param = Config::LOG_STREAM_SHOW_WAIT_PARAM
|
161
|
+
end
|
159
162
|
if Config.const_defined?(:WB_COMMAND_MAP)
|
160
163
|
@stats.wb_command_map = Config::WB_COMMAND_MAP
|
161
164
|
end
|
162
165
|
if Config.const_defined?(:STORAGE_CLEAN_UP_INTERVAL)
|
163
166
|
@stats.clean_up_interval = Config::STORAGE_CLEAN_UP_INTERVAL
|
164
167
|
end
|
168
|
+
if Config.const_defined?(:LOG_SHIFT_SIZE)
|
169
|
+
@stats.log_shift_size = Config::LOG_SHIFT_SIZE
|
170
|
+
end
|
171
|
+
if Config.const_defined?(:LOG_SHIFT_AGE)
|
172
|
+
@stats.log_shift_age = Config::LOG_SHIFT_AGE
|
173
|
+
end
|
165
174
|
end
|
166
175
|
|
167
176
|
def initialize_connection
|
@@ -283,9 +292,16 @@ module Roma
|
|
283
292
|
|
284
293
|
opts.on("-n", "--name [name]") { |v| @stats.name = v }
|
285
294
|
|
295
|
+
##
|
296
|
+
# "--enabled_repeathost" is deplicated. We will rename it to "--replication_in_host"
|
297
|
+
##
|
286
298
|
@stats.enabled_repetition_host_in_routing = false
|
287
299
|
opts.on(nil,"--enabled_repeathost", "Allow redundancy to same host"){
|
288
300
|
@stats.enabled_repetition_host_in_routing = true
|
301
|
+
puts "Warning: \"--enabled_repeathost\" is deplicated. Please use \"--replication_in_host\""
|
302
|
+
}
|
303
|
+
opts.on(nil,"--replication_in_host", "Allow redundancy to same host"){
|
304
|
+
@stats.enabled_repetition_host_in_routing = true
|
289
305
|
}
|
290
306
|
|
291
307
|
@stats.disabled_cmd_protect = false
|
@@ -349,6 +365,7 @@ module Roma
|
|
349
365
|
st = st_class.new
|
350
366
|
st.storage_path = "#{path}/#{hname}"
|
351
367
|
st.vn_list = @rttable.vnodes
|
368
|
+
st.st_class = st_class
|
352
369
|
st.divnum = st_divnum
|
353
370
|
st.option = st_option
|
354
371
|
@storages[hname] = st
|
@@ -359,6 +376,7 @@ module Roma
|
|
359
376
|
st = st_class.new
|
360
377
|
st.storage_path = "#{path}/#{hname}"
|
361
378
|
st.vn_list = @rttable.vnodes
|
379
|
+
st.st_class = st_class
|
362
380
|
st.divnum = st_divnum
|
363
381
|
st.option = st_option
|
364
382
|
@storages[hname] = st
|
@@ -574,6 +592,12 @@ module Roma
|
|
574
592
|
end
|
575
593
|
|
576
594
|
def node_check(nid)
|
595
|
+
if @startup && @rttable.enabled_failover == false
|
596
|
+
unless Roma::Messaging::ConPool.instance.check_connection(nid)
|
597
|
+
@log.info("I'm wating for booting the #{nid} instance.")
|
598
|
+
return false
|
599
|
+
end
|
600
|
+
end
|
577
601
|
name = async_send_cmd(nid,"whoami\r\n",2)
|
578
602
|
return false unless name
|
579
603
|
if name != @stats.name
|
@@ -606,7 +630,7 @@ module Roma
|
|
606
630
|
|
607
631
|
idx=nodes.index(@stats.ap_str)
|
608
632
|
unless idx
|
609
|
-
@log.error("My node-id(=#{@stats.ap_str})
|
633
|
+
@log.error("My node-id(=#{@stats.ap_str}) does not found in the routingtable.")
|
610
634
|
EventMachine::stop_event_loop
|
611
635
|
return
|
612
636
|
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -37,6 +37,7 @@ module Roma
|
|
37
37
|
|
38
38
|
# proc param
|
39
39
|
attr_accessor :stream_copy_wait_param
|
40
|
+
attr_accessor :stream_show_wait_param
|
40
41
|
attr_accessor :dcnice
|
41
42
|
attr_accessor :clean_up_interval
|
42
43
|
|
@@ -76,6 +77,10 @@ module Roma
|
|
76
77
|
attr_accessor :gui_run_gather_logs
|
77
78
|
attr_accessor :gui_last_snapshot
|
78
79
|
|
80
|
+
# for log rotate
|
81
|
+
attr_accessor :log_shift_size
|
82
|
+
attr_accessor :log_shift_age
|
83
|
+
|
79
84
|
def initialize
|
80
85
|
@config_path = nil
|
81
86
|
@run_recover = false
|
@@ -92,6 +97,7 @@ module Roma
|
|
92
97
|
@gui_last_snapshot = []
|
93
98
|
@spushv_protection = false
|
94
99
|
@stream_copy_wait_param = 0.0001
|
100
|
+
@stream_show_wait_param = 0.001
|
95
101
|
@dcnice = 3
|
96
102
|
@clean_up_interval = 300
|
97
103
|
@enabled_vnodes_balance = nil
|
@@ -113,6 +119,8 @@ module Roma
|
|
113
119
|
@spushv_read_timeout = 100
|
114
120
|
@reqpushv_timeout_count = 300 # 0.1 * 300 sec
|
115
121
|
@routing_trans_timeout = 3600 * 3 # 3hr
|
122
|
+
@log_shift_size = 1048576
|
123
|
+
@log_shift_age = 0
|
116
124
|
end
|
117
125
|
|
118
126
|
def ap_str
|
@@ -141,6 +149,7 @@ module Roma
|
|
141
149
|
ret['stats.gui_last_snapshot'] = @gui_last_snapshot
|
142
150
|
ret['stats.spushv_protection'] = @spushv_protection
|
143
151
|
ret['stats.stream_copy_wait_param'] = @stream_copy_wait_param
|
152
|
+
ret['stats.stream_show_wait_param'] = @stream_show_wait_param
|
144
153
|
ret['stats.dcnice'] = @dcnice
|
145
154
|
ret['stats.clean_up_interval'] = @clean_up_interval
|
146
155
|
ret['stats.size_of_zredundant'] = @size_of_zredundant
|
@@ -160,6 +169,8 @@ module Roma
|
|
160
169
|
ret['stats.spushv_read_timeout'] = @spushv_read_timeout
|
161
170
|
ret['stats.reqpushv_timeout_count'] = @reqpushv_timeout_count
|
162
171
|
ret['stats.routing_trans_timeout'] = @routing_trans_timeout
|
172
|
+
ret['stats.log_shift_size'] = @log_shift_size
|
173
|
+
ret['stats.log_shift_age'] = @log_shift_age
|
163
174
|
ret
|
164
175
|
end
|
165
176
|
|
@@ -18,6 +18,7 @@ module Roma
|
|
18
18
|
attr_writer :storage_path
|
19
19
|
attr_writer :option
|
20
20
|
|
21
|
+
attr_accessor :st_class
|
21
22
|
attr_accessor :divnum
|
22
23
|
attr_accessor :each_vn_dump_sleep
|
23
24
|
attr_accessor :each_vn_dump_sleep_count
|
@@ -42,6 +43,7 @@ module Roma
|
|
42
43
|
|
43
44
|
@ext_name = 'db'
|
44
45
|
|
46
|
+
@st_class = nil
|
45
47
|
@divnum = 10
|
46
48
|
|
47
49
|
@each_vn_dump_sleep = 0.001
|
@@ -58,6 +60,7 @@ module Roma
|
|
58
60
|
def get_stat
|
59
61
|
ret = {}
|
60
62
|
ret['storage.storage_path'] = File.expand_path(@storage_path)
|
63
|
+
ret['storage.st_class'] = @st_class.to_s.match(/Roma::Storage::(.*)/)[1]
|
61
64
|
ret['storage.divnum'] = @divnum
|
62
65
|
ret['storage.option'] = @option
|
63
66
|
ret['storage.each_vn_dump_sleep'] = @each_vn_dump_sleep
|
File without changes
|
File without changes
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'groonga'
|
2
|
+
require 'roma/storage/basic_storage'
|
3
|
+
|
4
|
+
module Roma
|
5
|
+
module Storage
|
6
|
+
|
7
|
+
class GroongaStorage < BasicStorage
|
8
|
+
def initialize
|
9
|
+
super
|
10
|
+
@ext_name = 'grn'
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_stat
|
14
|
+
ret = super
|
15
|
+
@hdb.each_with_index do |hdb, i|
|
16
|
+
ret["storage[#{i}].path"] = File.expand_path(hdb.path)
|
17
|
+
ret["storage[#{i}].rnum"] = hdb.rnum
|
18
|
+
end
|
19
|
+
ret
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
def open_db(fname)
|
24
|
+
hdb = GroongaHash.new(fname)
|
25
|
+
hdb.open
|
26
|
+
hdb
|
27
|
+
end
|
28
|
+
|
29
|
+
def close_db(hdb)
|
30
|
+
hdb.close
|
31
|
+
end
|
32
|
+
|
33
|
+
class GroongaHash
|
34
|
+
def initialize(fname)
|
35
|
+
@fname = fname
|
36
|
+
end
|
37
|
+
|
38
|
+
def path
|
39
|
+
@hash.path
|
40
|
+
end
|
41
|
+
|
42
|
+
def put(key, value)
|
43
|
+
record = @hash.add(key)
|
44
|
+
@value[record.id] = value
|
45
|
+
end
|
46
|
+
|
47
|
+
def get(key)
|
48
|
+
record = @hash[key]
|
49
|
+
return nil if record.nil?
|
50
|
+
@value[record.id]
|
51
|
+
end
|
52
|
+
|
53
|
+
def out(key)
|
54
|
+
record = @hash[key]
|
55
|
+
if record
|
56
|
+
record.delete
|
57
|
+
true
|
58
|
+
else
|
59
|
+
false
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def rnum
|
64
|
+
@hash.count
|
65
|
+
end
|
66
|
+
|
67
|
+
def each
|
68
|
+
@hash.each do |record|
|
69
|
+
yield(record.key, @value[record.id])
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def open
|
74
|
+
@context = Groonga::Context.new(:encoding => :none)
|
75
|
+
if File.exist?(@fname)
|
76
|
+
@database = Groonga::Database.new(@fname, :context => @context)
|
77
|
+
else
|
78
|
+
@database = Groonga::Database.create(:context => @context,
|
79
|
+
:path => @fname)
|
80
|
+
Groonga::Schema.define(:context => @context) do |schema|
|
81
|
+
schema.create_table("hash",
|
82
|
+
:type => :hash,
|
83
|
+
:key_type => "ShortText") do |table|
|
84
|
+
table.text("value")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
@hash = @context["hash"]
|
90
|
+
@value = @hash.column("value")
|
91
|
+
end
|
92
|
+
|
93
|
+
def close
|
94
|
+
@database.close
|
95
|
+
@context.close
|
96
|
+
@hash = @value = @database = @context = nil
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end # class GroongaStorage
|
100
|
+
end # module Storage
|
101
|
+
end # module Roma
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -19,6 +19,16 @@ module Roma
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
def check_storage_type
|
23
|
+
stats('st_class') do |line|
|
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}"
|
27
|
+
exit
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
22
32
|
def backup(hname)
|
23
33
|
stat = get_safecopy_stats(hname)
|
24
34
|
if stat.uniq != [:normal]
|
@@ -93,8 +103,8 @@ module Roma
|
|
93
103
|
@con.gets
|
94
104
|
end
|
95
105
|
|
96
|
-
def stats
|
97
|
-
@con.puts "stat
|
106
|
+
def stats(regexp = "storage")
|
107
|
+
@con.puts "stat #{regexp}\r\n"
|
98
108
|
yield $_ while @con.gets != "END\r\n"
|
99
109
|
end
|
100
110
|
|
@@ -114,6 +124,7 @@ end
|
|
114
124
|
sc = Roma::SafeCopy.new("localhost", ARGV[0].to_i)
|
115
125
|
|
116
126
|
begin
|
127
|
+
sc.check_storage_type
|
117
128
|
sc.backup_all
|
118
129
|
sc.set_gui_last_snapshot
|
119
130
|
ensure
|
File without changes
|
@@ -359,7 +359,7 @@ module Roma
|
|
359
359
|
|
360
360
|
skip.call if @next_hash == "menu" || @next_hash == "server" || @next_hash == "fd_server" || @next_hash == "check_plugin"
|
361
361
|
break if end?(@base[@next_hash])
|
362
|
-
puts "if you
|
362
|
+
puts "if you doesn't input anything, default value is set."
|
363
363
|
Box.print_with_box(@defaults)
|
364
364
|
print_status(@results)
|
365
365
|
@base.print_question(@next_hash)
|
@@ -16,7 +16,11 @@ opts.banner = "usage:#{File.basename($0)} [options] node-id..."
|
|
16
16
|
opts.on("-h","--hash [bits]","(default=32)"){|v| dgst_bits = v.to_i }
|
17
17
|
opts.on("-d","--divide [bits]","(default=9)"){|v| div_bits = v.to_i }
|
18
18
|
opts.on("-r","--redundant [num]","(default=2)"){|v| rn = v.to_i }
|
19
|
-
opts.on(nil,"--enabled_repeathost"){|v|
|
19
|
+
opts.on(nil,"--enabled_repeathost"){|v|
|
20
|
+
repeathost=true
|
21
|
+
puts "Warning: \"--enabled_repeathost\" is deplicated. Please use \"--replication_in_host\""
|
22
|
+
}
|
23
|
+
opts.on(nil,"--replication_in_host"){|v| repeathost=true }
|
20
24
|
opts.parse!(ARGV)
|
21
25
|
|
22
26
|
nodes = ARGV
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -110,7 +110,7 @@ module Roma
|
|
110
110
|
def init_roma
|
111
111
|
@log.debug "begin init_roma"
|
112
112
|
exec "rm -f localhost_1121?.*"
|
113
|
-
exec "bin/mkroute -d 7 #{RomaProc.to_str(@roma_procs)} --
|
113
|
+
exec "bin/mkroute -d 7 #{RomaProc.to_str(@roma_procs)} --replication_in_host"
|
114
114
|
@log.debug "end init_roma"
|
115
115
|
end
|
116
116
|
|
@@ -124,7 +124,7 @@ module Roma
|
|
124
124
|
|
125
125
|
def start_roma_proc i
|
126
126
|
@log.debug "begin start_roma_proc"
|
127
|
-
str = "bin/romad #{@roma_procs[i].addr} -p #{@roma_procs[i].port.to_s} -d --
|
127
|
+
str = "bin/romad #{@roma_procs[i].addr} -p #{@roma_procs[i].port.to_s} -d --replication_in_host"
|
128
128
|
exec str
|
129
129
|
@roma_procs[i].pid = get_pid(str)
|
130
130
|
@log.debug "end start_roma_proc"
|
@@ -313,7 +313,7 @@ cnf = Roma::Test::Config.new(ARGV)
|
|
313
313
|
# check for a working path
|
314
314
|
unless File::exist?("#{cnf.working_path}/bin/romad")
|
315
315
|
# in invalid path
|
316
|
-
$stderr.puts "#{cnf.working_path}/bin/romad
|
316
|
+
$stderr.puts "#{cnf.working_path}/bin/romad does't found"
|
317
317
|
$stderr.puts "You should set to a working path option(-p)."
|
318
318
|
exit 1
|
319
319
|
end
|
@@ -6,7 +6,7 @@ UDP_PORT=14329
|
|
6
6
|
MULTICAST_ADDR="225.0.0.123"
|
7
7
|
ROMA_LOAD_PATH=File.expand_path(File.join(File.dirname(__FILE__),"../.."))
|
8
8
|
RUBY_COMMAND_OPTIONS=["-I",ROMA_LOAD_PATH]
|
9
|
-
ROMAD_OPTIONS=["--
|
9
|
+
ROMAD_OPTIONS=["--replication_in_host"]
|
10
10
|
bin_dir=File.expand_path(File.join(File.dirname(__FILE__),"../../../bin"))
|
11
11
|
ROMAD_PATH= File.expand_path(File.join(bin_dir,"romad"))
|
12
12
|
MKROUTE_PATH= File.expand_path(File.join(bin_dir,"mkroute"))
|
data/lib/roma/version.rb
ADDED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -8,27 +8,23 @@ require 'roma/messaging/con_pool'
|
|
8
8
|
module RomaTestUtils
|
9
9
|
module_function
|
10
10
|
def base_dir
|
11
|
-
Pathname(__FILE__).dirname.parent.
|
11
|
+
Pathname(__FILE__).dirname.parent.expand_path
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
base_dir + "
|
14
|
+
def bin_dir
|
15
|
+
base_dir + "bin"
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
def server_test_dir
|
23
|
-
server_base_dir + "test"
|
18
|
+
def test_dir
|
19
|
+
base_dir + "test"
|
24
20
|
end
|
25
21
|
|
26
22
|
def mkroute_path
|
27
|
-
(
|
23
|
+
(bin_dir + "mkroute").to_s
|
28
24
|
end
|
29
25
|
|
30
26
|
def romad_path
|
31
|
-
(
|
27
|
+
(bin_dir + "romad").to_s
|
32
28
|
end
|
33
29
|
|
34
30
|
def ruby_path
|
@@ -48,7 +44,7 @@ module RomaTestUtils
|
|
48
44
|
sh.system(ruby_path, mkroute_path,
|
49
45
|
"localhost_11211","localhost_11212",
|
50
46
|
"-d","3",
|
51
|
-
"--
|
47
|
+
"--replication_in_host")
|
52
48
|
sleep 0.2
|
53
49
|
do_command_romad conf
|
54
50
|
sleep 1
|
@@ -57,9 +53,9 @@ module RomaTestUtils
|
|
57
53
|
def do_command_romad conf
|
58
54
|
sh = Shell.new
|
59
55
|
sh.system(ruby_path,romad_path,"localhost","-p","11211","-d","--verbose",
|
60
|
-
"--disabled_cmd_protect","--config","#{
|
56
|
+
"--disabled_cmd_protect","--config","#{test_dir}/#{conf}")
|
61
57
|
sh.system(ruby_path,romad_path,"localhost","-p","11212","-d","--verbose",
|
62
|
-
"--disabled_cmd_protect","--config","#{
|
58
|
+
"--disabled_cmd_protect","--config","#{test_dir}/#{conf}")
|
63
59
|
end
|
64
60
|
|
65
61
|
def stop_roma
|
data/test/run-test.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'pathname'
|
5
|
+
|
6
|
+
base_path = Pathname(__FILE__).dirname.parent.expand_path
|
7
|
+
|
8
|
+
$LOAD_PATH.unshift("#{base_path}/lib")
|
9
|
+
$LOAD_PATH.unshift("#{base_path}/test")
|
10
|
+
|
11
|
+
client_base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
|
12
|
+
$LOAD_PATH.unshift("#{client_base_path}/roma-ruby-client/lib")
|
13
|
+
|
14
|
+
require 'roma-test-utils'
|
15
|
+
|
16
|
+
Dir["#{base_path}/test/t_*.rb"].each do |test_file|
|
17
|
+
require File.basename(test_file, '*.rb')
|
18
|
+
end
|
19
|
+
|
20
|
+
exit(Test::Unit::AutoRunner.run)
|
File without changes
|