roma 0.8.13 → 0.8.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.
- checksums.yaml +7 -0
- data/CHANGELOG +20 -0
- data/Gemfile +17 -0
- data/Rakefile +2 -2
- data/ruby/server/bin/cpdb +6 -0
- data/ruby/server/bin/safecopy_integration_test +10 -0
- data/ruby/server/bin/safecopy_test +10 -0
- data/ruby/server/lib/roma/async_process.rb +87 -3
- data/ruby/server/lib/roma/command/sys_command_receiver.rb +181 -5
- data/ruby/server/lib/roma/command/vn_command_receiver.rb +9 -3
- data/ruby/server/lib/roma/event/con_pool.rb +1 -1
- data/ruby/server/lib/roma/event/handler.rb +11 -5
- data/ruby/server/lib/roma/messaging/con_pool.rb +1 -1
- data/ruby/server/lib/roma/romad.rb +3 -1
- data/ruby/server/lib/roma/stats.rb +19 -1
- data/ruby/server/lib/roma/storage/basic_storage.rb +342 -82
- data/ruby/server/lib/roma/storage/dummy_storage.rb +0 -2
- data/ruby/server/lib/roma/storage/rh_storage.rb +13 -12
- data/ruby/server/lib/roma/storage/sqlite3_storage.rb +4 -0
- data/ruby/server/lib/roma/storage/tc_storage.rb +6 -20
- data/ruby/server/lib/roma/tools/cpdb.rb +103 -0
- data/ruby/server/lib/roma/tools/safecopy_integration_test.rb +247 -0
- data/ruby/server/lib/roma/tools/safecopy_test.rb +184 -0
- data/ruby/server/lib/roma/tools/simple_bench.rb +16 -16
- data/ruby/server/lib/roma/version.rb +1 -1
- data/ruby/server/test/t_storage.rb +223 -41
- metadata +25 -20
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: eaf529b1a3ec8c250e906ce4b360cc694455159d
|
4
|
+
data.tar.gz: f566d3a0c29055ac384683ec5c7859723b9fc091
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0d259866eb0fc71effe35310966a706bc2517959ed8d37fe793bc3bbf77ccb55b24815df765c1f90945ce397f4e8f63df8be28342290c97fe69aa9190db63af4
|
7
|
+
data.tar.gz: e7ac00f6f5a1db6e4ebfdc17e1170ae431d0a15211ec92c3b978fd1003d33b479822f0dcb0e0aff38e949f2aab8ca1e4155d4c75f074b38934d62a7908dbca1f
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
+
*0.8.14 (Mar 26 2014)*
|
2
|
+
|
3
|
+
* add timeout parameter for a vnode copy [junji torii] 0522750
|
4
|
+
* add command to change routing_trans_timeout [Rui Bando] 8247698
|
5
|
+
* Added command to change klength and vlength limit when vnode copy [Paras Patel] fd14206
|
6
|
+
* Add spushv_read_timeout and reqpushv_timeout_count set Method [Paras Patel] 264d3ec
|
7
|
+
* fix : add rescue in timer_event_1sec [junji torii] 11cc4ea
|
8
|
+
* fix : warning of class variable access from toplevel(for adjust Ruby2.1.1) [junji torii] 9df1a5c
|
9
|
+
* fix : modify default value(nil -> false) of autorecover func [hiroaki-iwase] 30b18c5
|
10
|
+
* add snapshot function [junji torii] 2ab928f
|
11
|
+
* add safecopy_integration_test for snapshot [hiroaki-iwase] 8e799c1
|
12
|
+
|
13
|
+
*0.8.13-p1 (Jan 15 2014)*
|
14
|
+
|
15
|
+
* add timeout parameter for a vnode copy [junji torii] 0522750
|
16
|
+
* remove some debug log [hiroaki-iwase] 94d96dc
|
17
|
+
* Add Gemfile. [Hiroki Matsue] 9029bf8
|
18
|
+
* Ignore test related files. [Hiroki Matsue] 556a931
|
19
|
+
* fix:add rescue in timer_event_1sec [junji torii] 11cc4ea
|
20
|
+
|
1
21
|
*0.8.13 (Sep 12 2013)*
|
2
22
|
|
3
23
|
* change target ruby version about encoding problem (upper 1.9.2 => upper 1.9.1) [hiroaki-iwase] e56d2f4
|
data/Gemfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gem 'eventmachine'
|
4
|
+
|
5
|
+
# Back-end storages
|
6
|
+
group :tokyocabinet do
|
7
|
+
gem 'tokyocabinet', :git => 'https://github.com/roma/tokyocabinet-ruby.git'
|
8
|
+
end
|
9
|
+
|
10
|
+
group :gdbm do
|
11
|
+
gem 'ffi'
|
12
|
+
gem 'gdbm'
|
13
|
+
end
|
14
|
+
|
15
|
+
group :sqlite3 do
|
16
|
+
gem 'sqlite3'
|
17
|
+
end
|
data/Rakefile
CHANGED
@@ -39,8 +39,8 @@ EXEC_TABLE = Dir.entries(base + 'bin').reject{ |d| d =~ /^\.+$/ || d =~ /^sample
|
|
39
39
|
require File.expand_path(File.join('ruby', 'server', 'lib', 'roma', 'version'), File.dirname(__FILE__))
|
40
40
|
VER_NUM = Roma::VERSION
|
41
41
|
|
42
|
-
if VER_NUM =~ /([0-9.]+)$/
|
43
|
-
CURRENT_VERSION = $1
|
42
|
+
if VER_NUM =~ /([0-9.p-]+)$/
|
43
|
+
CURRENT_VERSION = $1.delete("-")
|
44
44
|
else
|
45
45
|
CURRENT_VERSION = "0.0.0"
|
46
46
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
|
5
|
+
$LOAD_PATH.unshift("#{base_path}/server/lib")
|
6
|
+
|
7
|
+
client_base_path = Pathname(__FILE__).dirname.parent.parent.parent.parent.expand_path
|
8
|
+
$LOAD_PATH.unshift("#{client_base_path}/roma-ruby-client/lib")
|
9
|
+
|
10
|
+
require 'roma/tools/safecopy_integration_test'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
base_path = Pathname(__FILE__).dirname.parent.parent.expand_path
|
5
|
+
$LOAD_PATH.unshift("#{base_path}/server/lib")
|
6
|
+
|
7
|
+
client_base_path = Pathname(__FILE__).dirname.parent.parent.parent.parent.expand_path
|
8
|
+
$LOAD_PATH.unshift("#{client_base_path}/roma-ruby-client/lib")
|
9
|
+
|
10
|
+
require 'roma/tools/safecopy_test'
|
@@ -462,11 +462,11 @@ module Roma
|
|
462
462
|
Roma::Messaging::ConPool.instance.return_connection(src_nid,con)
|
463
463
|
# waiting for pushv
|
464
464
|
count = 0
|
465
|
-
while @rttable.search_nodes(vn).include?(@stats.ap_str)==false && count <
|
465
|
+
while @rttable.search_nodes(vn).include?(@stats.ap_str)==false && count < @stats.reqpushv_timeout_count
|
466
466
|
sleep 0.1
|
467
467
|
count += 1
|
468
468
|
end
|
469
|
-
if count >=
|
469
|
+
if count >= @stats.reqpushv_timeout_count
|
470
470
|
@log.warn("#{__method__}:request has been time-out.vn=#{vn} nid=#{src_nid}")
|
471
471
|
return :timeout
|
472
472
|
end
|
@@ -748,7 +748,7 @@ module Roma
|
|
748
748
|
@log.error("#{__method__}:#{e.inspect} #{$@}")
|
749
749
|
|
750
750
|
ensure
|
751
|
-
if @stats.latency_check_time_count
|
751
|
+
if @stats.latency_check_time_count && Time.now.to_i - @stats.latency_data[cmd]["time"] > @stats.latency_check_time_count
|
752
752
|
average = @stats.latency_data[cmd]["latency"].inject(0.0){|r,i| r+=i }/@stats.latency_data[cmd]["latency"].size
|
753
753
|
max = @stats.latency_data[cmd]["latency_max"]["current"]
|
754
754
|
min = @stats.latency_data[cmd]["latency_min"]["current"]
|
@@ -770,6 +770,90 @@ module Roma
|
|
770
770
|
true
|
771
771
|
end
|
772
772
|
|
773
|
+
def asyncev_start_storage_flush_process(args)
|
774
|
+
hname, dn = args
|
775
|
+
@log.debug("#{__method__} #{args.inspect}")
|
776
|
+
|
777
|
+
st = @storages[hname]
|
778
|
+
if st.dbs[dn] != :safecopy_flushing
|
779
|
+
@log.error("Can not flush storage. stat = #{st.dbs[dn]}")
|
780
|
+
return true
|
781
|
+
end
|
782
|
+
t = Thread::new do
|
783
|
+
begin
|
784
|
+
st.flush_db(dn)
|
785
|
+
st.set_db_stat(dn,:safecopy_flushed)
|
786
|
+
@log.info("#{__method__}:storage has flushed. (#{hname}, #{dn})")
|
787
|
+
rescue =>e
|
788
|
+
@log.error("#{__method__}:#{e.inspect} #{$@}")
|
789
|
+
ensure
|
790
|
+
end
|
791
|
+
end
|
792
|
+
t[:name] = __method__
|
793
|
+
true
|
794
|
+
end
|
795
|
+
|
796
|
+
def asyncev_start_storage_cachecleaning_process(args)
|
797
|
+
hname, dn = args
|
798
|
+
@log.debug("#{__method__} #{args.inspect}")
|
799
|
+
|
800
|
+
st = @storages[hname]
|
801
|
+
if st.dbs[dn] != :cachecleaning
|
802
|
+
@log.error("Can not start cachecleaning process. stat = #{st.dbs[dn]}")
|
803
|
+
return true
|
804
|
+
end
|
805
|
+
t = Thread::new do
|
806
|
+
begin
|
807
|
+
storage_cachecleaning_process(hname, dn)
|
808
|
+
rescue =>e
|
809
|
+
@log.error("#{__method__}:#{e.inspect} #{$@}")
|
810
|
+
ensure
|
811
|
+
end
|
812
|
+
end
|
813
|
+
t[:name] = __method__
|
814
|
+
true
|
815
|
+
end
|
816
|
+
|
817
|
+
def storage_cachecleaning_process(hname, dn)
|
818
|
+
count = 0
|
819
|
+
rcount = 0
|
820
|
+
st = @storages[hname]
|
821
|
+
|
822
|
+
@do_storage_cachecleaning_process = true
|
823
|
+
loop do
|
824
|
+
# get keys in a cache up to 100 kyes
|
825
|
+
keys = st.get_keys_in_cache(dn)
|
826
|
+
break if keys == nil || keys.length == 0
|
827
|
+
break unless @do_storage_cachecleaning_process
|
828
|
+
|
829
|
+
# @log.debug("#{__method__}:#{keys.length} keys found")
|
830
|
+
|
831
|
+
# copy cache -> db
|
832
|
+
st.each_cache_by_keys(dn, keys) do |vn, last, clk, expt, k, v|
|
833
|
+
break unless @do_storage_cachecleaning_process
|
834
|
+
if st.load_stream_dump_for_cachecleaning(vn, last, clk, expt, k, v)
|
835
|
+
count += 1
|
836
|
+
# @log.debug("#{__method__}:[#{vn} #{last} #{clk} #{expt} #{k}] was stored.")
|
837
|
+
else
|
838
|
+
rcount += 1
|
839
|
+
# @log.debug("#{__method__}:[#{vn} #{last} #{clk} #{expt} #{k}] was rejected.")
|
840
|
+
end
|
841
|
+
end
|
842
|
+
|
843
|
+
# remove keys in a cache
|
844
|
+
keys.each { |key| st.out_cache(dn, key) }
|
845
|
+
end
|
846
|
+
if @do_storage_cachecleaning_process == false
|
847
|
+
@log.warn("#{__method__}:uncompleted")
|
848
|
+
else
|
849
|
+
st.set_db_stat(dn,:normal)
|
850
|
+
end
|
851
|
+
@log.debug("#{__method__}:#{count} keys loaded.")
|
852
|
+
@log.debug("#{__method__}:#{rcount} keys rejected.") if rcount > 0
|
853
|
+
ensure
|
854
|
+
@do_storage_cachecleaning_process = false
|
855
|
+
end
|
856
|
+
|
773
857
|
end # module AsyncProcess
|
774
858
|
|
775
859
|
end # module Roma
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'roma/async_process'
|
1
2
|
|
2
3
|
module Roma
|
3
4
|
module Command
|
@@ -430,7 +431,7 @@ module Roma
|
|
430
431
|
res[@stats.ap_str] = "ACTIVATED"
|
431
432
|
elsif s[1] =="off"
|
432
433
|
@stats.latency_check_cmd = [] #reset
|
433
|
-
@stats.latency_check_time_count =
|
434
|
+
@stats.latency_check_time_count = false
|
434
435
|
@stats.latency_log = false
|
435
436
|
res[@stats.ap_str] = "DEACTIVATED"
|
436
437
|
end
|
@@ -459,13 +460,13 @@ module Roma
|
|
459
460
|
s.each_index {|idx|
|
460
461
|
@stats.latency_check_cmd.push(s[idx]) if idx >= 3
|
461
462
|
}
|
462
|
-
@stats.latency_check_time_count = s[
|
463
|
+
@stats.latency_check_time_count = s[2].to_i
|
463
464
|
@stats.latency_log = true
|
464
465
|
send_data("ACTIVATED\r\n")
|
465
466
|
elsif s[1] =="off"
|
466
467
|
@latency_data = Hash.new { |hash,key| hash[key] = {}}
|
467
468
|
@stats.latency_check_cmd = []
|
468
|
-
@stats.latency_check_time_count =
|
469
|
+
@stats.latency_check_time_count = false
|
469
470
|
@stats.latency_log = false
|
470
471
|
send_data("DEACTIVATED\r\n")
|
471
472
|
end
|
@@ -581,7 +582,7 @@ module Roma
|
|
581
582
|
@stats.latency_check_time_count = s[1].to_i
|
582
583
|
@stats.latency_log = true
|
583
584
|
elsif s[1] == "nil"
|
584
|
-
@stats.latency_check_time_count =
|
585
|
+
@stats.latency_check_time_count = false
|
585
586
|
@stats.latency_log = false
|
586
587
|
end
|
587
588
|
res[@stats.ap_str] = "CHANGED"
|
@@ -599,7 +600,7 @@ module Roma
|
|
599
600
|
@stats.latency_check_time_count = s[1].to_i
|
600
601
|
@stats.latency_log = true
|
601
602
|
elsif s[1] == "nil"
|
602
|
-
@stats.latency_check_time_count =
|
603
|
+
@stats.latency_check_time_count = false
|
603
604
|
@stats.latency_log = false
|
604
605
|
end
|
605
606
|
@stats.latency_check_time_count = s[1].to_i
|
@@ -828,6 +829,138 @@ module Roma
|
|
828
829
|
send_data("STORED\r\n")
|
829
830
|
end
|
830
831
|
|
832
|
+
# set_routing_trans_timeout <sec>
|
833
|
+
def ev_set_routing_trans_timeout(s)
|
834
|
+
if s.length != 2
|
835
|
+
return send_data("CLIENT_ERROR number of arguments\n\r")
|
836
|
+
end
|
837
|
+
if s[1].to_f <= 0
|
838
|
+
return send_data("CLIENT_ERROR time value must be lager than 0\r\n")
|
839
|
+
end
|
840
|
+
res = broadcast_cmd("rset_routing_trans_timeout #{s[1]}\r\n")
|
841
|
+
@stats.routing_trans_timeout = s[1].to_f
|
842
|
+
res[@stats.ap_str] = "STORED"
|
843
|
+
|
844
|
+
send_data("#{res}\r\n")
|
845
|
+
end
|
846
|
+
|
847
|
+
# rset_set_routing_trans_timeout <sec>
|
848
|
+
def ev_rset_routing_trans_timeout(s)
|
849
|
+
if s.length != 2
|
850
|
+
return send_data("CLIENT_ERROR number of arguments\n\r")
|
851
|
+
end
|
852
|
+
if s[1].to_f <= 0
|
853
|
+
return send_data("CLIENT_ERROR time value must be lager than 0\r\n")
|
854
|
+
end
|
855
|
+
@stats.routing_trans_timeout = s[1].to_f
|
856
|
+
|
857
|
+
send_data("STORED\r\n")
|
858
|
+
end
|
859
|
+
|
860
|
+
# set_spushv_read_timeout <sec>
|
861
|
+
def ev_set_spushv_read_timeout(s)
|
862
|
+
if s.length != 2
|
863
|
+
return send_data("CLIENT_ERROR number of arguments\n\r")
|
864
|
+
end
|
865
|
+
if s[1].to_i <= 0
|
866
|
+
return send_data("CLIENT_ERROR time value must be lager than 0\r\n")
|
867
|
+
end
|
868
|
+
res = broadcast_cmd("rset_spushv_read_timeout #{s[1]}\r\n")
|
869
|
+
@stats.spushv_read_timeout = s[1].to_i
|
870
|
+
res[@stats.ap_str] = "STORED"
|
871
|
+
send_data("#{res}\r\n")
|
872
|
+
end
|
873
|
+
|
874
|
+
# rset_spushv_read_timeout <sec>
|
875
|
+
def ev_rset_spushv_read_timeout(s)
|
876
|
+
if s.length != 2
|
877
|
+
return send_data("CLIENT_ERROR number of arguments\n\r")
|
878
|
+
end
|
879
|
+
if s[1].to_i <= 0
|
880
|
+
return send_data("CLIENT_ERROR time value must be lager than 0\r\n")
|
881
|
+
end
|
882
|
+
@stats.spushv_read_timeout = s[1].to_i
|
883
|
+
send_data("STORED\r\n")
|
884
|
+
end
|
885
|
+
|
886
|
+
# set_reqpushv_timeout_count <sec>
|
887
|
+
def ev_set_reqpushv_timeout_count(s)
|
888
|
+
if s.length != 2
|
889
|
+
return send_data("CLIENT_ERROR number of arguments\n\r")
|
890
|
+
end
|
891
|
+
if s[1].to_i <= 0
|
892
|
+
return send_data("CLIENT_ERROR time value must be lager than 0\r\n")
|
893
|
+
end
|
894
|
+
res = broadcast_cmd("rset_reqpushv_timeout_count #{s[1]}\r\n")
|
895
|
+
@stats.reqpushv_timeout_count = s[1].to_i
|
896
|
+
res[@stats.ap_str] = "STORED"
|
897
|
+
send_data("#{res}\r\n")
|
898
|
+
end
|
899
|
+
|
900
|
+
# ev_rset_reqpushv_timeout_count <sec>
|
901
|
+
def ev_rset_reqpushv_timeout_count(s)
|
902
|
+
if s.length != 2
|
903
|
+
return send_data("CLIENT_ERROR number of arguments\n\r")
|
904
|
+
end
|
905
|
+
if s[1].to_i <= 0
|
906
|
+
return send_data("CLIENT_ERROR time value must be lager than 0\r\n")
|
907
|
+
end
|
908
|
+
@stats.reqpushv_timeout_count = s[1].to_i
|
909
|
+
send_data("STORED\r\n")
|
910
|
+
end
|
911
|
+
|
912
|
+
# set_spushv_klength_warn <byte>
|
913
|
+
def ev_set_spushv_klength_warn(s)
|
914
|
+
if s.length != 2
|
915
|
+
return send_data("CLIENT_ERROR number of arguments\n\r")
|
916
|
+
end
|
917
|
+
if s[1].to_i <= 0
|
918
|
+
return send_data("CLIENT_ERROR size value must be larger than 0 \r\n")
|
919
|
+
end
|
920
|
+
res = broadcast_cmd("rset_spushv_klength_warn #{s[1]}\r\n")
|
921
|
+
@stats.spushv_klength_warn = s[1].to_i
|
922
|
+
res[@stats.ap_str] = "STORED"
|
923
|
+
send_data("#{res}\r\n")
|
924
|
+
end
|
925
|
+
|
926
|
+
# rset_set_spushv_klength_warn <byte>
|
927
|
+
def ev_rset_spushv_klength_warn(s)
|
928
|
+
if s.length != 2
|
929
|
+
return send_data("CLIENT_ERROR number of arguments\n\r")
|
930
|
+
end
|
931
|
+
if s[1].to_i <= 0
|
932
|
+
return send_data("CLIENT_ERROR size value must be larger than 0 \r\n")
|
933
|
+
end
|
934
|
+
@stats.spushv_klength_warn = s[1].to_i
|
935
|
+
send_data("STORED\r\n")
|
936
|
+
end
|
937
|
+
|
938
|
+
# set_spushv_vlength_warn <byte>
|
939
|
+
def ev_set_spushv_vlength_warn(s)
|
940
|
+
if s.length != 2
|
941
|
+
return send_data("CLIENT_ERROR number of arguments\n\r")
|
942
|
+
end
|
943
|
+
if s[1].to_i <= 0
|
944
|
+
return send_data("CLIENT_ERROR size value must be larger than 0 \r\n")
|
945
|
+
end
|
946
|
+
res = broadcast_cmd("rset_spushv_vlength_warn #{s[1]}\r\n")
|
947
|
+
@stats.spushv_vlength_warn = s[1].to_i
|
948
|
+
res[@stats.ap_str] = "STORED"
|
949
|
+
send_data("#{res}\r\n")
|
950
|
+
end
|
951
|
+
|
952
|
+
# rset_set_spushv_vlength_warn <byte>
|
953
|
+
def ev_rset_spushv_vlength_warn(s)
|
954
|
+
if s.length != 2
|
955
|
+
return send_data("CLIENT_ERROR number of arguments\n\r")
|
956
|
+
end
|
957
|
+
if s[1].to_i <= 0
|
958
|
+
return send_data("CLIENT_ERROR size value must be larger than 0\r\n")
|
959
|
+
end
|
960
|
+
@stats.spushv_vlength_warn = s[1].to_i
|
961
|
+
send_data("STORED\r\n")
|
962
|
+
end
|
963
|
+
|
831
964
|
# wb_command_map <hash string>
|
832
965
|
# ex.
|
833
966
|
# {:set=>1,:append=>2,:delete=>3}
|
@@ -895,6 +1028,48 @@ module Roma
|
|
895
1028
|
send_data("STORED\r\n")
|
896
1029
|
end
|
897
1030
|
|
1031
|
+
# set_storage_status [number of file][safecopy|normal]{hash_name}
|
1032
|
+
def ev_set_storage_status(s)
|
1033
|
+
if s.length < 3
|
1034
|
+
return send_data("CLIENT_ERROR number of arguments (#{s.length - 1} for 2)\r\n")
|
1035
|
+
end
|
1036
|
+
|
1037
|
+
if s.length >= 4
|
1038
|
+
hname = s[3]
|
1039
|
+
else
|
1040
|
+
hname = 'roma'
|
1041
|
+
end
|
1042
|
+
st = @storages[hname]
|
1043
|
+
unless st
|
1044
|
+
return send_data("CLIENT_ERROR hash_name = #{hanme} dose not found\r\n")
|
1045
|
+
end
|
1046
|
+
dn = s[1].to_i
|
1047
|
+
if st.divnum <= dn
|
1048
|
+
return send_data("CLIENT_ERROR divnum <= #{dn}\r\n")
|
1049
|
+
end
|
1050
|
+
if s[2] == 'safecopy'
|
1051
|
+
if st.dbs[dn] != :normal
|
1052
|
+
return send_data("CLIENT_ERROR storage[#{dn}] != :normal status\r\n")
|
1053
|
+
end
|
1054
|
+
if st.set_db_stat(dn, :safecopy_flushing) == false
|
1055
|
+
return send_data("CLIENT_ERROR storage[#{dn}] != :normal status\r\n")
|
1056
|
+
end
|
1057
|
+
Roma::AsyncProcess::queue.push(Roma::AsyncMessage.new('start_storage_flush_process',[hname, dn]))
|
1058
|
+
elsif s[2] == 'normal'
|
1059
|
+
if st.dbs[dn] != :safecopy_flushed
|
1060
|
+
return send_data("CLIENT_ERROR storage[#{dn}] != :safecopy_flushed status\r\n")
|
1061
|
+
end
|
1062
|
+
if st.set_db_stat(dn, :cachecleaning) == false
|
1063
|
+
return send_data("CLIENT_ERROR storage[#{dn}] != :safecopy_flushed status\r\n")
|
1064
|
+
end
|
1065
|
+
Roma::AsyncProcess::queue.push(Roma::AsyncMessage.new('start_storage_cachecleaning_process',[hname, dn]))
|
1066
|
+
else
|
1067
|
+
return send_data("CLIENT_ERROR status parse error\r\n")
|
1068
|
+
end
|
1069
|
+
|
1070
|
+
send_data("PUSHED\r\n")
|
1071
|
+
end
|
1072
|
+
|
898
1073
|
private
|
899
1074
|
|
900
1075
|
def dcnice(p)
|
@@ -960,3 +1135,4 @@ module Roma
|
|
960
1135
|
end # module SystemCommandReceiver
|
961
1136
|
end # module Command
|
962
1137
|
end # module Roma
|
1138
|
+
|
@@ -45,14 +45,20 @@ module Roma
|
|
45
45
|
count = rcount = 0
|
46
46
|
@log.debug("#{__method__}:#{s.inspect} received.")
|
47
47
|
loop {
|
48
|
-
context_bin = read_bytes(20,
|
48
|
+
context_bin = read_bytes(20, @stats.spushv_read_timeout)
|
49
49
|
vn, last, clk, expt, klen = context_bin.unpack('NNNNN')
|
50
50
|
break if klen == 0 # end of dump ?
|
51
51
|
k = read_bytes(klen)
|
52
|
-
vlen_bin = read_bytes(4,
|
52
|
+
vlen_bin = read_bytes(4, @stats.spushv_read_timeout)
|
53
53
|
vlen, = vlen_bin.unpack('N')
|
54
54
|
if vlen != 0
|
55
|
-
|
55
|
+
if klen > @stats.spushv_klength_warn
|
56
|
+
@log.warn("#{__method__}:Too long key: key = #{k}")
|
57
|
+
end
|
58
|
+
if vlen > @stats.spushv_vlength_warn
|
59
|
+
@log.warn("#{__method__}:Too long value: key = #{k} vlen = #{vlen}")
|
60
|
+
end
|
61
|
+
v = read_bytes(vlen, @stats.spushv_read_timeout)
|
56
62
|
|
57
63
|
createhash(s[1]) unless @storages[s[1]]
|
58
64
|
if @storages[s[1]].load_stream_dump(vn, last, clk, expt, k, v)
|