mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
- Fixes query cache so that it is aware of wsrep_sync_wait. Query cache would return (possibly stale) results to the client, regardless of the value of wsrep_sync_wait. - Includes the test case that reproduced the issue.
This commit is contained in:
committed by
Nirbhay Choubey
parent
c1ea0570af
commit
ace86a2375
@ -1846,6 +1846,7 @@ Query_cache::send_result_to_client(THD *thd, char *org_sql, uint query_length)
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Try to obtain an exclusive lock on the query cache. If the cache is
|
||||
disabled or if a full cache flush is in progress, the attempt to
|
||||
@ -1957,6 +1958,25 @@ def_week_frmt: %lu, in_trans: %d, autocommit: %d",
|
||||
}
|
||||
DBUG_PRINT("qcache", ("Query in query hash 0x%lx", (ulong)query_block));
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_CLIENT(thd) && wsrep_must_sync_wait(thd)) {
|
||||
unlock();
|
||||
if (wsrep_sync_wait(thd))
|
||||
goto err;
|
||||
if (try_lock(TRUE))
|
||||
goto err;
|
||||
query_block = (Query_cache_block *) my_hash_search(&queries,
|
||||
(uchar*) sql,
|
||||
tot_length);
|
||||
if (query_block == 0 ||
|
||||
query_block->query()->result() == 0 ||
|
||||
query_block->query()->result()->type != Query_cache_block::RESULT)
|
||||
{
|
||||
goto err_unlock;
|
||||
}
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/* Now lock and test that nothing changed while blocks was unlocked */
|
||||
BLOCK_LOCK_RD(query_block);
|
||||
|
||||
|
Reference in New Issue
Block a user