roma 1.0.0 → 1.1.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 (143) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +42 -2
  3. data/Gemfile +1 -15
  4. data/LICENSE +1 -1
  5. data/README.md +78 -0
  6. data/Rakefile +1 -62
  7. data/bin/chg_redundancy +10 -0
  8. data/bin/cpdb +7 -0
  9. data/bin/key_access +7 -0
  10. data/bin/key_list +7 -0
  11. data/bin/log_merger +7 -0
  12. data/{ruby/server/bin → bin}/mkconfig +3 -1
  13. data/bin/mkrecent +7 -0
  14. data/bin/mkroute +7 -0
  15. data/{ruby/server/bin → bin}/multi_commander +4 -3
  16. data/bin/recoverlost +11 -0
  17. data/bin/recoverlost_alist +10 -0
  18. data/bin/recoverlost_alist_all +10 -0
  19. data/bin/recoverlost_alist_keys +10 -0
  20. data/bin/roma_watcher +10 -0
  21. data/{ruby/server/bin → bin}/romad +3 -2
  22. data/bin/safecopy_integration_test +10 -0
  23. data/bin/safecopy_test +10 -0
  24. data/bin/sample_watcher +10 -0
  25. data/bin/sample_watcher2 +10 -0
  26. data/bin/sample_watcher3 +10 -0
  27. data/bin/simple_bench +11 -0
  28. data/bin/ssroute +10 -0
  29. data/bin/tc_data_restore.rb +123 -0
  30. data/bin/test-scenario +11 -0
  31. data/bin/tribunus +7 -0
  32. data/{ruby/server/lib → lib}/roma/async_process.rb +105 -26
  33. data/{ruby/server/lib → lib}/roma/command/bg_command_receiver.rb +0 -0
  34. data/{ruby/server/lib → lib}/roma/command/command_definition.rb +12 -12
  35. data/{ruby/server/lib → lib}/roma/command/mh_command_receiver.rb +4 -4
  36. data/{ruby/server/lib → lib}/roma/command/receiver.rb +0 -0
  37. data/{ruby/server/lib → lib}/roma/command/rt_command_receiver.rb +7 -0
  38. data/{ruby/server/lib → lib}/roma/command/sys_command_receiver.rb +68 -3
  39. data/{ruby/server/lib → lib}/roma/command/util_command_receiver.rb +0 -0
  40. data/{ruby/server/lib → lib}/roma/command/vn_command_receiver.rb +0 -0
  41. data/{ruby/server/lib → lib}/roma/command_plugin.rb +0 -0
  42. data/{ruby/server/lib → lib}/roma/config.rb +4 -1
  43. data/{ruby/server/lib → lib}/roma/dns_cache.rb +0 -0
  44. data/{ruby/server/lib → lib}/roma/event/con_pool.rb +0 -0
  45. data/{ruby/server/lib → lib}/roma/event/handler.rb +0 -0
  46. data/{ruby/server/lib → lib}/roma/logging/rlogger.rb +61 -2
  47. data/{ruby/server/lib → lib}/roma/messaging/con_pool.rb +14 -0
  48. data/{ruby/server/lib → lib}/roma/plugin/plugin_alist.rb +0 -0
  49. data/{ruby/server/lib → lib}/roma/plugin/plugin_cmd_aliases.rb +0 -0
  50. data/{ruby/server/lib → lib}/roma/plugin/plugin_debug.rb +0 -0
  51. data/{ruby/server/lib → lib}/roma/plugin/plugin_gui.rb +12 -13
  52. data/{ruby/server/lib → lib}/roma/plugin/plugin_map.rb +0 -0
  53. data/{ruby/server/lib → lib}/roma/plugin/plugin_mapcount.rb +0 -0
  54. data/{ruby/server/lib → lib}/roma/plugin/plugin_storage.rb +11 -11
  55. data/{ruby/server/lib → lib}/roma/plugin/plugin_test.rb +0 -0
  56. data/{ruby/server/lib → lib}/roma/romad.rb +25 -1
  57. data/{ruby/server/lib → lib}/roma/routing/cb_rttable.rb +0 -0
  58. data/{ruby/server/lib → lib}/roma/routing/merkle_tree.rb +0 -0
  59. data/{ruby/server/lib → lib}/roma/routing/random_balancer.rb +0 -0
  60. data/{ruby/server/lib → lib}/roma/routing/random_partitioner.rb +0 -0
  61. data/{ruby/server/lib → lib}/roma/routing/routing_data.rb +0 -0
  62. data/{ruby/server/lib → lib}/roma/routing/rttable.rb +0 -0
  63. data/{ruby/server/lib → lib}/roma/stats.rb +11 -0
  64. data/{ruby/server/lib → lib}/roma/storage/basic_storage.rb +3 -0
  65. data/{ruby/server/lib → lib}/roma/storage/dbm_storage.rb +0 -0
  66. data/{ruby/server/lib → lib}/roma/storage/dummy_storage.rb +0 -0
  67. data/lib/roma/storage/groonga_storage.rb +101 -0
  68. data/{ruby/server/lib → lib}/roma/storage/rh_storage.rb +0 -0
  69. data/{ruby/server/lib → lib}/roma/storage/sqlite3_storage.rb +0 -0
  70. data/{ruby/server/lib → lib}/roma/storage/tc_storage.rb +0 -0
  71. data/{ruby/server/lib → lib}/roma/tools/chg_redundancy.rb +0 -0
  72. data/{ruby/server/lib → lib}/roma/tools/cpdb.rb +13 -2
  73. data/{ruby/server/lib → lib}/roma/tools/key_access.rb +1 -1
  74. data/{ruby/server/lib → lib}/roma/tools/key_list.rb +1 -1
  75. data/{ruby/server/lib → lib}/roma/tools/log_merger.rb +0 -0
  76. data/{ruby/server/lib → lib}/roma/tools/mkconfig.rb +1 -1
  77. data/{ruby/server/lib → lib}/roma/tools/mkrecent.rb +1 -1
  78. data/{ruby/server/lib → lib}/roma/tools/mkroute.rb +5 -1
  79. data/{ruby/server/lib → lib}/roma/tools/multi_commander.rb +0 -0
  80. data/{ruby/server/lib → lib}/roma/tools/recoverlost.rb +0 -0
  81. data/{ruby/server/lib → lib}/roma/tools/recoverlost_alist.rb +0 -0
  82. data/{ruby/server/lib → lib}/roma/tools/recoverlost_alist_all.rb +0 -0
  83. data/{ruby/server/lib → lib}/roma/tools/recoverlost_alist_keys.rb +0 -0
  84. data/{ruby/server/lib → lib}/roma/tools/recoverlost_lib.rb +1 -1
  85. data/{ruby/server/lib → lib}/roma/tools/roma_watcher.rb +0 -0
  86. data/{ruby/server/lib → lib}/roma/tools/roma_watcher_config.yml.example +0 -0
  87. data/{ruby/server/lib → lib}/roma/tools/safecopy_integration_test.rb +0 -0
  88. data/{ruby/server/lib → lib}/roma/tools/safecopy_test.rb +0 -0
  89. data/{ruby/server/lib → lib}/roma/tools/sample_watcher.rb +0 -0
  90. data/{ruby/server/lib → lib}/roma/tools/sample_watcher2.rb +0 -0
  91. data/{ruby/server/lib → lib}/roma/tools/sample_watcher3.rb +0 -0
  92. data/{ruby/server/lib → lib}/roma/tools/simple_bench.rb +0 -0
  93. data/{ruby/server/lib → lib}/roma/tools/simple_bench2.rb +0 -0
  94. data/{ruby/server/lib → lib}/roma/tools/ssroute.rb +1 -1
  95. data/{ruby/server/lib → lib}/roma/tools/test-scenario.rb +3 -3
  96. data/{ruby/server/lib → lib}/roma/tools/tribunus.rb +1 -1
  97. data/lib/roma/version.rb +4 -0
  98. data/{ruby/server/lib → lib}/roma/write_behind.rb +0 -0
  99. data/{ruby/server/test → test}/config4mhash.rb +0 -0
  100. data/{ruby/server/test → test}/config4storage_error.rb +0 -0
  101. data/{ruby/server/test → test}/config4test.rb +0 -0
  102. data/{ruby/server/test → test}/rcirb.rb +0 -0
  103. data/{ruby/server/test → test}/roma-test-utils.rb +10 -14
  104. data/test/run-test.rb +20 -0
  105. data/{ruby/server/test → test}/storage_error_storage.rb +0 -0
  106. data/{ruby/server/test → test}/t_command_definition.rb +10 -10
  107. data/{ruby/server/test → test}/t_cpdata.rb +0 -0
  108. data/{ruby/server/test → test}/t_eventmachine.rb +0 -0
  109. data/{ruby/server/test → test}/t_listplugin.rb +9 -3
  110. data/{ruby/server/test → test}/t_mapcountplugin.rb +0 -0
  111. data/{ruby/server/test → test}/t_mapplugin.rb +9 -3
  112. data/{ruby/server/test → test}/t_mhash.rb +7 -7
  113. data/{ruby/server/test → test}/t_protocol.rb +0 -0
  114. data/{ruby/server/test → test}/t_rclient.rb +8 -2
  115. data/{ruby/server/test → test}/t_routing_data.rb +0 -0
  116. data/{ruby/server/test → test}/t_storage.rb +58 -26
  117. data/{ruby/server/test → test}/t_storage_error.rb +5 -3
  118. data/{ruby/server/test → test}/t_writebehind.rb +17 -17
  119. metadata +225 -122
  120. data/README +0 -17
  121. data/ruby/server/bin/chg_redundancy +0 -10
  122. data/ruby/server/bin/cpdb +0 -6
  123. data/ruby/server/bin/key_access +0 -7
  124. data/ruby/server/bin/key_list +0 -7
  125. data/ruby/server/bin/log_merger +0 -6
  126. data/ruby/server/bin/mkrecent +0 -6
  127. data/ruby/server/bin/mkroute +0 -6
  128. data/ruby/server/bin/recoverlost +0 -10
  129. data/ruby/server/bin/recoverlost_alist +0 -10
  130. data/ruby/server/bin/recoverlost_alist_all +0 -10
  131. data/ruby/server/bin/recoverlost_alist_keys +0 -10
  132. data/ruby/server/bin/roma_watcher +0 -7
  133. data/ruby/server/bin/safecopy_integration_test +0 -10
  134. data/ruby/server/bin/safecopy_test +0 -10
  135. data/ruby/server/bin/sample_watcher +0 -7
  136. data/ruby/server/bin/sample_watcher2 +0 -7
  137. data/ruby/server/bin/sample_watcher3 +0 -7
  138. data/ruby/server/bin/simple_bench +0 -11
  139. data/ruby/server/bin/ssroute +0 -6
  140. data/ruby/server/bin/test-scenario +0 -11
  141. data/ruby/server/bin/tribunus +0 -6
  142. data/ruby/server/lib/roma/version.rb +0 -4
  143. data/ruby/server/test/run-test.rb +0 -17
