diff options
author | Jan Lindström <jan.lindstrom@mariadb.com> | 2017-07-20 11:24:01 +0300 |
---|---|---|
committer | Jan Lindström <jan.lindstrom@mariadb.com> | 2017-07-20 13:18:30 +0300 |
commit | d1b3e428d4843b83ef2ea7443ba61a9b7f6bf999 (patch) | |
tree | 73825a8dfb81e994fd911626d058a7c0a611ae19 /storage/xtradb/btr | |
parent | f58142f644cd773c0eb02ba95920ca7ac55799d3 (diff) | |
download | mariadb-git-d1b3e428d4843b83ef2ea7443ba61a9b7f6bf999.tar.gz |
MDEV-13227: Assertion failure len < 16384 in file rem0rec.cc line 1285
Crashes with innodb_page_size=64K. Does not crash at <= 32K.
Problem was that when blob record that was earlier < 16k is
enlarged at update wo that length > 16K it should be stored
externally. However, that was not enforced when page-size = 64K
(note that 16K+1 < 64K/2 i.e. half of the btree leaf page).
btr_cur_optimistic_update: limit max record size to 16K
or in REDUNDANT row format to 16K-1.
Diffstat (limited to 'storage/xtradb/btr')
-rw-r--r-- | storage/xtradb/btr/btr0cur.cc | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/storage/xtradb/btr/btr0cur.cc b/storage/xtradb/btr/btr0cur.cc index 6480b756f4e..1a27fd0d6ea 100644 --- a/storage/xtradb/btr/btr0cur.cc +++ b/storage/xtradb/btr/btr0cur.cc @@ -2466,10 +2466,10 @@ any_extern: rec = page_cur_get_rec(page_cursor); } - /* We limit max record size to 16k for 64k page size. */ - if (!dict_table_is_comp(index->table) - && new_rec_size > REDUNDANT_REC_MAX_DATA_SIZE) { - ut_ad(srv_page_size == UNIV_PAGE_SIZE_MAX); + /* We limit max record size to 16k even for 64k page size. */ + if (new_rec_size >= COMPRESSED_REC_MAX_DATA_SIZE || + (!dict_table_is_comp(index->table) + && new_rec_size >= REDUNDANT_REC_MAX_DATA_SIZE)) { err = DB_OVERFLOW; goto func_exit; |