[MDEV-6156] Parallel replication incorrectly caches charset between worker threads Created: 2014-04-23  Updated: 2014-05-16  Resolved: 2014-04-25

Status: Closed
Project: MariaDB Server
Component/s: None
Affects Version/s: 10.0.10
Fix Version/s: 10.0.11

Type: Bug Priority: Major
Reporter: Kristian Nielsen Assignee: Kristian Nielsen
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Duplicate
is duplicated by MDEV-6242 Some but not all slaves do character ... Closed

 Description   

As reported by nanyi607rao on maria-developers@lists.launchpad.net:

> If character_set in different Query_log_events changed, worker threads may
apply them with wrong character_set. the codes leading this problem is in
Query_log_event::do_apply_event, that is:
> if (charset_inited)
> {
> if (rli->cached_charset_compare(charset))

Clearly, the rli cannot be used to cache charset between Queries when parallel
replication is used.

Probably the solution is to move the cached_charset stuff from Relay_log_info
into rpl_group_info.



 Comments   
Comment by Kristian Nielsen [ 2014-04-23 ]

Pushed to 10.0

Thanks to nanyi607rao for tracking down and reporting this bug!

Comment by Kristian Nielsen [ 2014-04-24 ]

Unfortunately, my patch for this is completely wrong.

Putting cached charset in the rpl_group_info is no better than Relay_log_info. Because there are multiple rpl_group_info objects used in one worker thread, and the value of cached_charset in one of them need have no relation to what is currently set in the THD.

Comment by Kristian Nielsen [ 2014-04-25 ]

I've pushed a better patch to 10.0 for this.

Now the cached_charset is stored in the THD that it is keeping cached information for, so that the wrong cache info will not be used for the wrong THD.

Generated at Thu Feb 08 07:09:47 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.