morit****@razil*****
morit****@razil*****
2015年 4月 22日 (水) 18:51:17 JST
遅くなりました! grn_pat_del()のバグを直してみたのですが、どうでしょうか。。 2015-04-21 8:05 GMT+09:00 <morit****@razil*****>: > 確認します! > > 2015-04-20 23:00 GMT+09:00 Kouhei Sutou <kou****@clear*****>: > >> 須藤です。 >> >> 報告ありがとうございます。 >> >> これは、Groongaのパトリシアトライの実装のバグっぽいですね。。。 >> >> 森さん、masterにこのケースのテストを追加しておいたので確認し >> てもらえませんか? >> >> https://github.com/groonga/groonga/blob/master/test/command/suite/tables/patricia_trie/delete.expected >> >> ↓を実行すると_grn_pat_del()で >> >> % test/command/run-test.sh >> test/command/suite/tables/patricia_trie/delete.test >> >> ↓というエラーがでるようになります。 >> >> no delinfo found 3 >> >> これ、"3"というキーを_grn_pat_add()するときが問題な気がする >> んですよねぇ。 >> >> 個人的には↓かなぁと思うんですが、pat_nodeがterminatedなのっ >> てこういう状況のときのことをいうのかよくわかっていません。 >> >> diff --git a/lib/pat.c b/lib/pat.c >> index c5dacc0..afa8957 100644 >> --- a/lib/pat.c >> +++ b/lib/pat.c >> @@ -667,6 +667,9 @@ _grn_pat_add(grn_ctx *ctx, grn_pat *pat, const >> uint8_t *key, uint32_t size, uint >> for (c = 0, d = key; min && *s == *d; c += 16, s++, d++, min--); >> if (min) { >> for (xor = *s ^ *d, mask = 0x80; !(xor & mask); mask >>= 1, c += >> 2); >> + if (min == 1 && mask == (0x80 >> 7)) { >> + c++; >> + } >> } else { >> c--; >> } >> >> >> In <CAPYq****@mail*****> >> "[groonga-dev,03177] mroongaで同一レコードの登録、削除、登録を行うとユニークキー重複エラー発生" on Mon, >> 20 Apr 2015 11:57:15 +0900, >> yuya sako <ysgon****@gmail*****> wrote: >> >> > ※先日、当MLに投稿いたしましたが、過去ログを確認しましたところ、 >> > 4/19時点で投稿内容が残ってりませんでした為、念のため再投稿させていた >> > だきます。 >> > >> > mroongaを使い始めた者なのですが、下記事象が発生いたしました。 >> > 使い方に問題があるものなのかどうか等、ご教示頂けますと助かります。 >> > >> > お手数をおかけいたしますが、よろしくお願いいたします。 >> > >> > [事象] >> > 複数レコードをINSERT >> > ↓ >> > INSERTしたレコードを全てDELETE >> > ↓ >> > 再度同じレコードをINSERT >> > >> > を行うと、そのうち1件で下記エラーが発生いたします。 >> > >> > ERROR 1062 (23000): Duplicate entry 'カラムの値' for key 'uid' >> > >> > ※再現手順を下記に記載いたしました。 >> > >> > [使用環境] >> > # uname -a >> > Linux localhost1.local 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 >> > UTC 2015 x86_64 x86_64 x86_64 GNU/Linux >> > >> > # mysql --version >> > mysql Ver 14.14 Distrib 5.6.23, for Linux (x86_64) using EditLine >> > wrapper >> > >> > mysql> show variables like '%mroonga%'; >> > +----------------------------------------+---------------+ >> > | Variable_name | Value | >> > +----------------------------------------+---------------+ >> > | mroonga_action_on_fulltext_query_error | ERROR_AND_LOG | >> > | mroonga_boolean_mode_syntax_flags | DEFAULT | >> > | mroonga_database_path_prefix | | >> > | mroonga_default_parser | TokenBigram | >> > | mroonga_default_wrapper_engine | | >> > | mroonga_dry_write | OFF | >> > | mroonga_enable_optimization | ON | >> > | mroonga_libgroonga_support_lz4 | OFF | >> > | mroonga_libgroonga_support_zlib | ON | >> > | mroonga_libgroonga_version | 5.0.2 | >> > | mroonga_lock_timeout | 10000000 | >> > | mroonga_log_file | groonga.log | >> > | mroonga_log_level | NOTICE | >> > | mroonga_match_escalation_threshold | 0 | >> > | mroonga_vector_column_delimiter | | >> > | mroonga_version | 5.01 | >> > +----------------------------------------+---------------+ >> > >> > [再現手順] >> > (1)テーブルの作成 >> > >> > CREATE TABLE `uk_test` ( >> > id int(10) unsigned not null, >> > uid varchar(150) not null, >> > data text not null, >> > primary key (id), >> > unique key uid (uid) >> > ) ENGINE=mroonga DEFAULT CHARSET=utf8; >> > >> > (2)データをINSERT >> > INSERT INTO uk_test (id,uid, data) VALUES (1,'uid2',''); >> > INSERT INTO uk_test (id,uid, data) VALUES (2,'uid1',''); >> > INSERT INTO uk_test (id,uid, data) VALUES (3,'uid3',''); >> > INSERT INTO uk_test (id,uid, data) VALUES (4,'uid4',''); >> > >> > (3)データをDELETE >> > DELETE FROM uk_test WHERE `id`='1'; >> > DELETE FROM uk_test WHERE `id`='2'; >> > DELETE FROM uk_test WHERE `id`='3'; >> > DELETE FROM uk_test WHERE `id`='4'; >> > >> > (4)上記(2)と同じデータをINSERT >> > INSERT INTO uk_test (id,uid, data) VALUES (1,'uid2',''); >> > INSERT INTO uk_test (id,uid, data) VALUES (2,'uid1',''); >> > INSERT INTO uk_test (id,uid, data) VALUES (3,'uid3',''); >> > INSERT INTO uk_test (id,uid, data) VALUES (4,'uid4',''); >> > >> > [補足-1] >> > 上記(2)、(4)で実行するINSER文を下記にしますと、事象が再現しなくなりま >> > す。 >> > INSERT INTO uk_test (id,uid, data) VALUES (1,'uid1',''); >> > INSERT INTO uk_test (id,uid, data) VALUES (2,'uid2',''); >> > INSERT INTO uk_test (id,uid, data) VALUES (3,'uid3',''); >> > INSERT INTO uk_test (id,uid, data) VALUES (4,'uid4',''); >> > >> > [補足-2] >> > 上記(2)、(4)で実行するINSER文は下記3件でも、事象が再現いたします。 >> > INSERT INTO uk_test (id,uid, data) VALUES (1,'uid2',''); >> > INSERT INTO uk_test (id,uid, data) VALUES (2,'uid1',''); >> > INSERT INTO uk_test (id,uid, data) VALUES (3,'uid3',''); >> > >> > 以上よろしくお願いいたします。 >> > >> > ------------------------------------------------- >> > 酒匂祐也 >> > ysgon****@gmail***** >> >> _______________________________________________ >> groonga-dev mailing list >> groon****@lists***** >> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev >> > > -------------- next part -------------- HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...Download