summaryrefslogtreecommitdiff
path: root/storage/xtradb/btr
diff options
context:
space:
mode:
authorJan Lindström <jan.lindstrom@mariadb.com>2017-07-20 11:24:01 +0300
committerJan Lindström <jan.lindstrom@mariadb.com>2017-07-20 13:18:30 +0300
commitd1b3e428d4843b83ef2ea7443ba61a9b7f6bf999 (patch)
tree73825a8dfb81e994fd911626d058a7c0a611ae19 /storage/xtradb/btr
parentf58142f644cd773c0eb02ba95920ca7ac55799d3 (diff)
downloadmariadb-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.cc8
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;