[groonga-dev,04887] Mroongaバグ報告(8)

Back to archive index
渡部克仁 watan****@ksw*****
2021年 9月 8日 (水) 09:45:25 JST


【秘密】関係者外秘
To:堀本様

渡部@国際ソフトウェアと申します。

下記バグについて、今後の対応計画などはありますでしょうか。

2021-07-30にリリースされたMroonga 11.05、
2021-08-29にリリースされたMroonga 11.06、
共にリリースノートを拝見しましたが、該当する改良が見当たら
なかったため、確認させていただいている次第です。

以上、よろしくお願いいたします。


On 2021/07/07 12:13, 渡部克仁 wrote:
> 
> 【秘密】関係者外秘
> To:堀本様
> 
> 渡部@国際ソフトウェアと申します。
> 
> ご報告ありがとうございます。
> 原因が判明して安堵いたしました。
> ご丁寧に調査いただき感謝申し上げます。
> 
> Mroongaの修正については、引き続きご対応よろしくお願いいたします。
> 
> 
> On 2021/07/07 12:00, groon****@lists***** wrote:
>> groonga-dev
>> メーリングリストへの投稿は以下のアドレスに送ってください.
>>
>>     groon****@lists*****
>>
>> Webブラウザを使って入退会するには以下のURLにどうぞ.
>>
>>     https://lists.osdn.me/mailman/listinfo/groonga-dev
>> メールを使う場合,件名(Subject:)または本文に help
>> と書いて以下の アドレスに送信してください.
>>     groon****@lists*****
>>
>> メーリングリストの管理者への連絡は,以下のアドレスにお願いします.
>>
>>     groon****@lists*****
>>
>> 返信する場合,件名を書き直して内容がわかるようにしてください.
>> そのままだと,以下のようになってしまいます.
>> "Re: groonga-dev まとめ読み, XX 巻 XX 号"
>>
>>
>> 本日の話題:
>>
>>     1. [groonga-dev,04876] Re: Mroongaバグ報告(6) (Horimoto Yasuhiro)
>>
>>
>> ----------------------------------------------------------------------
>>
>> Message: 1
>> Date: Tue, 06 Jul 2021 16:28:20 +0900 (JST)
>> From: Horimoto Yasuhiro <horim****@clear*****>
>> To: groon****@lists*****
>> Subject: [groonga-dev,04876] Re: Mroongaバグ報告(6)
>> Message-ID:
>>     <20210****@clear*****>
>> Content-Type: Text/Plain; charset=utf-8
>>
>> 堀本です。
>>
>> 原因と対処方法がわかったので、報告いたします。
>> 原因はMroongaのバグでした。
>>
>> 以下の提示いただいたクエリーを実行した際
>> MariaDBのオプティマイザーは、IN句内のサブクエリーを実行した結果のテー 
>> ブルと
>> IN句の外側のテーブル(Posts)テーブルをSEMI JOINで結合します。
>>
>> SELECT Id, ChannelId, RootId
>>     FROM Posts p3
>>    WHERE Id IN (
>>     SELECT * FROM
>>       (SELECT RootId
>>          FROM Posts
>>         WHERE UpdateAt > 1617352409099 AND
>>               ChannelId = 'i9rsh6im4ffepfpdgm51hjze3a'
>>         LIMIT 1000)
>>      temp_tab);
>>
>> IN句の中のサブクエリーの結果は以下のようになり、
>> 以下の表の値と、Posts.Idの値が同じレコードを抽出します。
>>
>> つまり、''(空文字)と"twn3smcaei8wjbqsm8bcmo8qah"と一致する
>> Posts.Idを持つレコードを抽出します。
>>
>> +----------------------------+
>> | RootId                     |
>> +----------------------------+
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> | twn3smcaei8wjbqsm8bcmo8qah |
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> |                            |
>> +----------------------------+
>> 20 rows in set (0.001 sec)
>>
>> この時、Mroongaを使用していると、''と一致するレコードとして
>> 任意のIDを持つレコードを抽出してしまい、意図しないIDのレコードが結果に 
>> 含まれてしまいます。
>> InnoDBでは、再現しないため、Mroonga特有の問題です。
>>
>> Mroongaを修正しますが、さしあたっては以下の対処方法で
>> 正しい結果が得られます。
>>
>> 今回の問題は、''のような空文字のレコードを持つ表との結合
>> で発生します。したがって、''のようなレコードが含まれないように
>> することで現象の発生を防げます。
>>
>> RootIdはIdと比較しており、IdはNOT NULL属性なので、RootIdが''なレコード
>> は除外しても問題ないと考えます。
>>
>> そのため、問題のクエリーのIN句の中のサブクエリーに
>> 以下のように、RootId <> ''を追加してRootIdが''なレコードを除外します。
>> このようにすることで、期待する結果が得られます。
>>
>> SELECT Id, ChannelId, RootId
>>     FROM Posts p3
>>    WHERE Id IN (
>>     SELECT * FROM
>>       (SELECT RootId
>>          FROM Posts
>>         WHERE UpdateAt > 1617352409099 AND
>>               ChannelId = 'i9rsh6im4ffepfpdgm51hjze3a' AND
>>               RootId <> ''
>>         LIMIT 1000)
>>      temp_tab);
>>
>> Mroongaの修正が完了しましたら、また改めて連絡します。
>>
>> 以上です。失礼いたします。
>>



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