@@ -197,7 +197,7 @@ module Roma
197
197
  nid,hname,k,d,clk,expt,v = args
198
198
  @log.debug("#{__method__} #{args.inspect}")
199
199
  unless @rttable.nodes.include?(nid)
200
- @log.warn("async redundant failed:#{nid} dose not found in routing table.#{k}\e#{hname} #{d} #{clk} #{expt} #{v.length}")
200
+ @log.warn("async redundant failed:#{nid} does not found in routing table.#{k}\e#{hname} #{d} #{clk} #{expt} #{v.length}")
201
201
  return true # no retry
202
202
  end
203
203
  res = async_send_cmd(nid,"rset #{k}\e#{hname} #{d} #{clk} #{expt} #{v.length}\r\n#{v}\r\n",10)
@@ -212,7 +212,7 @@ module Roma
212
212
  nid,hname,k,d,clk,expt,zv = args
213
213
  @log.debug("#{__method__} #{args.inspect}")
214
214
  unless @rttable.nodes.include?(nid)
215
- @log.warn("async zredundant failed:#{nid} dose not found in routing table.#{k}\e#{hname} #{d} #{clk} #{expt} #{zv.length}")
215
+ @log.warn("async zredundant failed:#{nid} does not found in routing table.#{k}\e#{hname} #{d} #{clk} #{expt} #{zv.length}")
216
216
  return true # no retry
