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.