[groonga-dev,03052] Re: MariaDBバンドル版Mroonga 4.09でMroongaがインストール出来ない問題について

Zurück zum Archiv-Index

hiroshi hatake cosmo****@gmail*****
2015年 1月 9日 (金) 01:41:28 JST


畑ケです。
気を取り直してデバッガを出動させました。

>
> ...
>> mysqld.exe!test_plugin_options()[sql_plugin.cc:3968]
> ここあたりのコードはこうなっていて、
>
>    3952        /*
>    3953          PLUGIN_VAR_STR command-line options without PLUGIN_VAR_MEMALLOC, point
>    3954          directly to values in the argv[] array. For plugins started at the
>    3955          server startup, argv[] array is allocated with load_defaults(), and
>    3956          freed when the server is shut down.  But for plugins loaded with
>    3957          INSTALL PLUGIN, the memory allocated with load_defaults() is freed with
>    3958          freed() at the end of mysql_install_plugin(). Which means we cannot
>    3959          allow any pointers into that area.
>    3960          Thus, for all plugins loaded after the server was started,
>    3961          we copy string values to a plugin's memroot.
>    3962        */
>    3963        if (mysqld_server_started &&
>    3964            ((o->flags & (PLUGIN_VAR_STR | PLUGIN_VAR_NOCMDOPT |
>    3965                           PLUGIN_VAR_MEMALLOC)) == PLUGIN_VAR_STR))
>    3966        {
>    3967          sysvar_str_t* str= (sysvar_str_t *)o;
>    3968          if (*str->value)
>    3969            *str->value= strdup_root(mem_root, *str->value);
>    3970        }
>
> ↓に
>
>    3964            ((o->flags & (PLUGIN_VAR_STR | PLUGIN_VAR_NOCMDOPT |
>    3965                           PLUGIN_VAR_MEMALLOC)) == PLUGIN_VAR_STR))
>
> 該当しそうな条件のMroongaの変数は↓くらいなんですよねぇ。
>
> static MYSQL_SYSVAR_STR(default_wrapper_engine, mrn_default_wrapper_engine,
>                          PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
>                          "The default engine for wrapper mode",
>                          NULL,
>                          NULL,
>                          NULL);
>
> これ関連のコードをstorage/mroonga/ha_mroonga.ccから削除して
> ビルドすると直るか確認してもらえませんか?

Visual Studio のデバッガで追って確認してみました。

手順)
1. Visual Studioのデバッガでmysqldをアタッチ
2. mysqlクライアントにshare\mroonga\install.sqlを食べさせる。

すると、

>  3964            ((o->flags & (PLUGIN_VAR_STR | PLUGIN_VAR_NOCMDOPT |
>  3965                           PLUGIN_VAR_MEMALLOC)) == PLUGIN_VAR_STR))

の箇所ではなく、
その前の箇所の、

>  3963        if (mysqld_server_started &&
>  3964            ((o->flags & (PLUGIN_VAR_STR | PLUGIN_VAR_NOCMDOPT |
>  3965                           PLUGIN_VAR_MEMALLOC)) == PLUGIN_VAR_STR))
>  3966        {
>  3967          sysvar_str_t* str= (sysvar_str_t *)o;
>  3968          if (*str->value)
>  3969            *str->value= strdup_root(mem_root, *str->value);
>  3970        }

str->valueのチェックの、

>  3968          if (*str->value)

のstrがNULLで落ちていました。必ずこのifに到達すると異常終了します。

無理やりステップを進めると、

mysys\my_alloc.cの

432 char *strdup_root(MEM_ROOT *root, const char *str)
433 {
434   return strmake_root(root, str, strlen(str));
435 }

strがNULLになっていました。

-        str    0x00000050 <文字列の文字の読み取り中にエラーが発生しまし 
た。>    const char *

あと、デバッガで追っていて気になったのが、

 > 3950      st_mysql_sys_var *o= *opt;

この行は最適化により実行ファイルと対応する箇所が無くなっているようで、
ブレークポイントを置けませんでした…。

>> Mroongaを登録しようとしているところでmysqldが異常終了しているようで
>> す。。。
>> この問題を解決するのに他に必要そうな情報はありますか?
> 登録するSQLを1つずつ実行して具体的にどのSQLが原因かを調べる
> のがよさそうに思います。
>
> あとdataディレクトリーにgroonga.logというファイルがあると思
> うので、そこになにかないか確認した方がよい気がします。
>

ほか、tmp_root, tmp, argc, argvの異常終了した時点での値のダンプを添付し 
ます。

~~~

他に役に立つかわからないですが、Ubuntuの場合も試してみたので報告します。

http://packages.groonga.org/nightly/mariadb-10.0.15-with-mroonga-4.09.2015.01.08.tar.gz
をUbuntu14.04.1 LTSでビルドし、share\mroonga\install.sqlを食べさせると、

今までwarningが出ていなかったと思いますが、
warningが出るようになってしまっています。

---
MariaDB [(none)]> source ../share/mroonga/install.sql
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
---



groonga-dev メーリングリストの案内
Zurück zum Archiv-Index