mariadb/sql
Kristian Nielsen 6fa69ad747 MDEV-27436: binlog corruption (/tmp no space left on device at the same moment)
This commit fixes several bugs in error handling around disk full when
writing the statement/transaction binlog caches:

1. If the error occurs during a non-transactional statement, the code
attempts to binlog the partially executed statement (as it cannot roll
back). The stmt_cache->error was still set from the disk full error. This
caused MYSQL_BIN_LOG::write_cache() to get an error while trying to read the
cache to copy it to the binlog. This was then wrongly interpreted as a disk
full error writing to the binlog file. As a result, a partial event group
containing just a GTID event (no query or commit) was binlogged. Fixed by
checking if an error is set in the statement cache, and if so binlog an
INCIDENT event instead of a corrupt event group, as for other errors.

2. For LOAD DATA LOCAL INFILE, if a disk full error occured while writing to
the statement cache, the code would attempt to abort and read-and-discard
any remaining data sent by the client. The discard code would however
continue trying to write data to the statement cache, and wrongly interpret
another disk full error as end-of-file from the client. This left the client
connection with extra data which corrupts the communication for the next
command, as well as again causing an corrupt/incomplete event to be
binlogged. Fixed by restoring the default read function before reading any
remaining data from the client connection.

Reviewed-by: Andrei Elkin <andrei.elkin@mariadb.com>
Signed-off-by: Kristian Nielsen <knielsen@knielsen-hq.org>
2023-10-31 11:48:00 +01:00
..
share
add_errmsg
authors.h
backup.cc MDEV-32282: Galera node remains paused after interleaving FTWRLs 2023-10-26 22:13:54 +02:00
backup.h
bounded_queue.h
client_settings.h
CMakeLists.txt
compat56.cc
compat56.h
contributors.h
create_options.cc
create_options.h
custom_conf.h
datadict.cc
datadict.h
debug_sync.cc
debug_sync.h
derived_handler.cc
derived_handler.h
derror.cc
derror.h
des_key_file.cc
des_key_file.h
discover.cc
discover.h
encryption.cc
event_data_objects.cc
event_data_objects.h
event_db_repository.cc
event_db_repository.h
event_parse_data.cc
event_parse_data.h
event_queue.cc
event_queue.h
event_scheduler.cc
event_scheduler.h
events.cc
events.h
field.cc
field.h
field_comp.cc
field_comp.h
field_conv.cc
filesort.cc
filesort.h
filesort_utils.cc
filesort_utils.h
gcalc_slicescan.cc
gcalc_slicescan.h
gcalc_tools.cc
gcalc_tools.h
gen_lex_hash.cc
gen_lex_token.cc
gen_win_tzname_data.ps1
group_by_handler.cc
group_by_handler.h
gstream.cc
gstream.h
ha_partition.cc
ha_partition.h
ha_sequence.cc
ha_sequence.h
handle_connections_win.cc
handle_connections_win.h
handler.cc
handler.h
hash_filo.cc
hash_filo.h
hostname.cc
hostname.h
init.cc
init.h
innodb_priv.h
item.cc MDEV-32586 incorrect error about cyclic reference about JSON type virtual column 2023-10-26 20:03:36 +02:00
item.h MDEV-32586 incorrect error about cyclic reference about JSON type virtual column 2023-10-26 20:03:36 +02:00
item_buff.cc
item_cmpfunc.cc
item_cmpfunc.h
item_create.cc
item_create.h
item_func.cc
item_func.h
item_geofunc.cc
item_geofunc.h
item_inetfunc.cc
item_inetfunc.h
item_jsonfunc.cc
item_jsonfunc.h
item_row.cc
item_row.h
item_strfunc.cc
item_strfunc.h
item_subselect.cc
item_subselect.h
item_sum.cc
item_sum.h
item_timefunc.cc
item_timefunc.h
item_vers.cc
item_vers.h
item_windowfunc.cc
item_windowfunc.h
item_xmlfunc.cc
item_xmlfunc.h
key.cc
key.h
keycaches.cc
keycaches.h
lex.h
lex_string.h
lex_symbol.h
lock.cc MDEV-32282: Galera node remains paused after interleaving FTWRLs 2023-10-26 22:13:54 +02:00
lock.h
log.cc MDEV-27436: binlog corruption (/tmp no space left on device at the same moment) 2023-10-31 11:48:00 +01:00
log.h MDEV-27436: binlog corruption (/tmp no space left on device at the same moment) 2023-10-31 11:48:00 +01:00
log_event.cc MDEV-32593 Assertion failure upon CREATE SEQUENCE 2023-10-27 12:26:34 +03:00
log_event.h
log_event_old.cc
log_event_old.h
log_slow.h
main.cc
mariadb.h
mdl.cc
mdl.h
mem_root_array.h
message.h
message.mc
message.rc
mf_iocache.cc
mf_iocache_encr.cc
MSG00001.bin
multi_range_read.cc
multi_range_read.h
my_apc.cc
my_apc.h
my_decimal.cc
my_decimal.h
my_json_writer.cc
my_json_writer.h
mysql_install_db.cc
mysql_upgrade_service.cc
mysqld.cc
mysqld.h
mysqld_suffix.h
net_serv.cc
nt_servc.cc
nt_servc.h
opt_index_cond_pushdown.cc
opt_range.cc
opt_range.h
opt_range_mrr.cc
opt_split.cc
opt_subselect.cc
opt_subselect.h
opt_sum.cc
opt_table_elimination.cc
opt_trace.cc
opt_trace.h
opt_trace_context.h
parse_file.cc
parse_file.h
partition_element.h
partition_info.cc
partition_info.h
password.c
plistsort.c
procedure.cc
procedure.h
protocol.cc
protocol.h
proxy_protocol.cc
proxy_protocol.h
records.cc
records.h
repl_failsafe.cc
repl_failsafe.h
replication.h
rowid_filter.cc
rowid_filter.h
rpl_constants.h
rpl_filter.cc
rpl_filter.h
rpl_gtid.cc
rpl_gtid.h
rpl_injector.cc
rpl_injector.h
rpl_mi.cc
rpl_mi.h MDEV-26272: The macro MASTER_INFO_VAR invokes undefined behaviour 2023-10-30 11:22:30 -06:00
rpl_parallel.cc
rpl_parallel.h
rpl_record.cc
rpl_record.h
rpl_record_old.cc
rpl_record_old.h
rpl_reporting.cc
rpl_reporting.h
rpl_rli.cc
rpl_rli.h
rpl_tblmap.cc
rpl_tblmap.h
rpl_utility.cc
rpl_utility.h
scheduler.cc
scheduler.h
select_handler.cc
select_handler.h
semisync.cc
semisync.h
semisync_master.cc
semisync_master.h
semisync_master_ack_receiver.cc
semisync_master_ack_receiver.h
semisync_slave.cc
semisync_slave.h
service_wsrep.cc
session_tracker.cc
session_tracker.h
set_var.cc
set_var.h
signal_handler.cc
slave.cc
slave.h
sp.cc
sp.h
sp_cache.cc
sp_cache.h
sp_head.cc
sp_head.h
sp_pcontext.cc
sp_pcontext.h
sp_rcontext.cc
sp_rcontext.h
spatial.cc
spatial.h
sql_acl.cc
sql_acl.h
sql_acl_getsort.ic
sql_admin.cc
sql_admin.h
sql_alloc.h
sql_alter.cc
sql_alter.h
sql_analyse.cc
sql_analyse.h
sql_analyze_stmt.cc
sql_analyze_stmt.h
sql_array.h
sql_audit.cc
sql_audit.h
sql_base.cc
sql_base.h
sql_basic_types.h
sql_binlog.cc
sql_binlog.h
sql_bitmap.h
sql_bootstrap.cc
sql_bootstrap.h
sql_builtin.cc.in
sql_cache.cc
sql_cache.h
sql_callback.h
sql_class.cc
sql_class.h
sql_client.cc
sql_cmd.h
sql_connect.cc
sql_connect.h
sql_const.h
sql_crypt.cc
sql_crypt.h
sql_cte.cc MDEV-31995 Bogus error executing PS for query using CTE with renaming of columns 2023-10-30 16:47:18 +12:00
sql_cte.h
sql_cursor.cc
sql_cursor.h
sql_db.cc
sql_db.h
sql_debug.h
sql_delete.cc
sql_delete.h
sql_derived.cc MDEV-31995 Bogus error executing PS for query using CTE with renaming of columns 2023-10-30 16:47:18 +12:00
sql_derived.h
sql_digest.cc
sql_digest.h
sql_digest_stream.h
sql_do.cc
sql_do.h
sql_error.cc
sql_error.h
sql_explain.cc MDEV-32351: Significant slowdown with outer joins: Test coverage 2023-10-27 15:45:20 +02:00
sql_explain.h ANALYZE FORMAT=JSON: Backport block-nl-join.r_unpack_time_ms from 11.0 +fix MDEV-30830. 2023-10-27 15:45:00 +02:00
sql_expression_cache.cc
sql_expression_cache.h
sql_get_diagnostics.cc
sql_get_diagnostics.h
sql_handler.cc
sql_handler.h
sql_help.cc
sql_help.h
sql_hset.h
sql_insert.cc
sql_insert.h
sql_join_cache.cc ANALYZE FORMAT=JSON: Backport block-nl-join.r_unpack_time_ms from 11.0 +fix MDEV-30830. 2023-10-27 15:45:00 +02:00
sql_join_cache.h MDEV-32351 Significant slowdown for query with many outer joins 2023-10-27 15:44:46 +02:00
sql_lex.cc MDEV-31995 Bogus error executing PS for query using CTE with renaming of columns 2023-10-30 16:47:18 +12:00
sql_lex.h MDEV-31995 Bogus error executing PS for query using CTE with renaming of columns 2023-10-30 16:47:18 +12:00
sql_lifo_buffer.h
sql_list.cc
sql_list.h
sql_load.cc MDEV-27436: binlog corruption (/tmp no space left on device at the same moment) 2023-10-31 11:48:00 +01:00
sql_load.h
sql_locale.cc
sql_locale.h
sql_manager.cc
sql_manager.h
sql_mode.cc
sql_mode.h
sql_parse.cc
sql_parse.h
sql_partition.cc
sql_partition.h
sql_partition_admin.cc
sql_partition_admin.h
sql_plist.h
sql_plugin.cc
sql_plugin.h
sql_plugin_compat.h
sql_plugin_services.inl
sql_prepare.cc
sql_prepare.h
sql_priv.h
sql_profile.cc
sql_profile.h
sql_reload.cc
sql_reload.h
sql_rename.cc
sql_rename.h
sql_repl.cc MDEV-27436: binlog corruption (/tmp no space left on device at the same moment) 2023-10-31 11:48:00 +01:00
sql_repl.h
sql_schema.cc
sql_schema.h
sql_select.cc MDEV-31995 Bogus error executing PS for query using CTE with renaming of columns 2023-10-30 16:47:18 +12:00
sql_select.h ANALYZE FORMAT=JSON: Backport block-nl-join.r_unpack_time_ms from 11.0 +fix MDEV-30830. 2023-10-27 15:45:00 +02:00
sql_sequence.cc
sql_sequence.h
sql_servers.cc
sql_servers.h
sql_show.cc
sql_show.h
sql_signal.cc
sql_signal.h
sql_sort.h
sql_state.c
sql_statistics.cc
sql_statistics.h
sql_string.cc
sql_string.h
sql_table.cc
sql_table.h
sql_tablespace.cc
sql_tablespace.h
sql_test.cc
sql_test.h
sql_time.cc
sql_time.h
sql_trigger.cc
sql_trigger.h
sql_truncate.cc
sql_truncate.h
sql_tvc.cc
sql_tvc.h
sql_type.cc
sql_type.h
sql_type_int.h
sql_type_json.cc
sql_type_json.h
sql_type_real.h
sql_udf.cc
sql_udf.h
sql_union.cc
sql_union.h
sql_update.cc
sql_update.h
sql_view.cc
sql_view.h
sql_window.cc
sql_window.h
sql_yacc.yy
sql_yacc_ora.yy
strfunc.cc
strfunc.h
structs.h
sys_vars.cc MDEV-26272: The macro MASTER_INFO_VAR invokes undefined behaviour 2023-10-30 11:22:30 -06:00
sys_vars.inl MDEV-26272: The macro MASTER_INFO_VAR invokes undefined behaviour 2023-10-30 11:22:30 -06:00
sys_vars_shared.h
table.cc MDEV-32586 incorrect error about cyclic reference about JSON type virtual column 2023-10-26 20:03:36 +02:00
table.h
table_cache.cc
table_cache.h
temporary_tables.cc
thr_malloc.cc
thr_malloc.h
threadpool.h
threadpool_common.cc
threadpool_generic.cc
threadpool_win.cc
transaction.cc
transaction.h
tzfile.h
tztime.cc
tztime.h
udf_example.c
udf_example.def
uniques.cc
uniques.h
unireg.cc
unireg.h
upgrade_conf_file.cc
vers_string.h
vers_utils.h
win_tzname_data.h
winservice.c
winservice.h
wsrep_applier.cc
wsrep_applier.h
wsrep_binlog.cc
wsrep_binlog.h
wsrep_check_opts.cc
wsrep_client_service.cc
wsrep_client_service.h
wsrep_client_state.h
wsrep_condition_variable.h
wsrep_dummy.cc
wsrep_high_priority_service.cc
wsrep_high_priority_service.h
wsrep_mutex.h
wsrep_mysqld.cc
wsrep_mysqld.h
wsrep_mysqld_c.h
wsrep_notify.cc
wsrep_on.h
wsrep_plugin.cc
wsrep_priv.h
wsrep_schema.cc
wsrep_schema.h
wsrep_server_service.cc
wsrep_server_service.h
wsrep_server_state.cc
wsrep_server_state.h
wsrep_sst.cc
wsrep_sst.h
wsrep_storage_service.cc
wsrep_storage_service.h
wsrep_thd.cc
wsrep_thd.h
wsrep_trans_observer.h
wsrep_types.h
wsrep_utils.cc
wsrep_utils.h
wsrep_var.cc
wsrep_var.h
wsrep_xid.cc
wsrep_xid.h
xa.cc
xa.h