Commit 074925d9 authored by Sergei Petrunia's avatar Sergei Petrunia

MDEV-13153: Assertion ... failed on partitioned RocksDB table

ha_partition creates temporary ha_XXX objects for its partitions when
performing DDL operations. The objects were created on a MEM_ROOT and
never deleted.
This works as long as ha_XXX objects free all data ha_XXX::close() and
don't rely on a proper destructor invocation. Unfortunately, ha_rocksdb
includes String members which need to be delete'd properly.

Fixed the bug by having ha_partition::~ha_partition delete these temporary
objects.
parent 2a1035b0
......@@ -413,8 +413,12 @@ ha_partition::~ha_partition()
destroy_record_priority_queue();
my_free(m_part_ids_sorted_by_num_of_records);
if (m_added_file)
{
for (handler **ph= m_added_file; *ph; ph++)
delete (*ph);
}
clear_handler_file();
free_root(&m_mem_root, MYF(0));
DBUG_VOID_RETURN;
......
......@@ -121,3 +121,14 @@ t2
DROP TABLE t2;
use test;
DROP DATABASE db3;
#
# MDEV-13153 Assertion `global_status_var.global_memory_used == 0 '
# failed upon server restart with partitioned RocksDB table
#
CREATE TABLE t1 (a INT) ENGINE=RocksDB PARTITION BY HASH(a) PARTITIONS 2;
INSERT INTO t1 (a) VALUES (1),(2);
ALTER TABLE t1 ADD PARTITION PARTITIONS 2;
SELECT 1;
1
1
DROP TABLE t1;
......@@ -120,3 +120,14 @@ DROP TABLE t2;
use test;
DROP DATABASE db3;
--echo #
--echo # MDEV-13153 Assertion `global_status_var.global_memory_used == 0 '
--echo # failed upon server restart with partitioned RocksDB table
--echo #
CREATE TABLE t1 (a INT) ENGINE=RocksDB PARTITION BY HASH(a) PARTITIONS 2;
INSERT INTO t1 (a) VALUES (1),(2);
ALTER TABLE t1 ADD PARTITION PARTITIONS 2;
--source include/restart_mysqld.inc
SELECT 1;
DROP TABLE t1;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment