[groonga-dev,03603] Re: Mroonga_で_data_truncated_for_primary_key_column: <id> が発生する

Back to archive index

Susumu Yata susum****@gmail*****
2015年 10月 28日 (水) 19:23:27 JST


矢田です.

> P.S
> 矢田さんの報告にある、これも気にはなっているのですが……。
> https://github.com/groonga/groonga/issues/421

解決しました!

特殊ケースに対する例外処理を追加することで解決できました.

以下,内部実装について知らないと意味不明だとは思うのですが,
特殊ケースの例外処理について説明いたします.

削除時に到達した出力ノードが自己ループを構成する遷移一つのみを持つとき,
削除情報などの操作をスキップして,当該ノードへの遷移を取り除くようにしました.
ただし,削除時の探索で既に自己ループを辿っているときは別とします.

以上です.

今後共よろしくお願いいたします.

2015年10月26日 20:26 各務 洋 <kagam****@outwa*****>:
> お世話になります、各務です。
>
>>> 2.ユニークインデックスの破損は発生します。
>>
>> すみません、これの判断基準をおしえてもらえますか?
>
> DELETE しても INSERT 出来なくなる。というシンプルなものです。
> [groonga-dev,03556] で書かせていただいた方法で、確認用の処理を、
>
> while true; do mysql -D db_teste4 -s -e "SELECT (SELECT current_timestamp) AS '', id AS '', a_id AS '' FROM tbl_test_pat_0005; SELECT '--' AS ''";done;
>
> で kill も込みで回しつづけていると、その内どちらかの Unique Key 分の
> id が increment されなくなり、挿入側も、
>
> ERROR 1062 (23000) at line 1: Duplicate entry '10001' for key 'a_id'
>
> と出続けるようになります。(10001 か 10002 かはその時々)
> 実際にその値があるか無いかはあまり関係なく、Index だけが残るようです。
>
>
> 上記の状態で、
>
> ALTER TABLE テーブル名 Engine Mroonga;
>
> で修復をかけていると、その内 a_id と 主キー に 0 が 入ったレコードがい
> つでも見られるようになります。(DELETE/INSERT を停止していても )
> これが作られると頻繁に Duplicate entry が発生するようになります。
> (但し、値としては重複していません)
>
>
>> ユニークインデックスを張ったカラムの値が0になっているカラム
>> が複数見える、という感じでしょうか?
>
> 5.08では見えましたが、今の5.09候補では複数の0は見えなくなっています。
>
>
>>> 3.groonga.log に Auto repair is done は出現しませんでした。
>>
>> やはりそうですよねぇ。
>> いや、でも、と思ってソースを確認したらバグっていました。。。
>>
>> パッケージを作り直すのでそっちで確認してもらえるとうれしいで
>> す。。。
>
> おぉ、分かって良かったです。
> ありがとうございます、明日確認してみます。
>
>
> P.S
> 矢田さんの報告にある、これも気にはなっているのですが……。
> https://github.com/groonga/groonga/issues/421
>
>
> ----
> 各務
> kagam****@outwa*****
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.osdn.me/mailman/listinfo/groonga-dev



-- 
Susumu Yata <susum****@gmail*****>



groonga-dev メーリングリストの案内
Back to archive index