217
217
  end
218
218
  res = async_send_cmd(nid,"rzset #{k}\e#{hname} #{d} #{clk} #{expt} #{zv.length}\r\n#{zv}\r\n",10)
@@ -227,7 +227,7 @@ module Roma
227
227
  nid,hname,k,clk = args
228
228
  @log.debug("#{__method__} #{args.inspect}")
229
229
  unless @rttable.nodes.include?(nid)
230
- @log.warn("async rdelete failed:#{nid} dose not found in routing table.#{k}\e#{hname} #{clk}")
230
+ @log.warn("async rdelete failed:#{nid} does not found in routing table.#{k}\e#{hname} #{clk}")
231
231
  return true # no retry
232
232
  end
233
233
  res = async_send_cmd(nid,"rdelete #{k}\e#{hname} #{clk}\r\n",10)
@@ -400,7 +400,7 @@ module Roma
400
400
 
401
401
  vn, nodes, is_primary = @rttable.select_vn_for_join(exclude_nodes)
402
402
  unless vn
403
- @log.warn("#{__method__}:vnode dose not found")
403
+ @log.warn("#{__method__}:vnode does not found")
404
404
  return false
405
405
  end
406
406
  ret = req_push_a_vnode(vn, nodes[0], is_primary)
@@ -430,7 +430,7 @@ module Roma
430
430
 
431
431
  vn, nodes, is_primary = @rttable.select_vn_for_balance(exclude_nodes)
432
432
  unless vn
433
- @log.warn("#{__method__}:vnode dose not found")
433
+ @log.warn("#{__method__}:vnode does not found")
434
434
  return false
435
435
  end
436
436
  ret = req_push_a_vnode(vn, nodes[0], is_primary)
@@ -749,6 +749,15 @@ module Roma
749
749
  if count>0
750
750
  @log.info("#{__method__}:#{count} keys deleted.")
751
751
  end
752
+
753
+ # delete @rttable.logs
754
+ if @stats.gui_run_gather_logs || @rttable.logs.empty?
755
+ false
756
+ else
757
+ gathered_time = @rttable.logs[0]
758
+ # delete gathering log data after 5min
759
+ @rttable.logs.clear if gathered_time.to_i < Time.now.to_i - (60 * 5)
760
+ end
752
761
  ensure
753
762
  @log.info("#{__method__}:stop")
754
763
  end
@@ -936,31 +945,23 @@ module Roma
936
945
  log_path = Config::LOG_PATH
937
946
  log_file = "#{log_path}/#{@stats.ap_str}.log"
938
947
 
