[Groonga-commit] groonga/groonga at bfb2b70 [master] grndb: add --force-lock-clear option

Back to archive index

Yasuhiro Horimoto null+****@clear*****
Wed Jan 10 16:31:22 JST 2018


Yasuhiro Horimoto	2018-01-10 16:31:22 +0900 (Wed, 10 Jan 2018)

  New Revision: bfb2b702f2980c5f585398c43d376142ebfe3303
  https://github.com/groonga/groonga/commit/bfb2b702f2980c5f585398c43d376142ebfe3303

  Merged f6ed615: Merge pull request #807 from komainu8/add_force_lock_clear

  Message:
    grndb: add --force-lock-clear option
    
    This option force to clear lock of object(Database, Column, Table).
    You can use if you want to database recover even if remain locked of database.
    
    But this option very risky.
    Because can not safty recover database if remain locked of database.

  Modified files:
    lib/mrb/mrb_column.c
    lib/mrb/mrb_database.c
    lib/mrb/mrb_table.c
    lib/mrb/scripts/command_line/grndb.rb

  Modified: lib/mrb/mrb_column.c (+13 -0)
===================================================================
--- lib/mrb/mrb_column.c    2018-01-10 10:26:08 +0900 (268558dd3)
+++ lib/mrb/mrb_column.c    2018-01-10 16:31:22 +0900 (4c0b190a4)
@@ -111,6 +111,16 @@ mrb_grn_column_is_locked(mrb_state *mrb, mrb_value self)
 }
 
 static mrb_value
+mrb_grn_column_unlock(mrb_state *mrb, mrb_value self)
+{
+  grn_ctx *ctx = (grn_ctx *)mrb->ud;
+
+  grn_obj_clear_lock(ctx, DATA_PTR(self));
+  grn_mrb_ctx_check(mrb);
+  return mrb_nil_value();
+}
+
+static mrb_value
 mrb_grn_column_get_table(mrb_state *mrb, mrb_value self)
 {
   grn_ctx *ctx = (grn_ctx *)mrb->ud;
@@ -163,11 +173,14 @@ grn_mrb_column_init(grn_ctx *ctx)
 
   mrb_define_method(mrb, klass, "locked?",
                     mrb_grn_column_is_locked, MRB_ARGS_NONE());
+  mrb_define_method(mrb, klass, "unlock",
+                    mrb_grn_column_unlock, MRB_ARGS_NONE());
 
   mrb_define_method(mrb, klass, "table",
                     mrb_grn_column_get_table, MRB_ARGS_NONE());
 
   mrb_define_method(mrb, klass, "truncate",
                     mrb_grn_column_truncate, MRB_ARGS_NONE());
+
 }
 #endif

  Modified: lib/mrb/mrb_database.c (+13 -0)
===================================================================
--- lib/mrb/mrb_database.c    2018-01-10 10:26:08 +0900 (f9133167a)
+++ lib/mrb/mrb_database.c    2018-01-10 16:31:22 +0900 (3671f6168)
@@ -97,6 +97,17 @@ mrb_grn_database_is_locked(mrb_state *mrb, mrb_value self)
 }
 
 static mrb_value
+mrb_grn_database_unlock(mrb_state *mrb, mrb_value self)
+{
+  grn_ctx *ctx = (grn_ctx *)mrb->ud;
+
+  grn_obj_clear_lock(ctx, DATA_PTR(self));
+  grn_mrb_ctx_check(mrb);
+
+  return mrb_nil_value();
+}
+
+static mrb_value
 mrb_grn_database_get_last_modified(mrb_state *mrb, mrb_value self)
 {
   grn_ctx *ctx = (grn_ctx *)mrb->ud;
@@ -196,6 +207,8 @@ grn_mrb_database_init(grn_ctx *ctx)
                     mrb_grn_database_recover, MRB_ARGS_NONE());
   mrb_define_method(mrb, klass, "locked?",
                     mrb_grn_database_is_locked, MRB_ARGS_NONE());
+  mrb_define_method(mrb, klass, "unlock",
+                    mrb_grn_database_unlock, MRB_ARGS_NONE());
   mrb_define_method(mrb, klass, "last_modified",
                     mrb_grn_database_get_last_modified, MRB_ARGS_NONE());
   mrb_define_method(mrb, klass, "dirty?",

  Modified: lib/mrb/mrb_table.c (+12 -0)
===================================================================
--- lib/mrb/mrb_table.c    2018-01-10 10:26:08 +0900 (baf110ad6)
+++ lib/mrb/mrb_table.c    2018-01-10 16:31:22 +0900 (01ce605cc)
@@ -177,6 +177,16 @@ mrb_grn_table_is_locked(mrb_state *mrb, mrb_value self)
 }
 
 static mrb_value
+mrb_grn_table_unlock(mrb_state *mrb, mrb_value self)
+{
+  grn_ctx *ctx = (grn_ctx *)mrb->ud;
+  grn_obj_clear_lock(ctx, DATA_PTR(self));
+  grn_mrb_ctx_check(mrb);
+
+  return mrb_nil_value();
+}
+
+static mrb_value
 mrb_grn_table_get_size(mrb_state *mrb, mrb_value self)
 {
   grn_ctx *ctx = (grn_ctx *)mrb->ud;
@@ -466,6 +476,8 @@ grn_mrb_table_init(grn_ctx *ctx)
 
   mrb_define_method(mrb, klass, "locked?",
                     mrb_grn_table_is_locked, MRB_ARGS_NONE());
+  mrb_define_method(mrb, klass, "unlock",
+                    mrb_grn_table_unlock, MRB_ARGS_NONE());
 
   mrb_define_method(mrb, klass, "size",
                     mrb_grn_table_get_size, MRB_ARGS_NONE());

  Modified: lib/mrb/scripts/command_line/grndb.rb (+19 -0)
===================================================================
--- lib/mrb/scripts/command_line/grndb.rb    2018-01-10 10:26:08 +0900 (ca4957572)
+++ lib/mrb/scripts/command_line/grndb.rb    2018-01-10 16:31:22 +0900 (79d5afe94)
@@ -51,6 +51,7 @@ module Groonga
           options = command.options
           options.banner += " DB_PATH"
           options.boolean("--force-truncate", "Force to truncate corrupted objects.")
+          options.boolean("--force-lock-clear", "Force to clear lock with objects.")
 
           command.add_action do |options|
             open_database(command, options) do |database, rest_arguments|
@@ -101,6 +102,7 @@ module Groonga
         recoverer = Recoverer.new
         recoverer.database = database
         recoverer.force_truncate = options[:force_truncate]
+        recoverer.force_lock_clear = options[:force_lock_clear]
         begin
           recoverer.recover
         rescue Error => error
@@ -445,6 +447,7 @@ module Groonga
       class Recoverer
         attr_writer :database
         attr_writer :force_truncate
+        attr_writer :force_lock_clear
 
         def initialize
           @context = Context.instance
@@ -454,6 +457,9 @@ module Groonga
           if @force_truncate
             truncate_corrupt_objects
           end
+          if @force_lock_clear
+            lock_clear_objects
+          end
           @database.recover
         end
 
@@ -481,6 +487,19 @@ module Groonga
             end
           end
         end
+
+        def lock_clear_objects
+          if****@datab*****?
+              @database.unlock
+          end
+          @database.each do |object|
+            case object
+            when Column, Table
+              next unless object.locked?
+              object.unlock
+            end
+          end
+        end
       end
     end
   end
-------------- next part --------------
HTML����������������������������...
URL: https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20180110/15e55f7d/attachment-0001.htm 



More information about the Groonga-commit mailing list
Back to archive index