[Groonga-commit] groonga/groonga at a65bec4 [master] logical_table_remove: support removing broken index column

Back to archive index

Kouhei Sutou null+****@clear*****
Wed Aug 31 15:52:33 JST 2016


Kouhei Sutou	2016-08-31 15:52:33 +0900 (Wed, 31 Aug 2016)

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

  Message:
    logical_table_remove: support removing broken index column

  Modified files:
    plugins/sharding/logical_table_remove.rb
    test/command/suite/sharding/logical_table_remove/broken/column/dependent.expected
    test/command/suite/sharding/logical_table_remove/broken/column/dependent_force.expected
    test/command/suite/sharding/logical_table_remove/broken/index_column/dependent.expected
    test/command/suite/sharding/logical_table_remove/broken/index_column/dependent_force.expected
    test/command/suite/sharding/logical_table_remove/broken/lexicon/dependent.expected
    test/command/suite/sharding/logical_table_remove/broken/lexicon/dependent_force.expected

  Modified: plugins/sharding/logical_table_remove.rb (+27 -15)
===================================================================
--- plugins/sharding/logical_table_remove.rb    2016-08-31 15:50:28 +0900 (81a4e92)
+++ plugins/sharding/logical_table_remove.rb    2016-08-31 15:52:33 +0900 (203e9ba)
@@ -66,6 +66,23 @@ module Groonga
         end
       end
 
+      def collect_referenced_table_ids_from_index_ids(index_ids,
+                                                      referenced_table_ids)
+        database = context.database
+        index_ids.each do |index_id|
+          index = context[index_id]
+          if index.nil?
+            context.clear_error
+            index_name = database[index_id]
+            lexicon_name = index_name.split(".", 2)[0]
+            lexicon_id = database[lexicon_name]
+            referenced_table_ids << lexicon_id if lexicon_id
+          else
+            referenced_table_ids << index.domain_id
+          end
+        end
+      end
+
       def collect_referenced_table_ids(shard, table)
         return [] unless @dependent
 
@@ -96,17 +113,11 @@ module Groonga
             context.clear_error
           when Table
             referenced_table_ids << range.id
-            indexes = range.indexes
-            context.clear_error
-            indexes.each do |index_info|
-              referenced_table_ids << index_info.index.domain.id
-            end
-          end
-          indexes = column.indexes
-          context.clear_error
-          indexes.each do |index_info|
-            referenced_table_ids << index_info.index.domain.id
+            collect_referenced_table_ids_from_index_ids(range.index_ids,
+                                                        referenced_table_ids)
           end
+          collect_referenced_table_ids_from_index_ids(column.index_ids,
+                                                      referenced_table_ids)
         end
         referenced_table_ids
       end
@@ -219,25 +230,26 @@ module Groonga
       def remove_referenced_tables(shard, referenced_table_ids)
         return if referenced_table_ids.empty?
 
+        database = context.database
         shard_suffix = shard.range_data.to_suffix
         referenced_table_ids.each do |referenced_table_id|
+          referenced_table_name = database[referenced_table_id]
+          next unless referenced_table_name.end_with?(shard_suffix)
+
           referenced_table = context[referenced_table_id]
           if referenced_table.nil?
             context.clear_error
             if @force
-              Object.remove_force(referenced_table_id)
+              Object.remove_force(referenced_table_name)
             end
             next
           end
 
-          referenced_table_name = referenced_table.name
-          next unless referenced_table_name.end_with?(shard_suffix)
-
           if @force
             begin
               referenced_table.remove(:dependent => @dependent)
             rescue
-              Context.instance.clear_error
+              context.clear_error
               referenced_table.close
               remove_table_force(referenced_table_name)
             end

  Modified: test/command/suite/sharding/logical_table_remove/broken/column/dependent.expected (+0 -1)
===================================================================
--- test/command/suite/sharding/logical_table_remove/broken/column/dependent.expected    2016-08-31 15:50:28 +0900 (773ca87)
+++ test/command/suite/sharding/logical_table_remove/broken/column/dependent.expected    2016-08-31 15:52:33 +0900 (9e8203f)
@@ -61,7 +61,6 @@ logical_table_remove Logs timestamp   --min "2015-02-04 00:00:00"   --min_border
 #|e| [io][open] file size is too small: <8>(required: >= 64): <db/db.0000112>
 #|e| grn_ctx_at: failed to open object: <274>(<Logs_20150204.path>):<64>(<column:fix_size>)
 #|e| grn_ctx_at: failed to open object: <274>(<Logs_20150204.path>):<64>(<column:fix_size>)