939
- raw_logs = []
940
- start_time = Time.now
948
+ target_logs = []
941
949
  File.open(log_file){|f|
942
- f.each_line{|line|
943
- # hilatency check
944
- ps = Time.now - start_time
945
- if ps > 5
946
- @log.warn("gather_logs process was failed.")
947
- raise
948
- end
949
-
950
- raw_logs << line unless line.chomp == '.'
951
- }
950
+ start_point = get_point(f, args[0], 'start')
951
+ end_point = get_point(f, args[1], 'end')
952
+
953
+ ## read target logs
954
+ f.seek(start_point, IO::SEEK_SET)
955
+ target_logs = f.read(end_point - start_point)
956
+ target_logs = target_logs.each_line.map(&:chomp)
957
+ target_logs.delete('.')
952
958
  }
953
959
 
954
- sliced_logs = []
955
- if raw_logs.size > args[0]
956
- sliced_logs = raw_logs.slice(-args[0]..-1)
957
- else
958
- raw_logs.shift # remove first line(date of log file was created)
959
- sliced_logs = raw_logs
960
- end
960
+ @rttable.logs = target_logs
961
+ # set gathered date for expiration
962
+ @rttable.logs.unshift(Time.now)
961
963
 
962
- @rttable.logs = sliced_logs
963
- @log.info("#{__method__} has done.")
964
+ @log.debug("#{__method__} has done.")
964
965
  rescue =>e
965
966
  @rttable.logs = []
966
967
  @log.error("#{e}\n#{$@}")
@@ -968,6 +969,84 @@ module Roma
968
969
  @stats.gui_run_gather_logs = false
969
970
  end
970
971
 
