Internal error: dictionary size 4303107232 overflow at dictend save
bugwaiting
### Bug Description:
# Description
We are experiencing an intermittent crash in Manticore during query execution on an RT index.
The crash is **not deterministic**: running the exact same query again immediately after the crash does **not reproduce the issue**.
The failure happens with:
```
FATAL: INTERNAL ERROR: dictionary size 4303107232 overflow at dictend save
```
This leads to a segmentation fault (signal 11).
---
# Environment
* Manticore version: `13.13.0`
* OS: Debian bookworm
* Index type: RT
* Table: `rt1`
---
# Query
```
SELECT *
FROM rt1
WHERE deleted = 0
AND message_id = '<xxx@g2email-c-dev4-7f5f5f49c8-rp546>'
AND customer = 1
AND MATCH('((@ft_filter "dsl.external\@test365.onmicrosoft.com"
| @ft_filter "dsl.external\@test365.onmicrosoft.com"
| @ft_filter "dsl.external\@test365.onmicrosoft.com#1"))')
AND ts_sent = 1774219011
LIMIT 0,100
OPTION max_matches=100
```
---
# Observed Behavior
* Crash occurs during normal operation (queries + background chunk merges).
* Logs show ongoing RT chunk merges before the crash.
* Error indicates a **dictionary size overflow (~4.3GB)**.
* Immediately retrying the same query works fine.
* Issue appears sporadic and not tied to a specific query pattern.
---
# Relevant Logs
```
[Thu Apr 2 12:00:17.444 2026] [643979] rt: table rt_attachment: merged chunks /manticore/rt_attachment/sphinx.22037 and /manticore/rt_attachment/sphinx.22038 to /manticore/rt_attachment/sphinx.22040 in 28s (progressive mode). Remaining chunk count: 135
[Thu Apr 2 12:01:01.641 2026] [643894] rt: table rt_attachment: merged chunks /manticore/rt_attachment/sphinx.22036 and /manticore/rt_attachment/sphinx.22040 to /manticore/rt_attachment/sphinx.22041 in 44s (progressive mode). Remaining chunk count: 134
[Thu Apr 2 12:04:00.553 2026] [643886] rt: table rt1: diskchunk 73655(142), segments 26 saved in 3.241875 (3.507477) sec, RAM saved/new 53464755/784334 ratio 0.950000 (soft limit 510027366, conf limit 536870912)
[Thu Apr 2 12:08:40.574 2026] [643955] rt: table rt1: diskchunk 73656(143), segments 28 saved in 3.371104 (3.487189) sec, RAM saved/new 61066372/607853 ratio 0.950000 (soft limit 510027366, conf limit 536870912)
[Thu Apr 2 12:14:30.311 2026] [643973] FATAL: INTERNAL ERROR: dictionary size 4303107232 overflow at dictend save
------- FATAL: CRASH DUMP -------
[Thu Apr 2 12:14:30.194 2026] [643794]
--- crashed SphinxQL request dump ---
SELECT *
FROM rt1
WHERE deleted = 0 AND message_id = '<xxx@g2email-c-dev4-7f5f5f49c8-rp546>'
AND customer = 1 AND MATCH('((@ft_filter "dsl.external\@test365.onmicrosoft.com"
| @ft_filter "dsl.external\@test365.onmicrosoft.com" | @ft_filter "dsl.external\@test365.onmicrosoft.com#1"))'
) AND ts_sent = 1774219011
LIMIT 0,100
OPTION max_matches=100
--- request dump end ---
--- local index:rt1
Manticore 13.13.0 e5465fe44@25100704 (columnar 8.1.0 e1522a2@25100213) (secondary 8.1.0 e1522a2@25100213) (knn 8.1.0 e1522a2@25100213) (embeddings 1.0.1)
Handling signal 11
-------------- backtrace begins here ---------------
Program compiled with Clang 16.0.6
Configured with flags: Configured with these definitions: -DDISTR_BUILD=bookworm -DUSE_SYSLOG=1 -DWITH_GALERA=1 -DWITH_RE2=1 -DWITH_RE2_FORCE_STATIC=1 -DWITH_STEMMER=1 -DWITH_STEMMER_FORCE_STATIC=1 -DWITH_NLJSON=1 -DWITH_UNIALGO=1 -DWITH_ICU=1 -DWITH_ICU_FORCE_STATIC=1 -DWITH_JIEBA=1 -DWITH_SSL=1 -DWITH_ZLIB=1 -DWITH_ZSTD=1 -DDL_ZSTD=1 -DZSTD_LIB=libzstd.so.1 -DWITH_CURL=1 -DDL_CURL=1 -DCURL_LIB=libcurl.so.4 -DWITH_ODBC=1 -DDL_ODBC=1 -DODBC_LIB=libodbc.so.2 -DWITH_EXPAT=1 -DDL_EXPAT=1 -DEXPAT_LIB=libexpat.so.1 -DWITH_ICONV=1 -DWITH_MYSQL=1 -DDL_MYSQL=1 -DMYSQL_LIB=libmariadb.so.3 -DWITH_POSTGRESQL=1 -DDL_POSTGRESQL=1 -DPOSTGRESQL_LIB=libpq.so.5 -DLOCALDATADIR=/var/lib/manticore -DFULL_SHARE_DIR=/usr/share/manticore
Built on Linux x86_64 (bookworm) (cross-compiled)
Stack bottom = 0x7ef2ad5f6b00, thread stack size = 0x20000
Trying manual backtrace:
Something wrong with thread stack, manual backtrace may be incorrect (fp=0x20000)
Wrong stack limit or frame pointer, manual backtrace failed (fp=0x20000, stack=0x7ef2ad600000, stacksize=0x20000)
Trying system backtrace:
begin of system symbols:
/usr/bin/searchd(_Z12sphBacktraceib+0x227)[0x560aa1b6e987]
/usr/bin/searchd(_Z11HandleCrashi+0x2e3)[0x560aa188c0b3]
/lib/x86_64-linux-gnu/libc.so.6(+0x3c050)[0x7fd70085a050]
/lib/x86_64-linux-gnu/libc.so.6(__pthread_rwlock_rdlock+0x0)[0x7fd7008ac7b0]
/usr/bin/searchd(_ZN8RwLock_t8ReadLockEv+0x36)[0x560aa1a34996]
/usr/bin/searchd(_Z7IterateRSt8functionIFvPN7Threads15LowThreadDesc_tEEE+0x26)[0x560aa1da3c56]
/usr/bin/searchd(_ZN7Threads13IterateActiveESt8functionIFvPNS_15LowThreadDesc_tEEE+0x71)[0x560aa1d7f4a1]
/usr/bin/searchd(+0x14fd36d)[0x560aa1da536d]
/usr/bin/searchd(_ZN6hazard16GetListOfPointedEOSt8functionIFPviEEi+0x2f)[0x560aa1da541f]
/usr/bin/searchd(_ZN15SearchHandler_cD1Ev+0x46)[0x560aa18a1346]
/usr/bin/searchd(_ZN15ClientSession_c7ExecuteESt4pairIPKciER11RowBuffer_i+0x1d9d)[0x560aa1a02aed]
/usr/bin/searchd(_Z8SqlServeSt10unique_ptrI16AsyncNetBuffer_cSt14default_deleteIS0_EE+0x1b73)[0x560aa192a173]
/usr/bin/searchd(_Z10MultiServeSt10unique_ptrI16AsyncNetBuffer_cSt14default_deleteIS0_EESt4pairIitE7Proto_e+0x43)[0x560aa1924c83]
/usr/bin/searchd(+0x107d832)[0x560aa1925832]
/usr/bin/searchd(_ZZN7Threads11CoRoutine_c13CreateContextESt8functionIFvvEESt4pairIN5boost7context13stack_contextENS_14StackFlavour_EEEENUlNS6_6detail10transfer_tEE_8__invokeESB_+0x1c)[0x560aa1a645dc]
/usr/bin/searchd(make_fcontext+0x2f)[0x560aa2ffd57f]
Trying boost backtrace:
0# sphBacktrace(int, bool) in /usr/bin/searchd
1# HandleCrash(int) in /usr/bin/searchd
2# 0x00007FD70085A050 in /lib/x86_64-linux-gnu/libc.so.6
3# __pthread_rwlock_rdlock in /lib/x86_64-linux-gnu/libc.so.6
4# RwLock_t::ReadLock() in /usr/bin/searchd
5# Iterate(std::function<void (Threads::LowThreadDesc_t*)>&) in /usr/bin/searchd
6# Threads::IterateActive(std::function<void (Threads::LowThreadDesc_t*)>) in /usr/bin/searchd
7# 0x0000560AA1DA536D in /usr/bin/searchd
8# hazard::GetListOfPointed(std::function<void* (int)>&&, int) in /usr/bin/searchd
9# SearchHandler_c::~SearchHandler_c() in /usr/bin/searchd
10# ClientSession_c::Execute(std::pair<char const*, int>, RowBuffer_i&) in /usr/bin/searchd
11# SqlServe(std::unique_ptr<AsyncNetBuffer_c, std::default_delete<AsyncNetBuffer_c> >) in /usr/bin/searchd
12# MultiServe(std::unique_ptr<AsyncNetBuffer_c, std::default_delete<AsyncNetBuffer_c> >, std::pair<int, unsigned short>, Proto_e) in /usr/bin/searchd
13# 0x0000560AA1925832 in /usr/bin/searchd
14# Threads::CoRoutine_c::CreateContext(std::function<void ()>, std::pair<boost::context::stack_context, Threads::StackFlavour_E>)::{lambda(boost::context::detail::transfer_t)#1}::__invoke(boost::context::detail::transfer_t) in /usr/bin/searchd
15# make_fcontext in /usr/bin/searchd
-------------- backtrace ends here ---------------
```
### Manticore Search Version:
13.13.0
### Operating System Version:
debian bookworm
### Have you tried the latest development version?
None
### Internal Checklist:
<sup>To be completed by the assignee. Check off tasks that have been completed or are not applicable.</sup>
<details>
- [ ] Implementation completed
- [ ] Tests developed
- [ ] Documentation updated
- [ ] Documentation reviewed
</details>
5 条评论