mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-27861: Creating partitioned tables should not be allowed with wsrep_osu_method=TOI and wsrep_strict_ddl=ON
Problem was incorrect handling of partitioned tables, because db_type == DB_TYPE_PARTITION_DB wsrep_should_replicate_ddl incorrectly marked DDL as not replicatable. However, in partitioned tables we should check implementing storage engine from table->file->partition_ht() if available because if partition handler is InnoDB all DDL should be allowed even with wsrep_strict_ddl. For other storage engines DDL should not be allowed and error should be issued. This is 10.5 version of the fix. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
This commit is contained in:
committed by
Julius Goryavsky
parent
de216618e2
commit
22414d2ed0
@@ -304,8 +304,15 @@ bool Sql_cmd_truncate_table::lock_table(THD *thd, TABLE_LIST *table_ref,
|
||||
versioned= table->versioned();
|
||||
hton= table->file->ht;
|
||||
#ifdef WITH_WSREP
|
||||
/* Resolve should we replicate truncate. It should
|
||||
be replicated if storage engine(s) associated
|
||||
are replicated by Galera. If this is partitioned
|
||||
table we need to find out default partition
|
||||
handlerton.
|
||||
*/
|
||||
if (WSREP(thd) &&
|
||||
!wsrep_should_replicate_ddl(thd, hton->db_type))
|
||||
!wsrep_should_replicate_ddl(thd, table->file->partition_ht() ?
|
||||
table->file->partition_ht() : hton))
|
||||
DBUG_RETURN(TRUE);
|
||||
#endif
|
||||
|
||||
@@ -327,12 +334,22 @@ bool Sql_cmd_truncate_table::lock_table(THD *thd, TABLE_LIST *table_ref,
|
||||
sequence= share->table_type == TABLE_TYPE_SEQUENCE;
|
||||
hton= share->db_type();
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP(thd) &&
|
||||
hton != view_pseudo_hton &&
|
||||
!wsrep_should_replicate_ddl(thd, hton->db_type))
|
||||
if (WSREP(thd) && hton != view_pseudo_hton)
|
||||
{
|
||||
tdc_release_share(share);
|
||||
DBUG_RETURN(TRUE);
|
||||
/* Resolve should we replicate truncate. It should
|
||||
be replicated if storage engine(s) associated
|
||||
are replicated by Galera. If this is partitioned
|
||||
table we need to find out default partition
|
||||
handlerton.
|
||||
*/
|
||||
const handlerton *ht= share->default_part_plugin ?
|
||||
plugin_hton(share->default_part_plugin) : hton;
|
||||
|
||||
if (ht && !wsrep_should_replicate_ddl(thd, ht))
|
||||
{
|
||||
tdc_release_share(share);
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user