mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
MDEV-6481: Yum Upgrade on CentOS 6.5 causes instant
crash of MariaDB/Galera mysqld crashes during startup when its started with --wsrep-recover (mysqld_safe.sh). The problem was that during server startup "wsrep" handle is not initialized for --wsrep-recover and since the condition to register wsrep hton depended only on 'wsrep_on' global/session variables (WSREP(thd) macro), it can eventually get registered and calls to wsrep handle's functions (commit, rollback, etc.) can be made (SIGSEGV!). Fixed by adding a check for "wsrep" pointer in WSREP(thd) macro (added by lp:1367173). Additionally, a check for WSREP(thd) (instead of checking the availability of wsrep provider) has been added before invoking wsrep handle's commit & rollback functions.
This commit is contained in:
@@ -210,9 +210,9 @@ static int wsrep_rollback(handlerton *hton, THD *thd, bool all)
|
||||
}
|
||||
|
||||
if ((all || !thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) &&
|
||||
(thd->variables.wsrep_on && thd->wsrep_conflict_state != MUST_REPLAY))
|
||||
thd->wsrep_conflict_state != MUST_REPLAY)
|
||||
{
|
||||
if (wsrep->post_rollback(wsrep, &thd->wsrep_ws_handle))
|
||||
if (WSREP(thd) && wsrep->post_rollback(wsrep, &thd->wsrep_ws_handle))
|
||||
{
|
||||
DBUG_PRINT("wsrep", ("setting rollback fail"));
|
||||
WSREP_ERROR("settting rollback fail: thd: %llu SQL: %s",
|
||||
@@ -252,13 +252,11 @@ int wsrep_commit(handlerton *hton, THD *thd, bool all)
|
||||
Transaction didn't go through wsrep->pre_commit() so just roll back
|
||||
possible changes to clean state.
|
||||
*/
|
||||
if (WSREP_PROVIDER_EXISTS) {
|
||||
if (wsrep->post_rollback(wsrep, &thd->wsrep_ws_handle))
|
||||
{
|
||||
DBUG_PRINT("wsrep", ("setting rollback fail"));
|
||||
WSREP_ERROR("settting rollback fail: thd: %llu SQL: %s",
|
||||
(long long)thd->real_id, thd->query());
|
||||
}
|
||||
if (WSREP(thd) && wsrep->post_rollback(wsrep, &thd->wsrep_ws_handle))
|
||||
{
|
||||
DBUG_PRINT("wsrep", ("setting rollback fail"));
|
||||
WSREP_ERROR("settting rollback fail: thd: %llu SQL: %s",
|
||||
(long long)thd->real_id, thd->query());
|
||||
}
|
||||
wsrep_cleanup_transaction(thd);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user