mirror of
https://github.com/MariaDB/server.git
synced 2026-10-23 18:49:29 +03:00
Also reported as: https://github.com/mariadb-corporation/galera/issues/613. THD::cleanup() cleared THD::wsrep_client_thread. Besides connection close, THD::cleanup() is also called from THD::change_user() when handling COM_CHANGE_USER and COM_RESET_CONNECTION. THD::init() does not set the flag back, and the only place that sets it is thd_prepare_connection(). After either command the session was no longer treated as a wsrep client connection: WSREP_CLIENT() returned false for the rest of the session. As a result wsrep_sync_wait was silently ignored, so causal reads could return stale data. Such connections were also skipped by wsrep_close_client_connections() and wsrep_wait_committing_connections_close(). Connection pools issue COM_RESET_CONNECTION whenever a connection is reused, so in practice most pooled sessions were affected. Fix by moving the reset of wsrep_client_thread from THD::cleanup() to end_connection(), after wsrep_close(). The galera.galera_change_user test is extended to do a causal read on a fresh connection, after COM_CHANGE_USER and after COM_RESET_CONNECTION. Each read must increase the provider's wsrep_causal_reads status counter.
50 KiB
50 KiB