mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 18:20:07 +01:00
0697ee265f
Keep track of how many pending XIDs (transactions that are prepared in storage engine and written into binlog, but not yet durably committed on disk in the engine) there are in each binlog. When the count of one binlog drops to zero, write a new binlog checkpoint event, telling which is the oldest binlog with pending XIDs. When doing XA recovery after a crash, check the last binlog checkpoint event, and scan all binlog files from that point onwards for XIDs that must be committed if found in prepared state inside engine. Remove the code in binlog rotation that waits for all prepared XIDs to be committed before writing a new binlog file (this is no longer necessary when recovery can scan multiple binlog files).
53 lines
1.8 KiB
PHP
53 lines
1.8 KiB
PHP
##############################################################################
|
|
# It's an auxiliary file used to show binary log events or relay log events.
|
|
# It is only called by show_binlog_events.inc and show_relaylog_events.inc.
|
|
##############################################################################
|
|
|
|
# Do not modify $binlog_start - if we did, it could wrongly persist until a
|
|
# later call of show_events.inc.
|
|
if ($binlog_start)
|
|
{
|
|
--let $_binlog_start= $binlog_start
|
|
}
|
|
if (!$binlog_start)
|
|
{
|
|
# If $binlog_start is not set, we will set it as the third event's
|
|
# position (second in relay log which has not Binlog Checkpoing event).
|
|
# The first two events (Description Event and Binlog Checkpoint
|
|
# event) are always ignored. For description event's length might be changed
|
|
# because of adding new events, 'SHOW BINLOG EVENTS LIMIT 2' is used to get
|
|
# the right value.
|
|
if ($is_relay_log)
|
|
{
|
|
--let $_binlog_start= query_get_value(SHOW BINLOG EVENTS LIMIT 1, End_log_pos, 1)
|
|
}
|
|
if (!$is_relay_log)
|
|
{
|
|
--let $_binlog_start= query_get_value(SHOW BINLOG EVENTS LIMIT 2, End_log_pos, 2)
|
|
}
|
|
}
|
|
|
|
--let $_statement=show binlog events
|
|
if ($is_relay_log)
|
|
{
|
|
--let $_statement=show relaylog events
|
|
}
|
|
|
|
if ($binlog_file)
|
|
{
|
|
--let $_statement= $_statement in '$binlog_file'
|
|
}
|
|
|
|
--let $_statement= $_statement from $_binlog_start
|
|
|
|
# Cannot use if($binlog_limit) since the variable may begin with a 0
|
|
|
|
if (`SELECT '$binlog_limit' <> ''`)
|
|
{
|
|
--let $_statement= $_statement limit $binlog_limit
|
|
}
|
|
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $_binlog_start <binlog_start>
|
|
--replace_column 2 # 4 # 5 #
|
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /Server ver:.*$/SERVER_VERSION, BINLOG_VERSION/
|
|
--eval $_statement
|