diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-12-28 13:30:20 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-12-28 13:30:20 +0200 |
commit | 7f037b8c9f38b11a8c5038763cea273ff7fc8136 (patch) | |
tree | 1a42331929c2fdba8eb2655adb30b8172fcc0505 /storage | |
parent | 043bd85a574a88856ab9c6d497e682ed06fe45e9 (diff) | |
parent | 5b9ee8d8193a8c7a8ebdd35eedcadc3ae78e7fc1 (diff) | |
download | mariadb-git-7f037b8c9f38b11a8c5038763cea273ff7fc8136.tar.gz |
Merge 10.2 into 10.3
Diffstat (limited to 'storage')
-rw-r--r-- | storage/innobase/lock/lock0lock.cc | 19 | ||||
-rw-r--r-- | storage/innobase/log/log0recv.cc | 2 | ||||
-rw-r--r-- | storage/innobase/rem/rem0rec.cc | 17 |
3 files changed, 31 insertions, 7 deletions
diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 1a25cff5961..f52d1810381 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -659,6 +659,20 @@ static void wsrep_assert_no_bf_bf_wait( if (UNIV_LIKELY(!wsrep_thd_is_BF(lock_rec2->trx->mysql_thd, FALSE))) return; + /* if BF - BF order is honored, we can keep trx1 waiting for the lock */ + if (wsrep_trx_order_before(trx1->mysql_thd, lock_rec2->trx->mysql_thd)) + return; + + /* avoiding BF-BF conflict assert, if victim is already aborting + or rolling back for replaying + */ + wsrep_thd_LOCK(lock_rec2->trx->mysql_thd); + if (wsrep_trx_is_aborting(lock_rec2->trx->mysql_thd)) { + wsrep_thd_UNLOCK(lock_rec2->trx->mysql_thd); + return; + } + wsrep_thd_UNLOCK(lock_rec2->trx->mysql_thd); + mtr_t mtr; if (lock_rec1) { @@ -1455,11 +1469,6 @@ lock_rec_create_low( trx_mutex_exit(c_lock->trx); - if (UNIV_UNLIKELY(wsrep_debug)) { - wsrep_report_bf_lock_wait(trx->mysql_thd, trx->id); - wsrep_report_bf_lock_wait(c_lock->trx->mysql_thd, c_lock->trx->id); - } - /* have to bail out here to avoid lock_set_lock... */ return(lock); } diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index c62381217a4..c1200f80b0d 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -2462,7 +2462,7 @@ apply: /* Wait until all the pages have been processed */ - while (recv_sys->n_addrs != 0) { + while (recv_sys->n_addrs || buf_get_n_pending_read_ios()) { const bool abort = recv_sys->found_corrupt_log || recv_sys->found_corrupt_fs; diff --git a/storage/innobase/rem/rem0rec.cc b/storage/innobase/rem/rem0rec.cc index 1b40fa23841..4faa90d3b13 100644 --- a/storage/innobase/rem/rem0rec.cc +++ b/storage/innobase/rem/rem0rec.cc @@ -2651,9 +2651,24 @@ wsrep_rec_get_foreign_key( break; case DATA_BLOB: case DATA_BINARY: + case DATA_FIXBINARY: + case DATA_GEOMETRY: memcpy(buf, data, len); break; - default: + + case DATA_FLOAT: + { + float f = mach_float_read(data); + memcpy(buf, &f, sizeof(float)); + } + break; + case DATA_DOUBLE: + { + double d = mach_double_read(data); + memcpy(buf, &d, sizeof(double)); + } + break; + default: break; } |