From 91417b404716e3c409a0a551a232c063d04f85a9 Mon Sep 17 00:00:00 2001 From: sjaakola Date: Mon, 17 Nov 2014 23:47:14 +0200 Subject: [PATCH] refs #7 - merged fix from 5.5 branch. However, 5.6 branch has not (yet) surfaced similar applier hang as 5.5 --- storage/innobase/lock/lock0lock.cc | 34 ++++++++++++++++++------------ storage/xtradb/lock/lock0lock.cc | 32 ++++++++++++++++------------ 2 files changed, 39 insertions(+), 27 deletions(-) diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 66033530a728a..0be8f0be15493 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -1067,12 +1067,13 @@ lock_rec_has_to_wait( #ifdef WITH_WSREP /* if BF thread is locking and has conflict with another BF thread, we need to look at trx ordering and lock types */ - if (for_locking && - wsrep_thd_is_BF(trx->mysql_thd, FALSE) && + if (wsrep_thd_is_BF(trx->mysql_thd, FALSE) && wsrep_thd_is_BF(lock2->trx->mysql_thd, TRUE)) { if (wsrep_debug) { - fprintf(stderr, "\n BF-BF lock conflict \n"); + fprintf(stderr, + "BF-BF lock conflict, locking: %lu\n", + for_locking); lock_rec_print(stderr, lock2); } @@ -1081,16 +1082,21 @@ lock_rec_has_to_wait( (type_mode & LOCK_MODE_MASK) == LOCK_X && (lock2->type_mode & LOCK_MODE_MASK) == LOCK_X) { - /* exclusive lock conflicts are not accepted */ - fprintf(stderr, "BF-BF X lock conflict," - "type_mode: %lu supremum: %lu\n", - type_mode, lock_is_on_supremum); - fprintf(stderr, "conflicts states: my %d locked %d\n", - wsrep_thd_conflict_state(trx->mysql_thd, FALSE), - wsrep_thd_conflict_state(lock2->trx->mysql_thd, FALSE) ); - lock_rec_print(stderr, lock2); - return FALSE; - //abort(); + if (for_locking || wsrep_debug) { + /* exclusive lock conflicts are not + accepted */ + fprintf(stderr, + "BF-BF X lock conflict," + "mode: %lu supremum: %lu\n", + type_mode, lock_is_on_supremum); + fprintf(stderr, + "conflicts states: my %d locked %d\n", + wsrep_thd_conflict_state(trx->mysql_thd, FALSE), + wsrep_thd_conflict_state(lock2->trx->mysql_thd, FALSE) ); + lock_rec_print(stderr, lock2); + if (for_locking) return FALSE; + //abort(); + } } else { /* if lock2->index->n_uniq <= lock2->index->n_user_defined_cols @@ -1110,7 +1116,7 @@ lock_rec_has_to_wait( #endif /* WITH_WSREP */ return(TRUE); } - + return(FALSE); } diff --git a/storage/xtradb/lock/lock0lock.cc b/storage/xtradb/lock/lock0lock.cc index e6d6071a15dc3..719888d41bd0f 100644 --- a/storage/xtradb/lock/lock0lock.cc +++ b/storage/xtradb/lock/lock0lock.cc @@ -1068,12 +1068,13 @@ lock_rec_has_to_wait( #ifdef WITH_WSREP /* if BF thread is locking and has conflict with another BF thread, we need to look at trx ordering and lock types */ - if (for_locking && - wsrep_thd_is_BF(trx->mysql_thd, FALSE) && + if (wsrep_thd_is_BF(trx->mysql_thd, FALSE) && wsrep_thd_is_BF(lock2->trx->mysql_thd, TRUE)) { if (wsrep_debug) { - fprintf(stderr, "\n BF-BF lock conflict \n"); + fprintf(stderr, + "BF-BF lock conflict, locking: %lu\n", + for_locking); lock_rec_print(stderr, lock2); } @@ -1082,16 +1083,21 @@ lock_rec_has_to_wait( (type_mode & LOCK_MODE_MASK) == LOCK_X && (lock2->type_mode & LOCK_MODE_MASK) == LOCK_X) { - /* exclusive lock conflicts are not accepted */ - fprintf(stderr, "BF-BF X lock conflict," - "type_mode: %lu supremum: %lu\n", - type_mode, lock_is_on_supremum); - fprintf(stderr, "conflicts states: my %d locked %d\n", - wsrep_thd_conflict_state(trx->mysql_thd, FALSE), - wsrep_thd_conflict_state(lock2->trx->mysql_thd, FALSE) ); - lock_rec_print(stderr, lock2); - return FALSE; - //abort(); + if (for_locking || wsrep_debug) { + /* exclusive lock conflicts are not + accepted */ + fprintf(stderr, + "BF-BF X lock conflict," + "mode: %lu supremum: %lu\n", + type_mode, lock_is_on_supremum); + fprintf(stderr, + "conflicts states: my %d locked %d\n", + wsrep_thd_conflict_state(trx->mysql_thd, FALSE), + wsrep_thd_conflict_state(lock2->trx->mysql_thd, FALSE) ); + lock_rec_print(stderr, lock2); + if (for_locking) return FALSE; + //abort(); + } } else { /* if lock2->index->n_uniq <= lock2->index->n_user_defined_cols