-#|e| grn_ctx_at: failed to open object: <274>(<Logs_20150204.path>):<64>(<column:fix_size>)
 #|e| [object][remove] column is broken: <Logs_20150204.path>: [object][remove] column is broken: <Logs_20150204.path>: [io][open] file size is too small: <8>(required: >= 64): <db/db.000011
 dump
 plugin_register sharding

  Modified: test/command/suite/sharding/logical_table_remove/broken/column/dependent_force.expected (+0 -1)
===================================================================
--- test/command/suite/sharding/logical_table_remove/broken/column/dependent_force.expected    2016-08-31 15:50:28 +0900 (d344789)
+++ test/command/suite/sharding/logical_table_remove/broken/column/dependent_force.expected    2016-08-31 15:52:33 +0900 (f359e71)
@@ -52,7 +52,6 @@ logical_table_remove Logs timestamp   --min "2015-02-04 00:00:00"   --min_border
 #|e| [io][open] file size is too small: <8>(required: >= 64): <db/db.0000112>
 #|e| grn_ctx_at: failed to open object: <274>(<Logs_20150204.path>):<64>(<column:fix_size>)
 #|e| grn_ctx_at: failed to open object: <274>(<Logs_20150204.path>):<64>(<column:fix_size>)
-#|e| grn_ctx_at: failed to open object: <274>(<Logs_20150204.path>):<64>(<column:fix_size>)
 #|e| [object][remove] column is broken: <Logs_20150204.path>: [object][remove] column is broken: <Logs_20150204.path>: [io][open] file size is too small: <8>(required: >= 64): <db/db.000011
 #|e| [io][open] file size is too small: <8>(required: >= 64): <db/db.0000112>
 #|e| grn_ctx_at: failed to open object: <274>(<Logs_20150204.path>):<64>(<column:fix_size>)

  Modified: test/command/suite/sharding/logical_table_remove/broken/index_column/dependent.expected (+0 -2)
===================================================================
--- test/command/suite/sharding/logical_table_remove/broken/index_column/dependent.expected    2016-08-31 15:50:28 +0900 (3848efc)
+++ test/command/suite/sharding/logical_table_remove/broken/index_column/dependent.expected    2016-08-31 15:52:33 +0900 (c08de62)
@@ -60,8 +60,6 @@ logical_table_remove Logs timestamp   --min "2015-02-04 00:00:00"   --min_border
 ]
 #|e| [io][open] file size is too small: <8>(required: >= 64): <db/db.0000114>
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
-#|e| [column][indexes][all] hook has a dangling reference: <Logs_20150204.timestamp> -> <Times_20150204.timestamp_index>
-#|e| [io][open] file size is too small: <8>(required: >= 64): <db/db.0000114>
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
 #|e| [column][remove][index] hook has a dangling reference: <Logs_20150204.timestamp> -> <Times_20150204.timestamp_index>

  Modified: test/command/suite/sharding/logical_table_remove/broken/index_column/dependent_force.expected (+6 -18)
===================================================================
--- test/command/suite/sharding/logical_table_remove/broken/index_column/dependent_force.expected    2016-08-31 15:50:28 +0900 (6693cc0)
+++ test/command/suite/sharding/logical_table_remove/broken/index_column/dependent_force.expected    2016-08-31 15:52:33 +0900 (9bf259d)
@@ -51,8 +51,6 @@ logical_table_remove Logs timestamp   --min "2015-02-04 00:00:00"   --min_border
 [[0,0.0,0.0],true]
 #|e| [io][open] file size is too small: <8>(required: >= 64): <db/db.0000114>
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
-#|e| [column][indexes][all] hook has a dangling reference: <Logs_20150204.timestamp> -> <Times_20150204.timestamp_index>
-#|e| [io][open] file size is too small: <8>(required: >= 64): <db/db.0000114>
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
 #|e| [column][remove][index] hook has a dangling reference: <Logs_20150204.timestamp> -> <Times_20150204.timestamp_index>
