Commit 903cfde1 authored by Nirbhay Choubey's avatar Nirbhay Choubey

MDEV-7067: Server outputs Galera (WSREP) information, even if Galera is disabled

* mysqld_safe: Since wsrep_on variable is mandatory in 10.1, skip wsrep
position recovery if its OFF.
* mysqld: Remove "-wsrep" from server version
* mysqld: Remove wsrep patch version from @@version_comment
* mysqld: Introduce @@wsrep_patch_version
parent 1b00edc4
...@@ -28,29 +28,17 @@ OPTION(WITH_WSREP "WSREP replication API (to use, e.g. Galera Replication librar ...@@ -28,29 +28,17 @@ OPTION(WITH_WSREP "WSREP replication API (to use, e.g. Galera Replication librar
# Set the patch version # Set the patch version
SET(WSREP_PATCH_VERSION "10") SET(WSREP_PATCH_VERSION "10")
# MariaDB addition: Revision number of the last revision merged from # Obtain wsrep API version
# codership branch visible in @@version_comment. FILE(STRINGS "${MySQL_SOURCE_DIR}/wsrep/wsrep_api.h" WSREP_API_VERSION
# Branch : codership-mysql/5.6 LIMIT_COUNT 1 REGEX "WSREP_INTERFACE_VERSION")
SET(WSREP_PATCH_REVNO "4144") # Should be updated on every merge. STRING(REGEX MATCH "([0-9]+)" WSREP_API_VERSION "${WSREP_API_VERSION}")
# MariaDB addition: Revision number of the last revision merged from
# Branch : lp:maria/maria-10.0-galera
SET(WSREP_PATCH_REVNO2 "3919") # Should be updated on every merge.
# MariaDB: Obtain patch revision number:
# Update WSREP_PATCH_REVNO if WSREP_REV environment variable is set.
IF (DEFINED ENV{WSREP_REV})
SET(WSREP_PATCH_REVNO $ENV{WSREP_REV})
ENDIF()
SET(WSREP_INTERFACE_VERSION 25)
SET(WSREP_VERSION SET(WSREP_VERSION "${WSREP_API_VERSION}.${WSREP_PATCH_VERSION}"
"${WSREP_INTERFACE_VERSION}.${WSREP_PATCH_VERSION}.r${WSREP_PATCH_REVNO}") CACHE INTERNAL "WSREP version")
SET(WSREP_PROC_INFO ${WITH_WSREP}) SET(WSREP_PROC_INFO ${WITH_WSREP})
IF(WITH_WSREP) IF(WITH_WSREP)
SET(COMPILATION_COMMENT "${COMPILATION_COMMENT}, wsrep_${WSREP_VERSION}") SET(WSREP_PATCH_VERSION "wsrep_${WSREP_VERSION}")
ENDIF() ENDIF()
...@@ -23,6 +23,10 @@ ...@@ -23,6 +23,10 @@
#define MYSQL_CONFIG_NAME "my" #define MYSQL_CONFIG_NAME "my"
#define MYSQL_COMPILATION_COMMENT "@COMPILATION_COMMENT@" #define MYSQL_COMPILATION_COMMENT "@COMPILATION_COMMENT@"
#ifdef WITH_WSREP
#define WSREP_PATCH_VERSION "@WSREP_PATCH_VERSION@"
#endif
/* mysqld compile time options */ /* mysqld compile time options */
#endif /* _CUSTOMCONFIG_ */ #endif /* _CUSTOMCONFIG_ */
......
...@@ -365,6 +365,20 @@ NUMERIC_BLOCK_SIZE NULL ...@@ -365,6 +365,20 @@ NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST TOI,RSU ENUM_VALUE_LIST TOI,RSU
READ_ONLY NO READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME WSREP_PATCH_VERSION
SESSION_VALUE NULL
GLOBAL_VALUE wsrep_25.10
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE VARCHAR
VARIABLE_COMMENT wsrep patch version
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME WSREP_PROVIDER VARIABLE_NAME WSREP_PROVIDER
SESSION_VALUE NULL SESSION_VALUE NULL
GLOBAL_VALUE none GLOBAL_VALUE none
......
...@@ -20,6 +20,7 @@ mysqld_ld_preload= ...@@ -20,6 +20,7 @@ mysqld_ld_preload=
mysqld_ld_library_path= mysqld_ld_library_path=
flush_caches=0 flush_caches=0
numa_interleave=0 numa_interleave=0
wsrep_on=0
# Initial logging status: error log is not open, and not using syslog # Initial logging status: error log is not open, and not using syslog
logging=init logging=init
...@@ -319,6 +320,15 @@ parse_arguments() { ...@@ -319,6 +320,15 @@ parse_arguments() {
--timezone=*) TZ="$val"; export TZ; ;; --timezone=*) TZ="$val"; export TZ; ;;
--flush[-_]caches) flush_caches=1 ;; --flush[-_]caches) flush_caches=1 ;;
--numa[-_]interleave) numa_interleave=1 ;; --numa[-_]interleave) numa_interleave=1 ;;
--wsrep[-_]on) wsrep_on=1 ;;
--skip[-_]wsrep[-_]on) wsrep_on=0 ;;
--wsrep[-_]on=*)
if echo $val | grep -iq '\(ON\|1\)'; then
wsrep_on=1
else
wsrep_on=0
fi
;;
--wsrep[-_]urls=*) wsrep_urls="$val"; ;; --wsrep[-_]urls=*) wsrep_urls="$val"; ;;
--wsrep[-_]provider=*) --wsrep[-_]provider=*)
if test -n "$val" && test "$val" != "none" if test -n "$val" && test "$val" != "none"
...@@ -968,18 +978,24 @@ do ...@@ -968,18 +978,24 @@ do
start_time=`date +%M%S` start_time=`date +%M%S`
# this sets wsrep_start_position_opt # Perform wsrep position recovery if wsrep_on=1, skip otherwise.
wsrep_recover_position "$cmd" if test $wsrep_on -eq 1
then
# this sets wsrep_start_position_opt
wsrep_recover_position "$cmd"
[ $? -ne 0 ] && exit 1 # [ $? -ne 0 ] && exit 1 #
[ -n "$wsrep_urls" ] && url=`wsrep_pick_url $wsrep_urls` # check connect address [ -n "$wsrep_urls" ] && url=`wsrep_pick_url $wsrep_urls` # check connect address
if [ -z "$url" ] if [ -z "$url" ]
then then
eval_log_error "$cmd $wsrep_start_position_opt" eval_log_error "$cmd $wsrep_start_position_opt"
else
eval_log_error "$cmd $wsrep_start_position_opt --wsrep_cluster_address=$url"
fi
else else
eval_log_error "$cmd $wsrep_start_position_opt --wsrep_cluster_address=$url" eval_log_error "$cmd"
fi fi
if [ $want_syslog -eq 0 -a ! -f "$err_log" ]; then if [ $want_syslog -eq 0 -a ! -f "$err_log" ]; then
......
...@@ -1900,14 +1900,16 @@ static void __cdecl kill_server(int sig_ptr) ...@@ -1900,14 +1900,16 @@ static void __cdecl kill_server(int sig_ptr)
} }
#endif #endif
if (WSREP_ON) /* Stop wsrep threads in case they are running. */
wsrep_stop_replication(NULL); wsrep_stop_replication(NULL);
close_connections(); close_connections();
if (wsrep_inited == 1) if (wsrep_inited == 1)
wsrep_deinit(true); wsrep_deinit(true);
wsrep_thr_deinit();
if (sig != MYSQL_KILL_SIGNAL && if (sig != MYSQL_KILL_SIGNAL &&
sig != 0) sig != 0)
unireg_abort(1); /* purecov: inspected */ unireg_abort(1); /* purecov: inspected */
...@@ -4974,13 +4976,20 @@ a file name for --log-bin-index option", opt_binlog_index_name); ...@@ -4974,13 +4976,20 @@ a file name for --log-bin-index option", opt_binlog_index_name);
opt_bin_logname= my_once_strdup(buf, MYF(MY_WME)); opt_bin_logname= my_once_strdup(buf, MYF(MY_WME));
} }
/* /*
Wsrep initialization must happen at this point, because: Wsrep initialization must happen at this point, because:
- opt_bin_logname must be known when starting replication - opt_bin_logname must be known when starting replication
since SST may need it since SST may need it
- SST may modify binlog index file, so it must be opened - SST may modify binlog index file, so it must be opened
after SST has happened after SST has happened
*/
We also (unconditionally) initialize wsrep LOCKs and CONDs.
It is because they are used while accessing wsrep system
variables even when a wsrep provider is not loaded.
*/
wsrep_thr_init();
if (WSREP_ON && !wsrep_recovery && !opt_abort) /* WSREP BEFORE SE */ if (WSREP_ON && !wsrep_recovery && !opt_abort) /* WSREP BEFORE SE */
{ {
if (opt_bootstrap) // bootsrap option given - disable wsrep functionality if (opt_bootstrap) // bootsrap option given - disable wsrep functionality
...@@ -9425,9 +9434,6 @@ void set_server_version(void) ...@@ -9425,9 +9434,6 @@ void set_server_version(void)
#ifdef EMBEDDED_LIBRARY #ifdef EMBEDDED_LIBRARY
end= strmov(end, "-embedded"); end= strmov(end, "-embedded");
#endif #endif
#ifdef WITH_WSREP
end= strmov(end, "-wsrep");
#endif
#ifndef DBUG_OFF #ifndef DBUG_OFF
if (!strstr(MYSQL_SERVER_SUFFIX_STR, "-debug")) if (!strstr(MYSQL_SERVER_SUFFIX_STR, "-debug"))
end= strmov(end, "-debug"); end= strmov(end, "-debug");
......
...@@ -4857,6 +4857,12 @@ static Sys_var_mybool Sys_wsrep_gtid_mode( ...@@ -4857,6 +4857,12 @@ static Sys_var_mybool Sys_wsrep_gtid_mode(
"ignored (backward compatibility).", "ignored (backward compatibility).",
GLOBAL_VAR(wsrep_gtid_mode), CMD_LINE(OPT_ARG), DEFAULT(FALSE)); GLOBAL_VAR(wsrep_gtid_mode), CMD_LINE(OPT_ARG), DEFAULT(FALSE));
static char *wsrep_patch_version_ptr;
static Sys_var_charptr Sys_wsrep_patch_version(
"wsrep_patch_version", "wsrep patch version",
READ_ONLY GLOBAL_VAR(wsrep_patch_version_ptr), CMD_LINE_HELP_ONLY,
IN_SYSTEM_CHARSET, DEFAULT(WSREP_PATCH_VERSION));
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */
static bool fix_host_cache_size(sys_var *, THD *, enum_var_type) static bool fix_host_cache_size(sys_var *, THD *, enum_var_type)
......
...@@ -617,25 +617,6 @@ int wsrep_init() ...@@ -617,25 +617,6 @@ int wsrep_init()
wsrep_causal_reads_update(&global_system_variables); wsrep_causal_reads_update(&global_system_variables);
mysql_mutex_register("sql", wsrep_mutexes, array_elements(wsrep_mutexes));
mysql_cond_register("sql", wsrep_conds, array_elements(wsrep_conds));
mysql_mutex_init(key_LOCK_wsrep_ready, &LOCK_wsrep_ready, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_COND_wsrep_ready, &COND_wsrep_ready, NULL);
mysql_mutex_init(key_LOCK_wsrep_sst, &LOCK_wsrep_sst, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_COND_wsrep_sst, &COND_wsrep_sst, NULL);
mysql_mutex_init(key_LOCK_wsrep_sst_init, &LOCK_wsrep_sst_init, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_COND_wsrep_sst_init, &COND_wsrep_sst_init, NULL);
mysql_mutex_init(key_LOCK_wsrep_rollback, &LOCK_wsrep_rollback, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_COND_wsrep_rollback, &COND_wsrep_rollback, NULL);
mysql_mutex_init(key_LOCK_wsrep_replaying, &LOCK_wsrep_replaying, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_COND_wsrep_replaying, &COND_wsrep_replaying, NULL);
mysql_mutex_init(key_LOCK_wsrep_slave_threads, &LOCK_wsrep_slave_threads, MY_MUTEX_INIT_FAST);
mysql_mutex_init(key_LOCK_wsrep_desync, &LOCK_wsrep_desync, MY_MUTEX_INIT_FAST);
mysql_mutex_init(key_LOCK_wsrep_config_state, &LOCK_wsrep_config_state, MY_MUTEX_INIT_FAST);
mysql_file_register("sql", wsrep_files, array_elements(wsrep_files));
wsrep_ready_set(FALSE); wsrep_ready_set(FALSE);
assert(wsrep_provider); assert(wsrep_provider);
...@@ -826,6 +807,31 @@ int wsrep_init() ...@@ -826,6 +807,31 @@ int wsrep_init()
return rcode; return rcode;
} }
/* Initialize wsrep thread LOCKs and CONDs */
void wsrep_thr_init()
{
mysql_mutex_register("sql", wsrep_mutexes, array_elements(wsrep_mutexes));
mysql_cond_register("sql", wsrep_conds, array_elements(wsrep_conds));
mysql_mutex_init(key_LOCK_wsrep_ready, &LOCK_wsrep_ready, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_COND_wsrep_ready, &COND_wsrep_ready, NULL);
mysql_mutex_init(key_LOCK_wsrep_sst, &LOCK_wsrep_sst, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_COND_wsrep_sst, &COND_wsrep_sst, NULL);
mysql_mutex_init(key_LOCK_wsrep_sst_init, &LOCK_wsrep_sst_init, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_COND_wsrep_sst_init, &COND_wsrep_sst_init, NULL);
mysql_mutex_init(key_LOCK_wsrep_rollback, &LOCK_wsrep_rollback, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_COND_wsrep_rollback, &COND_wsrep_rollback, NULL);
mysql_mutex_init(key_LOCK_wsrep_replaying, &LOCK_wsrep_replaying, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_COND_wsrep_replaying, &COND_wsrep_replaying, NULL);
mysql_mutex_init(key_LOCK_wsrep_slave_threads, &LOCK_wsrep_slave_threads, MY_MUTEX_INIT_FAST);
mysql_mutex_init(key_LOCK_wsrep_desync, &LOCK_wsrep_desync, MY_MUTEX_INIT_FAST);
mysql_mutex_init(key_LOCK_wsrep_config_state, &LOCK_wsrep_config_state, MY_MUTEX_INIT_FAST);
mysql_file_register("sql", wsrep_files, array_elements(wsrep_files));
}
void wsrep_init_startup (bool first) void wsrep_init_startup (bool first)
{ {
if (wsrep_init()) unireg_abort(1); if (wsrep_init()) unireg_abort(1);
...@@ -864,7 +870,11 @@ void wsrep_deinit(bool free_options) ...@@ -864,7 +870,11 @@ void wsrep_deinit(bool free_options)
{ {
wsrep_sst_auth_free(); wsrep_sst_auth_free();
} }
}
/* Destroy wsrep thread LOCKs and CONDs */
void wsrep_thr_deinit()
{
mysql_mutex_destroy(&LOCK_wsrep_ready); mysql_mutex_destroy(&LOCK_wsrep_ready);
mysql_cond_destroy(&COND_wsrep_ready); mysql_cond_destroy(&COND_wsrep_ready);
mysql_mutex_destroy(&LOCK_wsrep_sst); mysql_mutex_destroy(&LOCK_wsrep_sst);
...@@ -882,10 +892,11 @@ void wsrep_deinit(bool free_options) ...@@ -882,10 +892,11 @@ void wsrep_deinit(bool free_options)
void wsrep_recover() void wsrep_recover()
{ {
char uuid_str[40];
if (!memcmp(&local_uuid, &WSREP_UUID_UNDEFINED, sizeof(wsrep_uuid_t)) && if (!memcmp(&local_uuid, &WSREP_UUID_UNDEFINED, sizeof(wsrep_uuid_t)) &&
local_seqno == -2) local_seqno == -2)
{ {
char uuid_str[40];
wsrep_uuid_print(&local_uuid, uuid_str, sizeof(uuid_str)); wsrep_uuid_print(&local_uuid, uuid_str, sizeof(uuid_str));
WSREP_INFO("Position %s:%lld given at startup, skipping position recovery", WSREP_INFO("Position %s:%lld given at startup, skipping position recovery",
uuid_str, (long long)local_seqno); uuid_str, (long long)local_seqno);
...@@ -895,7 +906,6 @@ void wsrep_recover() ...@@ -895,7 +906,6 @@ void wsrep_recover()
memset(&xid, 0, sizeof(xid)); memset(&xid, 0, sizeof(xid));
xid.formatID= -1; xid.formatID= -1;
wsrep_get_SE_checkpoint(&xid); wsrep_get_SE_checkpoint(&xid);
char uuid_str[40];
wsrep_uuid_print(wsrep_xid_uuid(&xid), uuid_str, sizeof(uuid_str)); wsrep_uuid_print(wsrep_xid_uuid(&xid), uuid_str, sizeof(uuid_str));
WSREP_INFO("Recovered position: %s:%lld", uuid_str, WSREP_INFO("Recovered position: %s:%lld", uuid_str,
(long long)wsrep_xid_seqno(&xid)); (long long)wsrep_xid_seqno(&xid));
......
...@@ -118,6 +118,12 @@ int wsrep_show_status(THD *thd, SHOW_VAR *var, char *buff, ...@@ -118,6 +118,12 @@ int wsrep_show_status(THD *thd, SHOW_VAR *var, char *buff,
enum enum_var_type scope); enum enum_var_type scope);
int wsrep_init(); int wsrep_init();
void wsrep_deinit(bool free_options); void wsrep_deinit(bool free_options);
/* Initialize wsrep thread LOCKs and CONDs */
void wsrep_thr_init();
/* Destroy wsrep thread LOCKs and CONDs */
void wsrep_thr_deinit();
void wsrep_recover(); void wsrep_recover();
bool wsrep_before_SE(); // initialize wsrep before storage bool wsrep_before_SE(); // initialize wsrep before storage
// engines (true) or after (false) // engines (true) or after (false)
...@@ -338,6 +344,8 @@ int wsrep_create_trigger_query(THD *thd, uchar** buf, size_t* buf_len); ...@@ -338,6 +344,8 @@ int wsrep_create_trigger_query(THD *thd, uchar** buf, size_t* buf_len);
#define wsrep_recover() do { } while(0) #define wsrep_recover() do { } while(0)
#define wsrep_slave_threads (1) #define wsrep_slave_threads (1)
#define wsrep_replicate_myisam (0) #define wsrep_replicate_myisam (0)
#define wsrep_thr_init() do {} while(0)
#define wsrep_thr_deinit() do {} while(0)
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */
#endif /* WSREP_MYSQLD_H */ #endif /* WSREP_MYSQLD_H */
...@@ -295,6 +295,8 @@ bool wsrep_provider_options_check(sys_var *self, THD* thd, set_var* var) ...@@ -295,6 +295,8 @@ bool wsrep_provider_options_check(sys_var *self, THD* thd, set_var* var)
bool wsrep_provider_options_update(sys_var *self, THD* thd, enum_var_type type) bool wsrep_provider_options_update(sys_var *self, THD* thd, enum_var_type type)
{ {
DBUG_ASSERT(wsrep != NULL);
wsrep_status_t ret= wsrep->options_set(wsrep, wsrep_provider_options); wsrep_status_t ret= wsrep->options_set(wsrep, wsrep_provider_options);
if (ret != WSREP_OK) if (ret != WSREP_OK)
{ {
...@@ -495,6 +497,8 @@ bool wsrep_desync_check (sys_var *self, THD* thd, set_var* var) ...@@ -495,6 +497,8 @@ bool wsrep_desync_check (sys_var *self, THD* thd, set_var* var)
bool wsrep_desync_update (sys_var *self, THD* thd, enum_var_type type) bool wsrep_desync_update (sys_var *self, THD* thd, enum_var_type type)
{ {
DBUG_ASSERT(wsrep != NULL);
wsrep_status_t ret(WSREP_WARNING); wsrep_status_t ret(WSREP_WARNING);
if (wsrep_desync) { if (wsrep_desync) {
ret = wsrep->desync (wsrep); ret = wsrep->desync (wsrep);
...@@ -548,6 +552,7 @@ int wsrep_show_status (THD *thd, SHOW_VAR *var, char *buff, ...@@ -548,6 +552,7 @@ int wsrep_show_status (THD *thd, SHOW_VAR *var, char *buff,
*v++= wsrep_status_vars[i]; *v++= wsrep_status_vars[i];
DBUG_ASSERT(i < maxi); DBUG_ASSERT(i < maxi);
DBUG_ASSERT(wsrep != NULL);
wsrep_stats_var* stats= wsrep->stats_get(wsrep); wsrep_stats_var* stats= wsrep->stats_get(wsrep);
for (wsrep_stats_var *sv= stats; i < maxi && sv && sv->name; i++, sv++, v++) for (wsrep_stats_var *sv= stats; i < maxi && sv && sv->name; i++, sv++, v++)
......
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