yuya sako
ysgon****@gmail*****
2015年 4月 23日 (木) 13:05:32 JST
森さん、須藤さん 修正頂きまして、ありがとうございます。 助かりました。 酒匂 2015年4月23日 11:55 Kouhei Sutou <kou****@clear*****>: > 須藤です。 > > ありがとうございます! > エラーが発生しなくなったことを確認しました! > > Mroongaでも問題が解決したことを確認したので、次回のリリース > では修正が含まれます。 > > 酒匂さん、報告ありがとうございました! > > In <CAAQQ****@mail*****> > "[groonga-dev,03185] Re: mroongaで同一レコードの登録、削除、登録を行うとユニークキー重複エラー発生" on > Wed, 22 Apr 2015 18:51:17 +0900, > morit****@razil***** wrote: > > > 遅くなりました! > > 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 > >>> > >> > >> > > _______________________________________________ > 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