You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-29 08:21:15 +03:00
MCOL-4936 Disable binlog for DML statements.
DML statements executed on the primary node in a ColumnStore cluster do not need to be written to the primary's binlog. This is due to ColumnStore's distributed storage architecture. With this patch, we disable writing to binlog when a DML statement (INSERT/DELETE/UPDATE/LDI/INSERT..SELECT) is performed on a ColumnStore table. HANDLER::external_lock() calls are used to 1. Turn OFF the OPTION_BIN_LOG flag 2. Turn ON the OPTION_BIN_TMP_LOG_OFF flag in THD::variables.option_bits during a WRITE lock call. THD::variables.option_bits is restored back to the original state during the UNLOCK call in HANDLER::external_lock(). Further, isDMLStatement() function is added to reduce code verbosity to check if a given statement is a DML statement. Note that with this patch, not writing to primary's binlog means DML replication from a ColumnStore cluster to another ColumnStore cluster or to another foreign engine will not work.
This commit is contained in:
@ -444,6 +444,15 @@ inline bool isUpdateOrDeleteStatement(const enum_sql_command& command)
|
||||
isDeleteStatement(command);
|
||||
}
|
||||
|
||||
inline bool isDMLStatement(const enum_sql_command& command)
|
||||
{
|
||||
return (command == SQLCOM_INSERT ||
|
||||
command == SQLCOM_INSERT_SELECT ||
|
||||
command == SQLCOM_TRUNCATE ||
|
||||
command == SQLCOM_LOAD ||
|
||||
isUpdateOrDeleteStatement(command));
|
||||
}
|
||||
|
||||
#ifdef DEBUG_WALK_COND
|
||||
void debug_walk(const Item* item, void* arg);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user