• Kristian Nielsen's avatar
    MDEV-31273: Precompute binlog checksums · b8f9f796
    Kristian Nielsen authored
    Compute binlog checksums (when enabled) already when writing events
    into the statement or transaction caches, where before it was done
    when the caches are copied to the real binlog file. This moves the
    checksum computation outside of holding LOCK_log, improving
    scalabitily.
    
    At stmt/trx cache write time, the final end_log_pos values are not
    known, so with this patch these will be set to 0. Events that are
    written directly to the binlog file (not through stmt/trx cache) keep
    the correct end_log_pos value. The GTID and COMMIT/XID events at the
    start and end of event groups are written directly, so the zero
    end_log_pos is only for events in the middle of event groups, which
    do not negatively affect replication.
    
    An option --binlog-legacy-event-pos, off by default, is provided to
    disable this behavior to provide backwards compatibility with any
    external applications that might rely on end_log_pos in events in the
    middle of event groups.
    
    Checksums cannot be pre-computed when binlog encryption is enabled, as
    encryption relies on correct end_log_pos to provide part of the
    nonce/IV.
    
    Checksum pre-computation is also disabled for WSREP/Galera, as it uses
    events differently in its write-sets and so on. Extending pre-computation of
    checksums to Galera where it makes sense could be added in a future patch.
    
    The current --binlog-checksum configuration is saved in
    binlog_cache_data at transaction start and used to pre-compute
    checksums in cache, if applicable. When the cache is later copied to
    the binlog, a check is made if the saved value still matches the
    configured global value; if so, the events are block-copied directly
    into the binlog file. If --binlog-checksum was changed during the
    transaction, events are re-written to the binlog file one-by-one and
    the checksums recomputed/discarded as appropriate.
    Reviewed-by: default avatarMonty <monty@mariadb.org>
    Signed-off-by: default avatarKristian Nielsen <knielsen@knielsen-hq.org>
    b8f9f796
rpl_checksum_cache.test 9.29 KB