Commit a64cb6d2 authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.3 into 10.4

parents 478b8303 7f037b8c
...@@ -659,6 +659,20 @@ static void wsrep_assert_no_bf_bf_wait( ...@@ -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))) if (UNIV_LIKELY(!wsrep_thd_is_BF(lock_rec2->trx->mysql_thd, FALSE)))
return; return;
/* if BF - BF order is honored, we can keep trx1 waiting for the lock */
if (wsrep_thd_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_thd_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; mtr_t mtr;
if (lock_rec1) { if (lock_rec1) {
...@@ -1454,11 +1468,6 @@ lock_rec_create_low( ...@@ -1454,11 +1468,6 @@ lock_rec_create_low(
trx_mutex_exit(c_lock->trx); 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... */ /* have to bail out here to avoid lock_set_lock... */
return(lock); return(lock);
} }
......
...@@ -2391,7 +2391,7 @@ void recv_apply_hashed_log_recs(bool last_batch) ...@@ -2391,7 +2391,7 @@ void recv_apply_hashed_log_recs(bool last_batch)
/* Wait until all the pages have been processed */ /* 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 const bool abort = recv_sys.found_corrupt_log
|| recv_sys.found_corrupt_fs; || recv_sys.found_corrupt_fs;
......
...@@ -2761,9 +2761,24 @@ wsrep_rec_get_foreign_key( ...@@ -2761,9 +2761,24 @@ wsrep_rec_get_foreign_key(
break; break;
case DATA_BLOB: case DATA_BLOB:
case DATA_BINARY: case DATA_BINARY:
case DATA_FIXBINARY:
case DATA_GEOMETRY:
memcpy(buf, data, len); memcpy(buf, data, len);
break; 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; break;
} }
......
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