972
+ def get_point(f, target_time, type, latency_time=Time.now, current_pos=0, new_pos=f.size/2)
973
+ # hilatency check
974
+ ps = Time.now - latency_time
975
+ if ps > 5
976
+ @log.warn("gather_logs process was failed.")
977
+ raise
978
+ end
979
+
980
+ # initialize read size
981
+ read_size = 2048
982
+
983
+ # first check
984
+ unless target_time.class == Time
985
+ # in case of not set end_date
986
+ return f.size if target_time == 'current'
987
+
988
+ target_time =~ (/(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)/)
989
+ target_time = Time.mktime($1, $2, $3, $4, $5, $6, 000000)
990
+
991
+ # check outrange or not
992
+ f.seek(0, IO::SEEK_SET)
993
+ begining_log = f.read(read_size)
994
+ pos = begining_log.index(/[IDEW],\s\[(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)\.(\d+)/)
995
+ begining_time = Time.mktime($1, $2, $3, $4, $5, $6, $7)
996
+
997
+ f.seek(-read_size, IO::SEEK_END)
998
+ end_log = f.read(read_size)
999
+ pos = end_log.rindex(/[IDEW],\s\[(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)\.(\d+)/)
1000
+ end_time = Time.mktime($1, $2, $3, $4, $5, $6, $7)
1001
+
1002
+ case type
1003
+ when 'start'
1004
+ if target_time < begining_time
1005
+ return 0
1006
+ elsif target_time > end_time
1007
+ @log.error("irregular time was set.")
1008
+ raise
1009
+ end
1010
+ when 'end'
1011
+ if target_time > end_time
1012
+ return f.size
1013
+ elsif target_time < begining_time
1014
+ @log.error("irregular time was set.")
1015
+ raise
1016
+ end
1017
+ end
1018
+ end
1019
+
1020
+ # read half sector size
1021
+ f.seek(new_pos, IO::SEEK_SET)
1022
+ sector_log = f.read(read_size)
1023
+ # grep date
1024
+ date_a = sector_log.scan(/[IDEW],\s\[(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)\.(\d+)/)
1025
+
1026
+ time_a = []
1027
+ date_a.each{|time|
1028
+ time_a.push(Time.mktime(time[0], time[1], time[2], time[3], time[4], time[5], time[6]))
1029
+ }
1030
+ sector_time_first = time_a[0]
1031
+ sector_time_last = time_a[-1]
1032
+
1033
+ if target_time.between?(sector_time_first, sector_time_last)
1034
+ time_a.each{|time|
1035
+ if target_time <= time
1036
+ time_string = time.strftime("%Y-%m-%dT%H:%M:%S")
1037
+ target_index = sector_log.index(/[IDEW],\s\[#{time_string}/)
1038
+ return new_pos + target_index
1039
+ end
1040
+ }
1041
+ elsif sector_time_first > target_time
1042
+ target_pos = new_pos - ((new_pos - current_pos).abs / 2)
1043
+ elsif sector_time_first < target_time
1044
+ target_pos = new_pos + ((new_pos - current_pos).abs / 2)
1045
+ end
1046
+
1047
+ get_point(f, target_time, type, latency_time, new_pos, target_pos)
1048
+ end
1049
+
971
1050
  end # module AsyncProcess
972
1051
 
973
1052
  end # module Roma
@@ -57,7 +57,7 @@ module Roma
57
57
 
58
58
  def def_read_command_with_key(cmd, forward = :one_line, &block)
59
59
  define_method "ev_#{cmd}" do |s|
60
- return send_data("CLIENT_ERROR dose not find key\r\n") if s.length < 2
60
+ return send_data("CLIENT_ERROR does not find key\r\n") if s.length < 2
61
61
  begin
62
62
  params = CommandParams.new
63
63
  params.key, params.hash_name = s[1].split("\e")
@@ -74,7 +74,7 @@ module Roma
74
74
  end
75
75
  stored = StoredData.new
76
76
  unless @storages[params.hash_name]
77
- return send_data("SERVER_ERROR #{params.hash_name} dose not exists.\r\n")
77
+ return send_data("SERVER_ERROR #{params.hash_name} does not exists.\r\n")
78
78
  end
79
79
 
80
80
  stored.vn, stored.last, stored.clk, stored.expt, stored.value =
@@ -96,7 +96,7 @@ module Roma
96
96
 
97
97
  def def_write_command_with_key(cmd, forward = :one_line, &block)
98
98
  define_method "ev_#{cmd}" do |s|
99
- return send_data("CLIENT_ERROR dose not find key\r\n") if s.length < 2
99
+ return send_data("CLIENT_ERROR does not find key\r\n") if s.length < 2
100
100
  begin
101
101
  params = CommandParams.new
102
102
  params.key, params.hash_name = s[1].split("\e")
@@ -113,7 +113,7 @@ module Roma
113
113
  end
114
114
  stored = StoredData.new
115
115
  unless @storages[params.hash_name]
116
- return send_data("SERVER_ERROR #{params.hash_name} dose not exists.\r\n")
116
+ return send_data("SERVER_ERROR #{params.hash_name} does not exists.\r\n")
117
117
  end
118
118
 
119
119
  stored.vn, stored.last, stored.clk, stored.expt, stored.value =
@@ -167,7 +167,7 @@ module Roma
167
167
 
168
168
  def def_command_with_key(cmd, forward = :one_line, &block)
169
169
  define_method "ev_#{cmd}" do |s|
170
- return send_data("CLIENT_ERROR dose not find key\r\n") if s.length < 2
170
+ return send_data("CLIENT_ERROR does not find key\r\n") if s.length < 2
171
171
  begin
172
172
  params = CommandParams.new
173
173
  params.key, params.hash_name = s[1].split("\e")
@@ -184,7 +184,7 @@ module Roma
184
184
  end
185
185
  stored = StoredData.new
186
186
  unless @storages[params.hash_name]
187
- return send_data("SERVER_ERROR #{params.hash_name} dose not exists.\r\n")
187
+ return send_data("SERVER_ERROR #{params.hash_name} does not exists.\r\n")
188
188
  end
189
189
 
190
190
  stored.vn, stored.last, stored.clk, stored.expt, stored.value =
@@ -205,7 +205,7 @@ module Roma
205
205
 
206
206
  def def_write_command_with_key_value(cmd, idx_of_val_len, forward = :one_line, &block)
207
207
  define_method "ev_#{cmd}" do |s|
208
- return send_data("CLIENT_ERROR dose not find key\r\n") if s.length < 2
208
+ return send_data("CLIENT_ERROR does not find key\r\n") if s.length < 2
209
209
  begin
210
210
  params = CommandParams.new
211
211
  params.key, params.hash_name = s[1].split("\e")
@@ -224,7 +224,7 @@ module Roma
224
224
  end
225
225
  stored = StoredData.new
226
226
  unless @storages[params.hash_name]
227
- return send_data("SERVER_ERROR #{params.hash_name} dose not exists.\r\n")
227
+ return send_data("SERVER_ERROR #{params.hash_name} does not exists.\r\n")
228
228
  end
229
229
 
230
230
  stored.vn, stored.last, stored.clk, stored.expt, stored.value =
@@ -280,7 +280,7 @@ module Roma
280
280
 
281
281
  def def_read_command_with_key_value(cmd, idx_of_val_len, forward = :one_line, &block)
282
282
  define_method "ev_#{cmd}" do |s|
283
- return send_data("CLIENT_ERROR dose not find key\r\n") if s.length < 2
283
+ return send_data("CLIENT_ERROR does not find key\r\n") if s.length < 2
284
284
  begin
285
285
  params = CommandParams.new
286
286
  params.key, params.hash_name = s[1].split("\e")
@@ -299,7 +299,7 @@ module Roma
299
299
  end
300
300
  stored = StoredData.new
301
301
  unless @storages[params.hash_name]
302
- return send_data("SERVER_ERROR #{params.hash_name} dose not exists.\r\n")
302
+ return send_data("SERVER_ERROR #{params.hash_name} does not exists.\r\n")
303
303
  end
304
304
 
305
305
  stored.vn, stored.last, stored.clk, stored.expt, stored.value =
@@ -322,7 +322,7 @@ module Roma
322
322
 
323
323
  def def_command_with_key_value(cmd, idx_of_val_len, forward = :one_line, &block)
324
324
  define_method "ev_#{cmd}" do |s|
325
- return send_data("CLIENT_ERROR dose not find key\r\n") if s.length < 2
325
+ return send_data("CLIENT_ERROR does not find key\r\n") if s.length < 2
326
326
  begin
327
327
  params = CommandParams.new
328
328
  params.key, params.hash_name = s[1].split("\e")
@@ -341,7 +341,7 @@ module Roma
341
341
  end
342
342
  stored = StoredData.new
343
343
  unless @storages[params.hash_name]
344
- return send_data("SERVER_ERROR #{params.hash_name} dose not exists.\r\n")
344
+ return send_data("SERVER_ERROR #{params.hash_name} does not exists.\r\n")
345
345
  end
346
346
 
347
347
  stored.vn, stored.last, stored.clk, stored.expt, stored.value =
@@ -16,7 +16,7 @@ module Roma
16
16
  else
17
17
  unless @storages.key?(s[1])
18
18
  raise(Roma::Command::Definition::ClientErrorException,
19
- "#{s[1]} dose not find.")
19
+ "#{s[1]} does not find.")
20
20
  end
21
21
  @defhash = s[1]
22
22
  "STORED"
@@ -36,7 +36,7 @@ module Roma
36
36
  # check a directory existence
37
37
  unless File.directory? "#{Config::STORAGE_PATH}/#{@stats.ap_str}/#{s[1]}"
38
38
  raise(Roma::Command::Definition::ServerErrorException,
39
- "#{s[1]} dose not find.")
39
+ "#{s[1]} does not find.")
40
40
  end
41
41
  createhash(s[1], 'MOUNTED')
42
42
  end
@@ -49,7 +49,7 @@ module Roma
49
49
  end
50
50
  unless @storages.key?(s[1])
51
51
  raise(Roma::Command::Definition::ServerErrorException,
52
- "#{s[1]} dose not find.")
52
+ "#{s[1]} does not find.")
53
53
  end
54
54
  umounthash(s[1])
55
55
  end
@@ -112,7 +112,7 @@ module Roma
112
112
  return "SERVER_ERROR default hash can't unmount."
113
113
  end
114
114
  unless @storages.key?(hname)
115
- return "SERVER_ERROR #{hname} dose not exists."
115
+ return "SERVER_ERROR #{hname} does not exists."
116
116
  end
117
117
  st = @storages[hname]
118
118
  @storages.delete(hname)
File without changes
@@ -80,6 +80,13 @@ module Roma
80
80
  else
81
81
  nids=[]
82
82
  s[3..-1].each{ |nid| nids << nid }
83
+ # check irregular node name
84
+ nids.each{ |nid|
85
+ if !nid.ascii_only? || nid.empty?
86
+ send_data("CLIENT_ERROR : irregular node name was input.[\"#{nid}\"]\r\n")
87
+ return
88
+ end
89
+ }
83
90
  res=@rttable.set_route(s[1].to_i, s[2].to_i, nids)
84
91
  if res.is_a?(Integer)
85
92
  send_data("STORED\r\n")
@@ -277,7 +277,7 @@ module Roma
277
277
  read_bytes(2)
278
278
  vn = @rttable.get_vnode_id(d)
279
279
  unless @storages.key?(hname)
280
- send_data("SERVER_ERROR #{hname} dose not exists.\r\n")
280
+ send_data("SERVER_ERROR #{hname} does not exists.\r\n")
281
281
  return
282
282
  end
283
283
  if @storages[hname].rset(vn, key, d, s[3].to_i, s[4].to_i, data)
@@ -300,7 +300,7 @@ module Roma
300
300
  read_bytes(2)
301
301
  vn = @rttable.get_vnode_id(d)
302
302
  unless @storages.key?(hname)
303
- send_data("SERVER_ERROR #{hname} dose not exists.\r\n")
303
+ send_data("SERVER_ERROR #{hname} does not exists.\r\n")
304
304
  return
305
305
  end
306
306
 
@@ -1041,7 +1041,7 @@ module Roma
1041
1041
  end
1042
1042
  st = @storages[hname]
1043
1043
  unless st
1044
- return send_data("CLIENT_ERROR hash_name = #{hanme} dose not found\r\n")
1044
+ return send_data("CLIENT_ERROR hash_name = #{hanme} does not found\r\n")
1045
1045
  end
1046
1046
  dn = s[1].to_i
1047
1047
  if st.divnum <= dn
@@ -1132,6 +1132,71 @@ module Roma
1132
1132
  }
1133
1133
  end
1134
1134
 
1135
+ # set_log_shift_size <size>
1136
+ def ev_set_log_shift_size(s)
1137
+ if s.length != 2
1138
+ return send_data("CLIENT_ERROR number of arguments\r\n")
1139
+ elsif s[1].to_i < 1
1140
+ return send_data("CLIENT_ERROR length must be greater than zero\r\n")
1141
+ end
1142
+
1143
+ res = broadcast_cmd("rset_log_shift_size #{s[1]}\r\n")
1144
+ @log.set_log_shift_size(s[1].to_i)
1145
+ @stats.log_shift_size = s[1].to_i
1146
+ res[@stats.ap_str] = "STORED"
1147
+ send_data("#{res}\r\n")
1148
+ end
1149
+
1150
+ def ev_rset_log_shift_size(s)
1151
+ if s.length != 2
1152
+ return send_data("CLIENT_ERROR number of arguments\r\n")
1153
+ elsif s[1].to_i < 1
1154
+ return send_data("CLIENT_ERROR length must be greater than zero\r\n")
1155
+ end
1156
+
1157
+ @log.set_log_shift_size(s[1].to_i)
1158
+ @stats.log_shift_size = s[1].to_i
1159
+ send_data("STORED\r\n")
1160
+ end
1161
+
1162
+ # set_log_shift_age <age>
1163
+ def ev_set_log_shift_age(s)
1164
+ if s.length != 2
1165
+ return send_data("CLIENT_ERROR number of arguments\r\n")
1166
+ elsif s[1].to_i < 1 && !['0', 'min', 'hour', 'daily', 'weekly', 'monthly'].include?(s[1])
1167
+ return send_data("CLIENT_ERROR invalid arguments\r\n")
1168
+ end
1169
+
1170
+ res = broadcast_cmd("rset_log_shift_age #{s[1]}\r\n")
1171
+
1172
+ if s[1].to_i > 0 || s[1] == '0'
1173
+ @log.set_log_shift_age(s[1].to_i)
1174
+ @stats.log_shift_age = s[1].to_i
1175
+ else
1176
+ @log.set_log_shift_age(s[1])
1177
+ @stats.log_shift_age = s[1]
1178
+ end
1179
+ res[@stats.ap_str] = "STORED"
1180
+ send_data("#{res}\r\n")
1181
+ end
1182
+
1183
+ def ev_rset_log_shift_age(s)
1184
+ if s.length != 2
1185
+ return send_data("CLIENT_ERROR number of arguments\r\n")
1186
+ elsif s[1].to_i < 1 && !['0', 'min', 'hour', 'daily', 'weekly', 'monthly'].include?(s[1])
1187
+ return send_data("CLIENT_ERROR invalid arguments\r\n")
1188
+ end
1189
+
1190
+ if s[1].to_i > 0 || s[1] == '0'
1191
+ @log.set_log_shift_age(s[1].to_i)
1192
+ @stats.log_shift_age = s[1].to_i
1193
+ else
1194
+ @log.set_log_shift_age(s[1])
1195
+ @stats.log_shift_age = s[1]
1196
+ end
1197
+ send_data("STORED\r\n")
1198
+ end
1199
+
1135
1200
  private
1136
1201
 
1137
1202
  def dcnice(p)
File without changes
@@ -75,6 +75,9 @@ module Roma
75
75
  # data copy setting
76
76
  DATACOPY_STREAM_COPY_WAIT_PARAM = 0.001
77
77
 
78
+ # show logs setting
79
+ LOG_STREAM_SHOW_WAIT_PARAM = 0.001
80
+
78
81
  # plugin setting
79
82
  PLUGIN_FILES = ['plugin_storage.rb']
80
83
 
@@ -85,7 +88,7 @@ module Roma
85
88
  # redundant setting
86
89
  # REDUNDANT_ZREDUNDANT_SIZE is a option for a redundancy of compressed data.
87
90
  # when the data size is more then REDUNDANT_ZREDUNDANT_SIZE, data compression is done.
88
- # however, it dose't in case of REDUNDANT_ZREDUNDANT_SIZE is zero.
91
+ # however, it does't in case of REDUNDANT_ZREDUNDANT_SIZE is zero.
89
92
  REDUNDANT_ZREDUNDANT_SIZE = 0
90
93
 
91
94
  end
File without changes
File without changes
File without changes
@@ -24,13 +24,64 @@ module Roma
24
24
  module ExtLogDev
25
25
  def extendLogDev()
26
26
  if @logdev
27
+ @logdev.extend(ExtCheckShift)
27
28
  @logdev.extend(ExtShiftAge)
29
+ @logdev.extend(AddSetShiftAge)
30
+ @logdev.extend(AddSetShiftSize)
31
+ end
32
+ end
33
+
34
+ def set_shift_age(age)
35
+ if @logdev
36
+ @logdev.set_shift_age(age)
37
+ end
38
+ end
39
+
40
+ def set_shift_size(size)
41
+ if @logdev
42
+ @logdev.set_shift_size(size)
43
+ end
44
+ end
45
+ end
46
+
47
+ module AddSetShiftAge
48
+ def set_shift_age(age)
49
+ if @shift_age
50
+ @shift_age = age
51
+ end
52
+ end
53
+ end
54
+
55
+ module AddSetShiftSize
56
+ def set_shift_size(size)
57
+ if @shift_size
58
+ @shift_size = size
28
59
  end
29
60
  end
30
61
  end
62
+
63
+ module ExtCheckShift
64
+ private
65
+
66
+ def check_shift_log
67
+ if @shift_age.is_a?(Integer)
68
+ # Note: always returns false if '0'.
69
+ if @filename && (@shift_age > 0) && (@dev.stat.size > @shift_size)
70
+ lock_shift_log { shift_log_age }
71
+ end
72
+ else
73
+ now = Time.now
74
+ period_end = previous_period_end(now)
75
+ if @dev.stat.mtime.to_i <= period_end.to_i
76
+ lock_shift_log { shift_log_period(period_end) }
77
+ end
78
+ end
79
+ end
80
+ end
31
81
 
32
82
  module ExtShiftAge
33
83
  private
84
+
34
85
  def shift_log_period(now)
35
86
  postfix = previous_period_end(now).strftime("%Y%m%d%H%M")
36
87
  age_file = "#{@filename}.#{postfix}"
@@ -95,7 +146,7 @@ module Roma
95
146
  @wrap_logger.extend(ExtLogDev)
96
147
  @wrap_logger.extendLogDev()
97
148
  end
98
-
149
+
99
150
  def level=(severity)
100
151
  @wrap_logger.level = severity
101
152
  end
@@ -141,7 +192,15 @@ module Roma
141
192
  end
142
193
 
143
194
  def close; @wrap_logger.close; end
144
-
195
+
196
+ def set_log_shift_size(size)
197
+ @wrap_logger.set_shift_size(size)
198
+ end
199
+
200
+ def set_log_shift_age(age)
201
+ @wrap_logger.set_shift_age(age)
202
+ end
203
+
145
204
  end # class RLogger
146
205
 
147
206
 
@@ -33,6 +33,20 @@ module Roma
33
33
  nil
34
34
  end
35
35
 
36
+ def check_connection(ap)
37
+ unless @pool.key?(ap)
38
+ host, port = ap.split(/[:_]/)
39
+ addr = DNSCache.instance.resolve_name(host)
40
+ sock = TCPSocket.open(addr, port)
41
+ sock.close
42
+ end
43
+ true
44
+ rescue Errno::ECONNREFUSED => e
45
+ false
46
+ rescue => e
47
+ Logging::RLogger.instance.error("#{__FILE__}:#{__LINE__}:#{e}")
48
+ end
49
+
36
50
  def return_connection(ap, con)
37
51
  if select([con],nil,nil,0.0001)
38
52
  con.gets
@@ -9,10 +9,9 @@ module Roma
9
9
  # get_routing_history
10
10
  def ev_get_routing_history(s)
11
11
  routing_path = get_config_stat["config.RTTABLE_PATH"]
12
- f_list = Dir.glob("#{routing_path}/*")
13
12
  contents = ""
14
- f_list.each{|fname|
15
- contents << File.read(fname)
13
+ Dir.glob("#{routing_path}/*").each{|fname|
14
+ contents << File.read(fname) if !FileTest::directory?(fname) && fname =~ /#{@stats.ap_str}\.route*/
16
15
  }
17
16
  routing_list = contents.scan(/[-\.a-zA-Z\d]+_[\d]+/).uniq.sort
18
17
  routing_list.each{|routing|
@@ -21,16 +20,15 @@ module Roma
21
20
  send_data("END\r\n")
22
21
  end
23
22
 
24
- # get_logs [line count]
23
+ # gather_logs [start_date(YYYY-MM-DDThh:mm:ss)] <end_date(YYYY-MM-DDThh:mm:ss)>
25
24
  def ev_gather_logs(s)
26
- if s.length != 2
27
- return send_data("CLIENT_ERROR number of arguments (#{s.length-1} for 1)\r\n")
25
+ if s.length < 2 || s.length > 3
26
+ return send_data("CLIENT_ERROR number of arguments (#{s.length-1} for 2-3)\r\n")
28
27
  end
29
28
 
30
- line_count = s[1].to_i
31
- if line_count < 1 || line_count > 100
32
- return send_data("CLIENT_ERROR line counts is restricted to between 1-100 lines\r\n")
33
- end
29
+ start_date = s[1]
30
+ end_date = s[2]
31
+ end_date ||= 'current'
34
32
 
35
33
  if @stats.gui_run_gather_logs
36
34
  return send_data("CLIENT_ERROR gathering process is already going\r\n")
@@ -38,7 +36,7 @@ module Roma
38
36
 
39
37
  begin
40
38
  @stats.gui_run_gather_logs = true
41
- Roma::AsyncProcess::queue.push(Roma::AsyncMessage.new('start_get_logs', [line_count]))
39
+ Roma::AsyncProcess::queue.push(Roma::AsyncMessage.new('start_get_logs', [start_date, end_date]))
42
40
 
43
41
  send_data("STARTED\r\n")
44
42
  rescue
@@ -53,8 +51,9 @@ module Roma
53
51
  if @stats.gui_run_gather_logs
54
52
  send_data("Not finished gathering\r\n")
55
53
  else
56
- @rttable.logs.each{|log|
57
- send_data(log)
54
+ @rttable.logs.each_with_index{|log, index|
55
+ send_data("#{log}\r\n")
56
+ sleep @stats.stream_show_wait_param if index % 10 == 0
58
57
  }
59
58
  send_data("END\r\n")
60
59
  @rttable.logs.clear
File without changes