Function mz_mysql_util::ensure_replication_commit_order

source ·
pub async fn ensure_replication_commit_order(
    conn: &mut Conn
) -> Result<(), MySqlError>
Expand description

In case this is a MySQL replica, we ensure that the replication settings are such that the replica would commit all transactions in the order they were committed on the primary. We don’t really know that this is a replica, but if the settings indicate multi-threaded replication and the preserve-commit-order setting is not on, then it could be a replica with correctness issues. We used to check performance_schema.replication_connection_configuration to determine if this was in-fact a replica but that requires non-standard privileges. Before MySQL 8.0.27, single-threaded was default and preserve-commit-order was not, and after 8.0.27 multi-threaded is default and preserve-commit-order is default on. So both of those default scenarios are fine. Unfortunately on some versions of MySQL on RDS, the default parameters use multi-threading without the preserve-commit-order setting on.