diff options
Diffstat (limited to 'sql/wsrep_mysqld.h')
-rw-r--r-- | sql/wsrep_mysqld.h | 124 |
1 files changed, 43 insertions, 81 deletions
diff --git a/sql/wsrep_mysqld.h b/sql/wsrep_mysqld.h index 88c276e8719..c18746b379a 100644 --- a/sql/wsrep_mysqld.h +++ b/sql/wsrep_mysqld.h @@ -1,5 +1,4 @@ -/* Copyright 2008-2021 Codership Oy <http://www.codership.com> - Copyright (c) 2020, 2021, MariaDB +/* Copyright 2008-2022 Codership Oy <http://www.codership.com> 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 @@ -20,8 +19,6 @@ #include <wsrep.h> #ifdef WITH_WSREP -extern bool WSREP_ON_; -extern bool WSREP_PROVIDER_EXISTS_; #include <mysql/plugin.h> #include "mysql/service_wsrep.h" @@ -40,21 +37,12 @@ typedef struct st_mysql_show_var SHOW_VAR; #include "wsrep/provider.hpp" #include "wsrep/streaming_context.hpp" #include "wsrep_api.h" -#include <vector> #include <map> -#include "wsrep_server_state.h" #define WSREP_UNDEFINED_TRX_ID ULONGLONG_MAX -class set_var; class THD; -enum wsrep_consistency_check_mode { - NO_CONSISTENCY_CHECK, - CONSISTENCY_CHECK_DECLARED, - CONSISTENCY_CHECK_RUNNING, -}; - // Global wsrep parameters // MySQL wsrep options @@ -81,7 +69,6 @@ extern ulong wsrep_max_ws_rows; extern const char* wsrep_notify_cmd; extern my_bool wsrep_certify_nonPK; extern long int wsrep_protocol_version; -extern ulong wsrep_forced_binlog_format; extern my_bool wsrep_desync; extern ulong wsrep_reject_queries; extern my_bool wsrep_recovery; @@ -101,7 +88,7 @@ extern ulong wsrep_running_applier_threads; extern ulong wsrep_running_rollbacker_threads; extern bool wsrep_new_cluster; extern bool wsrep_gtid_mode; -extern uint wsrep_gtid_domain_id; +extern uint32 wsrep_gtid_domain_id; extern ulonglong wsrep_mode; extern my_bool wsrep_strict_ddl; @@ -114,7 +101,7 @@ enum enum_wsrep_reject_types { enum enum_wsrep_OSU_method { WSREP_OSU_TOI, WSREP_OSU_RSU, - WSREP_OSU_NONE + WSREP_OSU_NONE, }; enum enum_wsrep_sync_wait { @@ -237,68 +224,46 @@ extern bool wsrep_reload_ssl(); /* Other global variables */ extern wsrep_seqno_t wsrep_locked_seqno; -#define WSREP_ON unlikely(WSREP_ON_) - -/* use xxxxxx_NNULL macros when thd pointer is guaranteed to be non-null to - * avoid compiler warnings (GCC 6 and later) */ -#define WSREP_NNULL(thd) \ - (WSREP_PROVIDER_EXISTS_ && thd->variables.wsrep_on) +/* A wrapper function for MySQL log functions. The call will prefix + the log message with WSREP and forward the result buffer to fun. */ +void WSREP_LOG(void (*fun)(const char* fmt, ...), const char* fmt, ...); -#define WSREP(thd) \ - (thd && WSREP_NNULL(thd)) +#define WSREP_SYNC_WAIT(thd_, before_) \ + { if (WSREP_CLIENT(thd_) && \ + wsrep_sync_wait(thd_, before_)) goto wsrep_error_label; } -#define WSREP_CLIENT_NNULL(thd) \ - (WSREP_NNULL(thd) && thd->wsrep_client_thread) +#define WSREP_MYSQL_DB (char *)"mysql" -#define WSREP_CLIENT(thd) \ - (WSREP(thd) && thd->wsrep_client_thread) +#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) \ + if (WSREP_ON && WSREP(thd) && wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \ + goto wsrep_error_label; -#define WSREP_EMULATE_BINLOG_NNULL(thd) \ - (WSREP_NNULL(thd) && wsrep_emulate_bin_log) +#define WSREP_TO_ISOLATION_BEGIN_CREATE(db_, table_, table_list_, create_info_) \ + if (WSREP_ON && WSREP(thd) && \ + wsrep_to_isolation_begin(thd, db_, table_, \ + table_list_, nullptr, nullptr, create_info_))\ + goto wsrep_error_label; -#define WSREP_EMULATE_BINLOG(thd) \ - (WSREP(thd) && wsrep_emulate_bin_log) +#define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_, fk_tables_, create_info_) \ + if (WSREP(thd) && wsrep_thd_is_local(thd) && \ + wsrep_to_isolation_begin(thd, db_, table_, \ + table_list_, alter_info_, fk_tables_, create_info_)) -#define WSREP_BINLOG_FORMAT(my_format) \ - ((wsrep_forced_binlog_format != BINLOG_FORMAT_UNSPEC) ? \ - wsrep_forced_binlog_format : my_format) +#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); -/* A wrapper function for MySQL log functions. The call will prefix - the log message with WSREP and forward the result buffer to fun. */ -void WSREP_LOG(void (*fun)(const char* fmt, ...), const char* fmt, ...); +/* + 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_DEBUG(...) \ - if (wsrep_debug) sql_print_information( "WSREP: " __VA_ARGS__) -#define WSREP_INFO(...) sql_print_information( "WSREP: " __VA_ARGS__) -#define WSREP_WARN(...) sql_print_warning( "WSREP: " __VA_ARGS__) -#define WSREP_ERROR(...) sql_print_error( "WSREP: " __VA_ARGS__) -#define WSREP_UNKNOWN(fmt, ...) WSREP_ERROR("UNKNOWN: " fmt, ##__VA_ARGS__) - -#define WSREP_LOG_CONFLICT_THD(thd, role) \ - WSREP_INFO( \ - "%s: \n " \ - " THD: %lu, mode: %s, state: %s, conflict: %s, seqno: %lld\n " \ - " SQL: %s", \ - role, \ - thd_get_thread_id(thd), \ - wsrep_thd_client_mode_str(thd), \ - wsrep_thd_client_state_str(thd), \ - wsrep_thd_transaction_state_str(thd), \ - wsrep_thd_trx_seqno(thd), \ - wsrep_thd_query(thd) \ - ); - -#define WSREP_LOG_CONFLICT(bf_thd, victim_thd, bf_abort) \ - if (wsrep_debug || wsrep_log_conflicts) \ - { \ - WSREP_INFO("cluster conflict due to %s for threads:", \ - (bf_abort) ? "high priority abort" : "certification failure" \ - ); \ - if (bf_thd) WSREP_LOG_CONFLICT_THD(bf_thd, "Winning thread"); \ - if (victim_thd) WSREP_LOG_CONFLICT_THD(victim_thd, "Victim thread"); \ - WSREP_INFO("context: %s:%d", __FILE__, __LINE__); \ - } #define WSREP_PROVIDER_EXISTS (WSREP_PROVIDER_EXISTS_) @@ -312,9 +277,6 @@ static inline bool wsrep_cluster_address_exists() extern my_bool wsrep_ready_get(); extern void wsrep_ready_wait(); -class Ha_trx_info; -struct THD_TRANS; - extern mysql_mutex_t LOCK_wsrep_ready; extern mysql_cond_t COND_wsrep_ready; extern mysql_mutex_t LOCK_wsrep_sst; @@ -338,8 +300,10 @@ extern mysql_mutex_t LOCK_wsrep_donor_monitor; extern mysql_cond_t COND_wsrep_joiner_monitor; extern mysql_cond_t COND_wsrep_donor_monitor; -extern my_bool wsrep_emulate_bin_log; extern int wsrep_to_isolation; +#ifdef GTID_SUPPORT +extern rpl_sidno wsrep_sidno; +#endif /* GTID_SUPPORT */ extern my_bool wsrep_preordered_opt; #ifdef HAVE_PSI_INTERFACE @@ -383,8 +347,6 @@ extern PSI_thread_key key_wsrep_sst_donor_monitor; struct TABLE_LIST; class Alter_info; -struct HA_CREATE_INFO; - int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_, const TABLE_LIST* table_list, const Alter_info* alter_info= nullptr, @@ -638,12 +600,6 @@ wsrep::key wsrep_prepare_key_for_toi(const char* db, const char* table, /* These macros are needed to compile MariaDB without WSREP support * (e.g. embedded) */ -#define WSREP_ON false -#define WSREP(T) (0) -#define WSREP_NNULL(T) (0) -#define WSREP_EMULATE_BINLOG(thd) (0) -#define WSREP_EMULATE_BINLOG_NNULL(thd) (0) -#define WSREP_BINLOG_FORMAT(my_format) ((ulong)my_format) #define WSREP_PROVIDER_EXISTS (0) #define wsrep_emulate_bin_log (0) #define wsrep_to_isolation (0) @@ -656,6 +612,12 @@ wsrep::key wsrep_prepare_key_for_toi(const char* db, const char* table, #define wsrep_create_appliers(X) do {} while(0) #define wsrep_should_replicate_ddl(X,Y) (1) #define wsrep_cluster_address_exists() (false) +#define WSREP_MYSQL_DB (0) +#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) do { } while(0) +#define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_, fk_tables_) +#define WSREP_TO_ISOLATION_END +#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_) +#define WSREP_SYNC_WAIT(thd_, before_) #endif /* WITH_WSREP */ |