Commit dc377fcb authored by Nirbhay Choubey's avatar Nirbhay Choubey

Merge of patch for MDEV-6411 from maria-5.5-galera.

parent 3d1ac121
...@@ -11,6 +11,7 @@ SET SESSION wsrep_replicate_myisam= ON; ...@@ -11,6 +11,7 @@ SET SESSION wsrep_replicate_myisam= ON;
ERROR HY000: Variable 'wsrep_replicate_myisam' is a GLOBAL variable and should be set with SET GLOBAL ERROR HY000: Variable 'wsrep_replicate_myisam' is a GLOBAL variable and should be set with SET GLOBAL
SET GLOBAL wsrep_replicate_myisam= ON; SET GLOBAL wsrep_replicate_myisam= ON;
SET GLOBAL wsrep_replicate_myisam= OFF; SET GLOBAL wsrep_replicate_myisam= OFF;
SET GLOBAL wsrep_provider=none;
# #
# MDEV#5790: SHOW GLOBAL STATUS LIKE does not show the correct list of # MDEV#5790: SHOW GLOBAL STATUS LIKE does not show the correct list of
# variables when using "_" # variables when using "_"
...@@ -144,7 +145,7 @@ call mtr.add_suppression("safe_mutex: Found wrong usage of mutex 'LOCK_wsrep_sla ...@@ -144,7 +145,7 @@ call mtr.add_suppression("safe_mutex: Found wrong usage of mutex 'LOCK_wsrep_sla
call mtr.add_suppression("WSREP: Failed to get provider options"); call mtr.add_suppression("WSREP: Failed to get provider options");
SELECT @@global.wsrep_provider; SELECT @@global.wsrep_provider;
@@global.wsrep_provider @@global.wsrep_provider
none libgalera_smm.so
SELECT @@global.wsrep_slave_threads; SELECT @@global.wsrep_slave_threads;
@@global.wsrep_slave_threads @@global.wsrep_slave_threads
1 1
...@@ -160,7 +161,7 @@ wsrep_thread_count 0 ...@@ -160,7 +161,7 @@ wsrep_thread_count 0
SELECT @@global.wsrep_provider; SELECT @@global.wsrep_provider;
@@global.wsrep_provider @@global.wsrep_provider
/usr/lib/galera/libgalera_smm.so libgalera_smm.so
SELECT @@global.wsrep_cluster_address; SELECT @@global.wsrep_cluster_address;
@@global.wsrep_cluster_address @@global.wsrep_cluster_address
NULL NULL
...@@ -177,7 +178,7 @@ SET GLOBAL wsrep_cluster_address= 'gcomm://'; ...@@ -177,7 +178,7 @@ SET GLOBAL wsrep_cluster_address= 'gcomm://';
# Wait for applier threads to get created. # Wait for applier threads to get created.
SELECT @@global.wsrep_provider; SELECT @@global.wsrep_provider;
@@global.wsrep_provider @@global.wsrep_provider
/usr/lib/galera/libgalera_smm.so libgalera_smm.so
SELECT @@global.wsrep_cluster_address; SELECT @@global.wsrep_cluster_address;
@@global.wsrep_cluster_address @@global.wsrep_cluster_address
gcomm:// gcomm://
...@@ -201,4 +202,21 @@ SET GLOBAL wsrep_slave_threads= @wsrep_slave_threads_saved; ...@@ -201,4 +202,21 @@ SET GLOBAL wsrep_slave_threads= @wsrep_slave_threads_saved;
SET GLOBAL wsrep_provider= none; SET GLOBAL wsrep_provider= none;
SET GLOBAL wsrep_cluster_address= ''; SET GLOBAL wsrep_cluster_address= '';
SET GLOBAL wsrep_provider_options= ''; SET GLOBAL wsrep_provider_options= '';
#
# MDEV#6411: Setting set @@global.wsrep_sst_auth=NULL causes crash
#
SET @wsrep_sst_auth_saved= @@global.wsrep_sst_auth;
SET @@global.wsrep_sst_auth= 'user:pass';
SELECT @@global.wsrep_sst_auth;
@@global.wsrep_sst_auth
********
SET @@global.wsrep_sst_auth= '';
SELECT @@global.wsrep_sst_auth;
@@global.wsrep_sst_auth
SET @@global.wsrep_sst_auth= NULL;
SELECT @@global.wsrep_sst_auth;
@@global.wsrep_sst_auth
NULL
SET @@global.wsrep_sst_auth= @wsrep_sst_auth_saved;
# End of test. # End of test.
...@@ -19,6 +19,7 @@ SET GLOBAL wsrep_replicate_myisam= ON; ...@@ -19,6 +19,7 @@ SET GLOBAL wsrep_replicate_myisam= ON;
# Reset it back. # Reset it back.
SET GLOBAL wsrep_replicate_myisam= OFF; SET GLOBAL wsrep_replicate_myisam= OFF;
SET GLOBAL wsrep_provider=none;
--echo # --echo #
--echo # MDEV#5790: SHOW GLOBAL STATUS LIKE does not show the correct list of --echo # MDEV#5790: SHOW GLOBAL STATUS LIKE does not show the correct list of
...@@ -27,6 +28,10 @@ SET GLOBAL wsrep_replicate_myisam= OFF; ...@@ -27,6 +28,10 @@ SET GLOBAL wsrep_replicate_myisam= OFF;
CALL mtr.add_suppression("WSREP: Could not open saved state file for reading.*"); CALL mtr.add_suppression("WSREP: Could not open saved state file for reading.*");
--disable_query_log
eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
--enable_query_log
--replace_column 2 # --replace_column 2 #
SHOW GLOBAL STATUS LIKE 'wsrep%'; SHOW GLOBAL STATUS LIKE 'wsrep%';
...@@ -40,6 +45,7 @@ SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment'; ...@@ -40,6 +45,7 @@ SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';
--echo # Should show nothing. --echo # Should show nothing.
SHOW STATUS LIKE 'x'; SHOW STATUS LIKE 'x';
# Reset it back.
SET GLOBAL wsrep_provider=none; SET GLOBAL wsrep_provider=none;
--echo # --echo #
...@@ -59,6 +65,7 @@ SHOW STATUS LIKE 'wsrep_local_state_uuid'; ...@@ -59,6 +65,7 @@ SHOW STATUS LIKE 'wsrep_local_state_uuid';
--replace_column 2 # --replace_column 2 #
SHOW STATUS LIKE 'wsrep_last_committed'; SHOW STATUS LIKE 'wsrep_last_committed';
# Reset it back.
SET GLOBAL wsrep_provider=none; SET GLOBAL wsrep_provider=none;
--echo --echo
...@@ -67,6 +74,12 @@ SET GLOBAL wsrep_provider=none; ...@@ -67,6 +74,12 @@ SET GLOBAL wsrep_provider=none;
--echo # --echo #
call mtr.add_suppression("safe_mutex: Found wrong usage of mutex 'LOCK_wsrep_slave_threads' and 'LOCK_global_system_variables'"); call mtr.add_suppression("safe_mutex: Found wrong usage of mutex 'LOCK_wsrep_slave_threads' and 'LOCK_global_system_variables'");
call mtr.add_suppression("WSREP: Failed to get provider options"); call mtr.add_suppression("WSREP: Failed to get provider options");
--disable_query_log
eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
--enable_query_log
--replace_regex /.*libgalera_smm.*/libgalera_smm.so/
SELECT @@global.wsrep_provider; SELECT @@global.wsrep_provider;
SELECT @@global.wsrep_slave_threads; SELECT @@global.wsrep_slave_threads;
SELECT @@global.wsrep_cluster_address; SELECT @@global.wsrep_cluster_address;
...@@ -77,6 +90,8 @@ SHOW STATUS LIKE 'wsrep_thread_count'; ...@@ -77,6 +90,8 @@ SHOW STATUS LIKE 'wsrep_thread_count';
--disable_query_log --disable_query_log
eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER'; eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
--enable_query_log --enable_query_log
--replace_regex /.*libgalera_smm.*/libgalera_smm.so/
SELECT @@global.wsrep_provider; SELECT @@global.wsrep_provider;
SELECT @@global.wsrep_cluster_address; SELECT @@global.wsrep_cluster_address;
SHOW STATUS LIKE 'threads_connected'; SHOW STATUS LIKE 'threads_connected';
...@@ -88,6 +103,8 @@ SHOW STATUS LIKE 'wsrep_thread_count'; ...@@ -88,6 +103,8 @@ SHOW STATUS LIKE 'wsrep_thread_count';
SET GLOBAL wsrep_cluster_address= 'gcomm://'; SET GLOBAL wsrep_cluster_address= 'gcomm://';
--echo # Wait for applier threads to get created. --echo # Wait for applier threads to get created.
sleep 3; sleep 3;
--replace_regex /.*libgalera_smm.*/libgalera_smm.so/
SELECT @@global.wsrep_provider; SELECT @@global.wsrep_provider;
SELECT @@global.wsrep_cluster_address; SELECT @@global.wsrep_cluster_address;
SHOW STATUS LIKE 'threads_connected'; SHOW STATUS LIKE 'threads_connected';
...@@ -107,4 +124,17 @@ SET GLOBAL wsrep_provider= none; ...@@ -107,4 +124,17 @@ SET GLOBAL wsrep_provider= none;
SET GLOBAL wsrep_cluster_address= ''; SET GLOBAL wsrep_cluster_address= '';
SET GLOBAL wsrep_provider_options= ''; SET GLOBAL wsrep_provider_options= '';
--echo #
--echo # MDEV#6411: Setting set @@global.wsrep_sst_auth=NULL causes crash
--echo #
SET @wsrep_sst_auth_saved= @@global.wsrep_sst_auth;
SET @@global.wsrep_sst_auth= 'user:pass';
SELECT @@global.wsrep_sst_auth;
SET @@global.wsrep_sst_auth= '';
SELECT @@global.wsrep_sst_auth;
SET @@global.wsrep_sst_auth= NULL;
SELECT @@global.wsrep_sst_auth;
SET @@global.wsrep_sst_auth= @wsrep_sst_auth_saved;
--echo # End of test. --echo # End of test.
...@@ -1959,7 +1959,7 @@ static void __cdecl kill_server(int sig_ptr) ...@@ -1959,7 +1959,7 @@ static void __cdecl kill_server(int sig_ptr)
close_connections(); close_connections();
#ifdef WITH_WSREP #ifdef WITH_WSREP
if (wsrep_inited == 1) if (wsrep_inited == 1)
wsrep_deinit(); wsrep_deinit(true);
#endif #endif
if (sig != MYSQL_KILL_SIGNAL && if (sig != MYSQL_KILL_SIGNAL &&
sig != 0) sig != 0)
...@@ -2071,7 +2071,7 @@ extern "C" void unireg_abort(int exit_code) ...@@ -2071,7 +2071,7 @@ extern "C" void unireg_abort(int exit_code)
/* In bootstrap mode we deinitialize wsrep here. */ /* In bootstrap mode we deinitialize wsrep here. */
if (opt_bootstrap && wsrep_inited) if (opt_bootstrap && wsrep_inited)
wsrep_deinit(); wsrep_deinit(true);
} }
#endif // WITH_WSREP #endif // WITH_WSREP
clean_up(!opt_abort && (exit_code || !opt_bootstrap)); /* purecov: inspected */ clean_up(!opt_abort && (exit_code || !opt_bootstrap)); /* purecov: inspected */
......
...@@ -720,7 +720,7 @@ void wsrep_init_startup (bool first) ...@@ -720,7 +720,7 @@ void wsrep_init_startup (bool first)
} }
void wsrep_deinit() void wsrep_deinit(bool free_options)
{ {
DBUG_ASSERT(wsrep_inited == 1); DBUG_ASSERT(wsrep_inited == 1);
wsrep_unload(wsrep); wsrep_unload(wsrep);
...@@ -729,6 +729,11 @@ void wsrep_deinit() ...@@ -729,6 +729,11 @@ void wsrep_deinit()
provider_version[0]= '\0'; provider_version[0]= '\0';
provider_vendor[0]= '\0'; provider_vendor[0]= '\0';
wsrep_inited= 0; wsrep_inited= 0;
if (free_options)
{
wsrep_sst_auth_free();
}
} }
void wsrep_recover() void wsrep_recover()
......
...@@ -124,7 +124,7 @@ void wsrep_free_status(THD *thd); ...@@ -124,7 +124,7 @@ void wsrep_free_status(THD *thd);
void wsrep_filter_new_cluster (int* argc, char* argv[]); void wsrep_filter_new_cluster (int* argc, char* argv[]);
int wsrep_init(); int wsrep_init();
void wsrep_deinit(); void wsrep_deinit(bool free_options);
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)
......
...@@ -123,31 +123,44 @@ bool wsrep_sst_auth_check (sys_var *self, THD* thd, set_var* var) ...@@ -123,31 +123,44 @@ bool wsrep_sst_auth_check (sys_var *self, THD* thd, set_var* var)
{ {
return 0; return 0;
} }
static bool sst_auth_real_set (const char* value) static bool sst_auth_real_set (const char* value)
{ {
const char* v = strdup (value); const char* v= NULL;
if (v) if (value)
{ {
if (sst_auth_real) free (const_cast<char*>(sst_auth_real)); v= my_strdup(value, MYF(0));
sst_auth_real = v; }
else // its NULL
{
wsrep_sst_auth_free();
return 0;
}
if (strlen(sst_auth_real)) if (v)
{ {
if (wsrep_sst_auth) // set sst_auth_real
{ if (sst_auth_real) { my_free((void *) sst_auth_real); }
my_free ((void*)wsrep_sst_auth); sst_auth_real = v;
wsrep_sst_auth = my_strdup(WSREP_SST_AUTH_MASK, MYF(0));
//strncpy (wsrep_sst_auth, WSREP_SST_AUTH_MASK, // mask wsrep_sst_auth
// sizeof(wsrep_sst_auth) - 1); if (strlen(sst_auth_real))
} {
else if (wsrep_sst_auth) { my_free((void*) wsrep_sst_auth); }
wsrep_sst_auth = my_strdup (WSREP_SST_AUTH_MASK, MYF(0)); wsrep_sst_auth= my_strdup(WSREP_SST_AUTH_MASK, MYF(0));
}
return 0;
} }
return 0;
}
return 1;
}
return 1; void wsrep_sst_auth_free()
{
if (wsrep_sst_auth) { my_free((void *) wsrep_sst_auth); }
if (sst_auth_real) { my_free((void *) sst_auth_real); }
wsrep_sst_auth= NULL;
sst_auth_real= NULL;
} }
bool wsrep_sst_auth_update (sys_var *self, THD* thd, enum_var_type type) bool wsrep_sst_auth_update (sys_var *self, THD* thd, enum_var_type type)
......
...@@ -31,6 +31,7 @@ extern void wsrep_sst_grab(); ...@@ -31,6 +31,7 @@ extern void wsrep_sst_grab();
extern bool wsrep_sst_wait(); extern bool wsrep_sst_wait();
/*! Signals wsrep that initialization is complete, writesets can be applied */ /*! Signals wsrep that initialization is complete, writesets can be applied */
extern void wsrep_sst_continue(); extern void wsrep_sst_continue();
extern void wsrep_sst_auth_free();
extern void wsrep_SE_init_grab(); /*! grab init critical section */ extern void wsrep_SE_init_grab(); /*! grab init critical section */
extern void wsrep_SE_init_wait(); /*! wait for SE init to complete */ extern void wsrep_SE_init_wait(); /*! wait for SE init to complete */
......
...@@ -239,7 +239,7 @@ bool wsrep_provider_update (sys_var *self, THD* thd, enum_var_type type) ...@@ -239,7 +239,7 @@ bool wsrep_provider_update (sys_var *self, THD* thd, enum_var_type type)
mysql_mutex_lock(&LOCK_global_system_variables); mysql_mutex_lock(&LOCK_global_system_variables);
if (wsrep_inited == 1) if (wsrep_inited == 1)
wsrep_deinit(); wsrep_deinit(false);
char* tmp= strdup(wsrep_provider); // wsrep_init() rewrites provider char* tmp= strdup(wsrep_provider); // wsrep_init() rewrites provider
//when fails //when fails
......
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