Kentaro Hayashi
null+****@clear*****
Tue Jun 20 15:27:14 JST 2017
Kentaro Hayashi 2017-06-20 15:27:14 +0900 (Tue, 20 Jun 2017) New Revision: 838b6c74a20744bc332ac957092be35e3171b21c https://github.com/groonga/groonga/commit/838b6c74a20744bc332ac957092be35e3171b21c Merged 4ee26f7: Merge pull request #714 from kenhys/grndb-force-truncate Message: grndb: implement --force-truncate option In the previous versions, when some database files are missing, there is no way to recover from it (manual operation is required) --force-truncate option enables to remove such database files. Modified files: lib/mrb/scripts/command_line/grndb.rb Modified: lib/mrb/scripts/command_line/grndb.rb (+34 -0) =================================================================== --- lib/mrb/scripts/command_line/grndb.rb 2017-06-19 16:54:55 +0900 (5d03cc5) +++ lib/mrb/scripts/command_line/grndb.rb 2017-06-20 15:27:14 +0900 (964ce59) @@ -95,6 +95,7 @@ module Groonga def recover(database, options, arguments) recoverer = Recoverer.new recoverer.database = database + recoverer.force_truncate = options[:force_truncate] begin recoverer.recover rescue Error => error @@ -408,9 +409,42 @@ module Groonga class Recoverer attr_writer :database + attr_writer :force_truncate + + def initialize + @context = Context.instance + end def recover @database.recover + if @force_truncate + truncate_corrupt_objects + end + end + + def truncate_corrupt_objects + @database.each do |object| + next unless object.corrupt? + logger =****@conte***** + object_path = object.path + object_dirname = File.dirname(object_path) + object_basename = File.basename(object_path) + object.truncate + Dir.foreach(object_dirname) do |path| + if path.start_with?("#{object_basename}.") + begin + File.unlink("#{object_dirname}/#{path}") + message = "Corrupted <#{object_path}> related file is removed: <#{path}>" + $stdout.puts(message) + logger.log(Logger::Level::INFO.to_i, __FILE__, __LINE__, "truncate_corrupt_objects", message) + rescue Error => error + message = "Failed to remove file which is related to corrupted <#{object_path}>: <#{path}>" + $stderr.puts(message) + logger.log_error(message) + end + end + end + end end end end -------------- next part -------------- HTML����������������������������... Download