[debian-mysql] Bug#1110683: mariadb-plugin-mroonga: incorrect mroonga comment hangs mariadb, unable to restart, corrupts database

Marc Lehmann debian-reportbug at plan9.de
Sun Aug 10 01:15:35 BST 2025


Package: mariadb-plugin-mroonga
Version: 10.11.11
Severity: normal

Dear Maintainer,

I tried to execute the following (incorrect) create table statement with mroonga installed:

   CREATE TABLE torrent (
      hash BINARY(20) PRIMARY KEY,
      mtime INT UNSIGNED NOT NULL,
      stime INT UNSIGNED NOT NULL,
      flags INT UNSIGNED NOT NULL,
      name TEXT NOT NULL,
      size BIGINT UNSIGNED NOT NULL,
      fcount INT NOT NULL,
      fnames LONGTEXT NOT NULL,
      FULLTEXT INDEX (name) COMMENT 'tokenizer "TokenBigramSplitSymbolAlphaDigit", flags "COMPRESS_ZSTD"',
      FULLTEXT INDEX (fnames) COMMENT 'tokenizer "TokenBigramSplitSymbolAlphaDigit", flags "COMPRESS_ZSTD"'
   ) Engine=Mroonga DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

This caused the server to hang. kill'ing the command had no effect,
systemctl restart mariadbd also had no effect (other than hanging).

kill -9 mariadbd did manage to restart mariadb, but the database was
corrupted: show tables did not show the newly created table, but
re-running the create command immediately failed because the groonga
database already existed.

using gdb on the hanging server showed it apparently being stuck in an
endless loop, likely because the comment parser does not recover properly
from errors.

(gdb) bt
#0  0x000055d9535d5d15 in push_warning_printf (thd=thd at entry=0x7ff688000c68, 
    level=level at entry=Sql_state_errno_level::WARN_LEVEL_WARN, code=code at entry=16508, 
    format=format at entry=0x7ff6a59a2b98 "The index flag '%-.64s' is invalid. It is ignored") at ./sql/sql_error.cc:788
#1  0x00007ff6a56abef8 in mrn_parse_grn_index_column_flags (thd=<optimized out>, 
    flag_names=flag_names at entry=0x7ff689dc1468 "COMPRESS_LZ4", flag_names_length=flag_names_length at entry=12, 
    index_column_flags=index_column_flags at entry=0x7ff6ac15b5f8, ctx=<optimized out>)
    at ./storage/mroonga/ha_mroonga.cpp:1682
#2  0x00007ff6a56b5256 in ha_mroonga::find_index_column_flags (this=this at entry=0x7ff688380a48, 
    key=key at entry=0x7ff688352f98, index_column_flags=index_column_flags at entry=0x7ff6ac15b5f8)
    at ./storage/mroonga/ha_mroonga.cpp:9730
#3  0x00007ff6a56b732a in ha_mroonga::storage_create_index (this=this at entry=0x7ff688380a48, 
    table=table at entry=0x7ff6ac162930, grn_table_name=grn_table_name at entry=0x7ff6ac15f798 "torrent", 
    grn_table=grn_table at entry=0x7ff689a5a750, tmp_share=tmp_share at entry=0x7ff6883a1598, key_info=0x7ff688352f98, 
    index_tables=<optimized out>, index_columns=<optimized out>, i=<optimized out>)
    at ./storage/mroonga/ha_mroonga.cpp:4049
#4  0x00007ff6a56b77ce in ha_mroonga::storage_create_indexes (this=this at entry=0x7ff688380a48, 
    table=table at entry=0x7ff6ac162930, grn_table_name=<optimized out>, grn_table=grn_table at entry=0x7ff689a5a750, 
    tmp_share=tmp_share at entry=0x7ff6883a1598) at ./storage/mroonga/ha_mroonga.cpp:4149
#5  0x00007ff6a56b7bfd in ha_mroonga::storage_create (this=this at entry=0x7ff688380a48, 
    name=name at entry=0x7ff6ac163cf0 "./dhtcrawler/torrent", table=table at entry=0x7ff6ac162930, 
    info=info at entry=0x7ff6ac164390, tmp_share=tmp_share at entry=0x7ff6883a1598) at ./storage/mroonga/ha_mroonga.cpp:3585
#6  0x00007ff6a56b7f79 in ha_mroonga::create (this=0x7ff688380a48, name=0x7ff6ac163cf0 "./dhtcrawler/torrent", 
    table=0x7ff6ac162930, info=0x7ff6ac164390) at ./storage/mroonga/ha_mroonga.cpp:4247
#7  0x000055d953884b3b in handler::ha_create (this=0x7ff688380a48, name=0x7ff6ac163cf0 "./dhtcrawler/torrent", 
    form=0x7ff6ac162930, info_arg=0x7ff6ac164390) at ./sql/handler.cc:5598
