Bug #1671

[groonga-dev,01246] INDEXの作成(ADD)もしくは有効(ENABLE)でエラー (3)

Added by Kentoku SHIBA over 5 years ago. Updated over 5 years ago.

Status:完了チェック待ちStart date:03/21/2013
Priority:NormalDue date:
Assignee:Kentoku SHIBA% Done:

80%

Category:-
Target version:-

Description

# MLに届いているか不安でしたので再送させて頂きます。
  多重投稿となりましたら申し訳ございません。


初めて投稿します。
K5と申します。
以下、FAQでしたら申し訳ございません。

mroonga 2.0.6 をラッパーモードで利用しています。
後述の[0] の通り、ujisのテーブルに UTF-8のカラム、"search_text" を作成し、
そのカラムにFULLTEXT INDEX "search_text" を作成しています。

ふとしたことで、
ALTER TABLE `article` DISABLE KEYS
にて、INDEXを無効にしてしまったところ、

ALTER TABLE `article` ENABLE KEYS
すると、以下のようなエラーが表示され、INDEXを有効にできません。

ERROR 1026 (HY000): failed to add a new record into groonga: key=<>


そこで、INDEXの削除・再作成を試みました。
ALTER TABLE article DROP INDEX `search_text`;
ALTER TABLE article ADD FULLTEXT INDEX `search_text` (`search_text`);

が、やはり同じエラーが表示されます。

ERROR 1026 (HY000): failed to add a new record into groonga: key=<>


以降、全文検索ができない状態になっています。
復旧させる方法がございましたら、是非ご教授ください

よろしくお願いいたします。

----------------------

[0] DDL

CREATE TABLE `article` (
    `id` varchar(128) NOT NULL,
    `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
    `title` text NOT NULL,
    `body` text NOT NULL,
    `search_text` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
    `created` timestamp NULL DEFAULT '0000-00-00 00:00:00',
    PRIMARY KEY (`id`),
    FULLTEXT KEY `search_text` (`search_text`)
) ENGINE=mroonga DEFAULT CHARSET=ujis COMMENT='ENGINE "InnoDB"'


[1] SHOW VARIABLES LIKE 'mroonga_%'; の結果
mroonga_database_path_prefix
mroonga_default_parser  TokenMecab
mroonga_default_wrapper_engine
mroonga_dry_write       OFF
mroonga_enable_optimization     ON
mroonga_libgroonga_version      2.0.6
mroonga_log_file        groonga.log
mroonga_log_level       NONE
mroonga_match_escalation_threshold      0
mroonga_version 2.06

History

#1 Updated by Kentoku SHIBA over 5 years ago

  • Status changed from 新規 to 担当者作業中
斯波です。

こちらで挙動を確認させて頂いたのですが、現在のところ
現象が再現できておりません。

お手数ではございますが、最新のmroonga(3.0.1)で、
ご確認いただくことはできますでしょうか?

どうぞ、よろしくお願いいたします。

#2 Updated by Kentoku SHIBA over 5 years ago

斯波さま:

mroonga 3.01
での検証は後日実施する予定ですが(をやるつもりでしたが時間切れとなったため)、まずは以下の環境での再現手順をお知らせさせていただきます。

■ 環境
groonga-libs-2.0.8-0
groonga-tokenizer-mecab-2.0.8-0
mecab-0.994-1
mecab-ipadic-2.7.0.20070801-5.1
MySQL-client-5.5.27-1.rhel5
mysql-mroonga-2.06-0
MySQL-server-5.5.27-1.rhel5
MySQL-shared-5.5.28-1.rhel5
# いずれも groonga yum repositoryよりインストール

■ 再現手順
[1] 添付DDLファイルを実行
  $ cat /var/tmp/news-ddl.sql | mysql -uroot

[2] DownloadしたデータファイルをMySQLにロード
  mysql> LOAD DATA INFILE '/var/tmp/news-data.txt' INTO TABLE article;

[3] 中身のレコードを確認
  $ mysql -u root
  mysql> USE news;
  mysql> SELECT * FROM article LIMIT 1 \G
  *************************** 1. row ***************************
           id: article-id-001
         date: 2013-03-20 08:00:00
        title: 吾輩は猫である
         body: 『吾輩は猫である』(わがはいはねこである)は、夏目漱石の長編小説。……
  search_text: 『吾輩は猫である』(わがはいはねこである)は、夏目漱石の長編小説。……
      created: 0000-00-00 00:00:00
  1 row in set (0.00 sec)

  # 999件、(PRIMARY KEY `id` を除いて)全て同じデータの行

[4] カラム `search_text` で、全文検索が有効であることを確認。
  mysql> SELECT id, title FROM article WHERE MATCH(search_text)
AGAINST('夏目漱石');
  → 999件がヒットする。

[5] (再現) DISABLE KEYS したあと、 ENABLE KEYS するとWarningが発生。
  mysql> ALTER TABLE article DISABLE KEYS;
  Query OK, 0 rows affected (0.00 sec)

  mysql> ALTER TABLE article ENABLE KEYS;
  Query OK, 0 rows affected, 1 warning (0.01 sec)

  mysql> SHOW WARNINGS;
  +-------+------+-------------------------------------------------+
  | Level | Code | Message                                         |
  +-------+------+-------------------------------------------------+
  | Error | 1026 | failed to add a new record into groonga: key=<> |
  +-------+------+-------------------------------------------------+
  1 row in set (0.00 sec)

  ~ 以降、[4] のクエリを実行しても、1件しかHitしない。(999件Hitすべきところ)~

#3 Updated by Kentoku SHIBA over 5 years ago

  • % Done changed from 10 to 20
斯波です。

再現手順のご教示ありがとうございます。
添付ファイルは確認できておりませんが、頂いたメールの内容を元に
テストデータを作成し再現を試みたところ、最新版でも怪しい挙動が
確認できましたので、調査を開始させて頂きます。
対応チケットは以下となります。
http://redmine.groonga.org/issues/1671
ひとまず、ご連絡させて頂きます。

#4 Updated by Kentoku SHIBA over 5 years ago

  • Status changed from 担当者作業中 to 完了チェック待ち
  • % Done changed from 20 to 80

確認を進めたところ、wrapper_fill_indexes()で、keyのメモリ解放位置が 早すぎたりしており、問題を引き起こしていたため修正を行った。

Also available in: Atom PDF