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