mirror of
https://github.com/MariaDB/server.git
synced 2025-11-28 17:36:30 +03:00
Introduced a new wsrep_strict_ddl configuration variable in which
Galera checks storage engine of the effected table. If table is not
InnoDB (only storage engine currently fully supporting Galera
replication) DDL-statement will return error code:
ER_GALERA_REPLICATION_NOT_SUPPORTED
eng "DDL-statement is forbidden as table storage engine does not support Galera replication"
However, when wsrep_replicate_myisam=ON we allow DDL-statements to
MyISAM tables. If effected table is allowed storage engine Galera
will run normal TOI.
This new setting should be for now set globally on all
nodes in a cluster. When this setting is set following DDL-clauses
accessing tables not supporting Galera replication are refused:
* CREATE TABLE (e.g. CREATE TABLE t1(a int) engine=Aria
* ALTER TABLE
* TRUNCATE TABLE
* CREATE VIEW
* CREATE TRIGGER
* CREATE INDEX
* DROP INDEX
* RENAME TABLE
* DROP TABLE
Statements on PROCEDURE, EVENT, FUNCTION are allowed as effected
tables are known only at execution. Furthermore, USER, ROLE, SERVER,
DATABASE statements are also allowed as they do not really have
effected table.
79 lines
3.2 KiB
C
79 lines
3.2 KiB
C
/* Copyright 2014 Codership Oy <http://www.codership.com> & SkySQL Ab
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
|
|
|
|
#ifndef WSREP_INCLUDED
|
|
#define WSREP_INCLUDED
|
|
|
|
#include <my_config.h>
|
|
|
|
#ifdef WITH_WSREP
|
|
|
|
#define IF_WSREP(A,B) A
|
|
|
|
#define DBUG_ASSERT_IF_WSREP(A) DBUG_ASSERT(A)
|
|
|
|
#define WSREP_MYSQL_DB (char *)"mysql"
|
|
|
|
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) \
|
|
if (WSREP(thd) && wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \
|
|
goto wsrep_error_label;
|
|
|
|
#define WSREP_TO_ISOLATION_BEGIN_CREATE(db_, table_, table_list_, create_info_) \
|
|
if (WSREP(thd) && \
|
|
wsrep_to_isolation_begin(thd, db_, table_, \
|
|
table_list_, NULL, create_info_)) \
|
|
goto wsrep_error_label;
|
|
|
|
#define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_, create_info_) \
|
|
if (WSREP(thd) && wsrep_thd_is_local(thd) && \
|
|
wsrep_to_isolation_begin(thd, db_, table_, \
|
|
table_list_, alter_info_, create_info_)) \
|
|
goto wsrep_error_label;
|
|
|
|
#define WSREP_TO_ISOLATION_END \
|
|
if ((WSREP(thd) && wsrep_thd_is_local_toi(thd)) || \
|
|
wsrep_thd_is_in_rsu(thd)) \
|
|
wsrep_to_isolation_end(thd);
|
|
|
|
/*
|
|
Checks if lex->no_write_to_binlog is set for statements that use LOCAL or
|
|
NO_WRITE_TO_BINLOG.
|
|
*/
|
|
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_) \
|
|
if (WSREP(thd) && !thd->lex->no_write_to_binlog \
|
|
&& wsrep_to_isolation_begin(thd, db_, table_, table_list_)) goto wsrep_error_label;
|
|
|
|
#define WSREP_SYNC_WAIT(thd_, before_) \
|
|
{ if (WSREP_CLIENT(thd_) && \
|
|
wsrep_sync_wait(thd_, before_)) goto wsrep_error_label; }
|
|
|
|
#else /* !WITH_WSREP */
|
|
|
|
/* These macros are needed to compile MariaDB without WSREP support
|
|
* (e.g. embedded) */
|
|
|
|
#define IF_WSREP(A,B) B
|
|
#define WSREP_DEBUG(...)
|
|
#define WSREP_ERROR(...)
|
|
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) do { } while(0)
|
|
#define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_, create_info_)
|
|
#define WSREP_TO_ISOLATION_END
|
|
#define WSREP_TO_ISOLATION_BEGIN_CREATE(db_, table_, table_list_, create_info_)
|
|
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_)
|
|
#define WSREP_SYNC_WAIT(thd_, before_)
|
|
#endif /* WITH_WSREP */
|
|
|
|
#endif /* WSREP_INCLUDED */
|