@@ -60,8 +58,13 @@ logical_table_remove Logs timestamp   --min "2015-02-04 00:00:00"   --min_border
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
+#|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
+#|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
+#|e| [object][remove] column is broken: <Times_20150204.timestamp_index>: [object][remove] column is broken: <Times_20150204.timestamp_index>: [io][open] file size is too small: <8>(required: >= 64): <
+#|e| [io][open] file size is too small: <8>(required: >= 64): <db/db.0000114>
+#|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
 object_exist Times_20150204.timestamp_index
-[[0,0.0,0.0],true]
+[[0,0.0,0.0],false]
 dump
 plugin_register sharding
 
@@ -76,8 +79,6 @@ table_create Paths_20150203 TABLE_HASH_KEY|KEY_LARGE ShortText
 
 table_create Times_20150203 TABLE_PAT_KEY Time
 
-table_create Times_20150204 TABLE_PAT_KEY Time
-
 column_create Logs_20150203 path COLUMN_SCALAR Paths_20150203
 
 load --table Paths_20150203
@@ -94,18 +95,5 @@ load --table Logs_20150203
 [2,"/var/",1422975599.0]
 ]
 
-load --table Times_20150204
-[
-["_key"],
-[1422975600.0],
-[1423025340.0],
-[1423025400.0]
-]
-
 column_create PathTerms_20150203 index COLUMN_INDEX|WITH_POSITION Paths_20150203 _key
 column_create Times_20150203 timestamp_index COLUMN_INDEX Logs_20150203 timestamp
-#|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
-#|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
-#|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
-#|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
-#|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)

  Modified: test/command/suite/sharding/logical_table_remove/broken/lexicon/dependent.expected (+0 -2)
===================================================================
--- test/command/suite/sharding/logical_table_remove/broken/lexicon/dependent.expected    2016-08-31 15:50:28 +0900 (99d04f8)
+++ test/command/suite/sharding/logical_table_remove/broken/lexicon/dependent.expected    2016-08-31 15:52:33 +0900 (84251e9)
@@ -61,8 +61,6 @@ logical_table_remove Logs timestamp   --min "2015-02-04 00:00:00"   --min_border
 #|e| [io][open] file size is too small: <8>(required: >= 64): <db/db.0000113>
 #|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
-#|e| [column][indexes][all] hook has a dangling reference: <Logs_20150204.timestamp> -> <Times_20150204.timestamp_index>
-#|e| [io][open] file size is too small: <8>(required: >= 64): <db/db.0000113>
 #|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
 #|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)

  Modified: test/command/suite/sharding/logical_table_remove/broken/lexicon/dependent_force.expected (+1 -8)
===================================================================
--- test/command/suite/sharding/logical_table_remove/broken/lexicon/dependent_force.expected    2016-08-31 15:50:28 +0900 (1b61862)
+++ test/command/suite/sharding/logical_table_remove/broken/lexicon/dependent_force.expected    2016-08-31 15:52:33 +0900 (0590e66)
@@ -52,8 +52,6 @@ logical_table_remove Logs timestamp   --min "2015-02-04 00:00:00"   --min_border
 #|e| [io][open] file size is too small: <8>(required: >= 64): <db/db.0000113>
 #|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
-#|e| [column][indexes][all] hook has a dangling reference: <Logs_20150204.timestamp> -> <Times_20150204.timestamp_index>
-#|e| [io][open] file size is too small: <8>(required: >= 64): <db/db.0000113>
 #|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
 #|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
@@ -70,6 +68,7 @@ logical_table_remove Logs timestamp   --min "2015-02-04 00:00:00"   --min_border
 #|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
 #|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
 #|e| grn_ctx_at: failed to open object: <276>(<Times_20150204.timestamp_index>):<72>(<column:index>)
+#|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
 dump
 plugin_register sharding
 
@@ -102,9 +101,3 @@ load --table Logs_20150203
 
 column_create PathTerms_20150203 index COLUMN_INDEX|WITH_POSITION Paths_20150203 _key
 column_create Times_20150203 timestamp_index COLUMN_INDEX Logs_20150203 timestamp
-#|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
-#|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
-#|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
-#|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
-#|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
-#|e| grn_ctx_at: failed to open object: <275>(<Times_20150204>):<49>(<table:pat_key>)
-------------- next part --------------
HTML����������������������������...
Download 



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