#8  0x000055d9538853f2 in ha_create_table (thd=thd at entry=0x7ff688000c68, path=<optimized out>, db=<optimized out>, 
    table_name=<optimized out>, create_info=create_info at entry=0x7ff6ac164390, frm=frm at entry=0x7ff6ac163ce0, 
    skip_frm_file=<optimized out>) at ./sql/handler.cc:6068
#9  0x000055d9536d8b3e in create_table_impl (thd=thd at entry=0x7ff688000c68, 
    ddl_log_state_create=ddl_log_state_create at entry=0x7ff6ac164010, ddl_log_state_rm=<optimized out>, 
    ddl_log_state_rm at entry=0x7ff6ac164220, orig_db=..., orig_table_name=..., db=..., table_name=..., path=..., 
    options=..., create_info=<optimized out>, alter_info=<optimized out>, create_table_mode=<optimized out>, 
    is_trans=<optimized out>, key_info=<optimized out>, key_count=<optimized out>, frm=<optimized out>)
    at ./sql/sql_table.cc:4811
#10 0x000055d9536d91cc in mysql_create_table_no_lock (thd=thd at entry=0x7ff688000c68, 
    ddl_log_state_create=ddl_log_state_create at entry=0x7ff6ac164010, 
    ddl_log_state_rm=ddl_log_state_rm at entry=0x7ff6ac164220, create_info=create_info at entry=0x7ff6ac164390, 
    alter_info=alter_info at entry=0x7ff6ac1640b0, is_trans=is_trans at entry=0x7ff6ac163fd0, 
    create_table_mode=<optimized out>, table_list=<optimized out>) at ./sql/sql_table.cc:4913
#11 0x000055d9536e372b in mysql_create_table (alter_info=0x7ff6ac1640b0, create_info=0x7ff6ac164390, 
    create_table=0x7ff6880138a8, thd=0x7ff688000c68) at ./sql/sql_table.cc:5139
#12 Sql_cmd_create_table_like::execute (this=<optimized out>, thd=0x7ff688000c68) at ./sql/sql_table.cc:13019
#13 0x000055d953619476 in mysql_execute_command (thd=thd at entry=0x7ff688000c68, 
    is_called_from_prepared_stmt=is_called_from_prepared_stmt at entry=false) at ./sql/sql_parse.cc:6167
#14 0x000055d95361e416 in mysql_parse (thd=0x7ff688000c68, rawbuf=<optimized out>, length=<optimized out>, 
    parser_state=<optimized out>) at ./sql/sql_parse.cc:8188
#15 0x000055d953620a95 in dispatch_command (command=command at entry=COM_QUERY, thd=thd at entry=0x7ff688000c68, 
    packet=packet at entry=0x7ff688008759 "CREATE TABLE torrent (    hash BINARY(20) PRIMARY KEY,    mtime INT UNSIGNED NOT NULL,    stime INT UNSIGNED NOT NULL,    flags INT UNSIGNED NOT NULL,    name TEXT NOT NULL,    size BIGINT UNSIGNED NO"..., packet_length=packet_length at entry=536, blocking=blocking at entry=true) at ./sql/sql_parse.cc:2004
#16 0x000055d953622a4f in do_command (thd=thd at entry=0x7ff688000c68, blocking=blocking at entry=true)
    at ./sql/sql_parse.cc:1418
#17 0x000055d95374aa35 in do_handle_one_connection (connect=<optimized out>, connect at entry=0x55d96d19f8d8, 
    put_in_cache=put_in_cache at entry=true) at ./sql/sql_connect.cc:1386
#18 0x000055d95374ad8d in handle_one_connection (arg=arg at entry=0x55d96d19f8d8) at ./sql/sql_connect.cc:1298

-- System Information:
Debian Release: 12.8
  APT prefers stable-updates
  APT policy: (990, 'stable-updates'), (990, 'stable-security'), (990, 'stable'), (500, 'unstable-debug'), (500, 'testing-debug'), (500, 'oldstable-debug'), (500, 'unstable'), (500, 'testing'), (100, 'bookworm-fasttrack'), (1, 'experimental-debug'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386, x32

Kernel: Linux 6.1.0-28-amd64 (SMP w/28 CPU threads; PREEMPT)
Kernel taint flags: TAINT_USER, TAINT_WARN, TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=en_IE.UTF-8, LC_CTYPE=en_IE.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages mariadb-plugin-mroonga depends on:
ii  libc6                2.36-9+deb12u9
ii  libgcc-s1            14-20240201-3
ii  libstdc++6           12.2.0-14+deb12u1
ii  mariadb-server       1:10.11.6-0+deb12u1
ii  mariadb-server-core  1:10.11.6-0+deb12u1
ii  zlib1g               1:1.2.13.dfsg-1

mariadb-plugin-mroonga recommends no packages.

mariadb-plugin-mroonga suggests no packages.



More information about the pkg-mysql-maint mailing list