mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Simplify access to the binlog offset in InnoDB
trx_sys_print_mysql_binlog_offset(): Use 64-bit arithmetics and ib::info(). TRX_SYS_MYSQL_LOG_OFFSET: Replaces TRX_SYS_MYSQL_LOG_OFFSET_HIGH, TRX_SYS_MYSQL_LOG_OFFSET_LOW. trx_sys_update_mysql_binlog_offset(): Remove the constant parameter field=TRX_SYS_MYSQL_LOG_INFO. Use 64-bit arithmetics.
This commit is contained in:
@ -43,6 +43,6 @@ a
|
|||||||
1
|
1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
InnoDB: Last MySQL binlog file position 0 <pos>, file name ./master-bin.000001
|
InnoDB: Last binlog file './master-bin.000001', position <pos>
|
||||||
SET DEBUG_SYNC= 'RESET';
|
SET DEBUG_SYNC= 'RESET';
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -44,6 +44,6 @@ a
|
|||||||
1
|
1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
InnoDB: Last MySQL binlog file position 0 <pos>, file name ./master-bin.000001
|
InnoDB: Last binlog file './master-bin.000001', position <pos>
|
||||||
SET DEBUG_SYNC= 'RESET';
|
SET DEBUG_SYNC= 'RESET';
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
# Don't test this under valgrind, memory leaks will occur as we crash
|
# Don't test this under valgrind, memory leaks will occur as we crash
|
||||||
--source include/not_valgrind.inc
|
--source include/not_valgrind.inc
|
||||||
|
|
||||||
# The test case currently uses grep and tail, which may be unavailable on
|
# The test case currently uses sed and tail, which may be unavailable on
|
||||||
# some windows systems. But see MWL#191 for how to remove the need for grep.
|
# some windows systems. But see MWL#191 for how to remove the need for grep.
|
||||||
--source include/not_windows.inc
|
--source include/not_windows.inc
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ SELECT * FROM t1 ORDER BY a;
|
|||||||
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||||
let pos=`select $binlog_start_pos + 730`;
|
let pos=`select $binlog_start_pos + 730`;
|
||||||
--replace_result $pos <pos>
|
--replace_result $pos <pos>
|
||||||
--exec grep 'InnoDB: Last MySQL binlog file position' $MYSQLD_DATADIR/../../log/mysqld.1.err | tail -1
|
--exec sed -ne 's/.*\(InnoDB: Last binlog file .* position.*\)/\1/p' $MYSQLD_DATADIR/../../log/mysqld.1.err | tail -1
|
||||||
|
|
||||||
SET DEBUG_SYNC= 'RESET';
|
SET DEBUG_SYNC= 'RESET';
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
# Don't test this under valgrind, memory leaks will occur as we crash
|
# Don't test this under valgrind, memory leaks will occur as we crash
|
||||||
--source include/not_valgrind.inc
|
--source include/not_valgrind.inc
|
||||||
|
|
||||||
# The test case currently uses grep and tail, which may be unavailable on
|
# The test case currently uses sed and tail, which may be unavailable on
|
||||||
# some windows systems. But see MWL#191 for how to remove the need for grep.
|
# some windows systems. But see MWL#191 for how to remove the need for grep.
|
||||||
--source include/not_windows.inc
|
--source include/not_windows.inc
|
||||||
|
|
||||||
@ -100,6 +100,6 @@ SELECT * FROM t1 ORDER BY a;
|
|||||||
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||||
let pos=`select $binlog_start_pos + 730`;
|
let pos=`select $binlog_start_pos + 730`;
|
||||||
--replace_result $pos <pos>
|
--replace_result $pos <pos>
|
||||||
--exec grep 'InnoDB: Last MySQL binlog file position' $MYSQLD_DATADIR/../../log/mysqld.1.err | tail -1
|
--exec sed -ne 's/.*\(InnoDB: Last binlog file .* position.*\)/\1/p' $MYSQLD_DATADIR/../../log/mysqld.1.err | tail -1
|
||||||
SET DEBUG_SYNC= 'RESET';
|
SET DEBUG_SYNC= 'RESET';
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -236,16 +236,12 @@ trx_sys_update_mysql_binlog_offset(
|
|||||||
/*===============================*/
|
/*===============================*/
|
||||||
const char* file_name,/*!< in: MySQL log file name */
|
const char* file_name,/*!< in: MySQL log file name */
|
||||||
int64_t offset, /*!< in: position in that log file */
|
int64_t offset, /*!< in: position in that log file */
|
||||||
ulint field, /*!< in: offset of the MySQL log info field in
|
|
||||||
the trx sys header */
|
|
||||||
trx_sysf_t* sys_header, /*!< in: trx sys header */
|
trx_sysf_t* sys_header, /*!< in: trx sys header */
|
||||||
mtr_t* mtr); /*!< in: mtr */
|
mtr_t* mtr); /*!< in: mtr */
|
||||||
/*****************************************************************//**
|
/** Display the MySQL binlog offset info if it is present in the trx
|
||||||
Prints to stderr the MySQL binlog offset info in the trx system header if
|
system header. */
|
||||||
the magic number shows it valid. */
|
|
||||||
void
|
void
|
||||||
trx_sys_print_mysql_binlog_offset(void);
|
trx_sys_print_mysql_binlog_offset();
|
||||||
/*===================================*/
|
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
/** Update WSREP checkpoint XID in sys header. */
|
/** Update WSREP checkpoint XID in sys header. */
|
||||||
void
|
void
|
||||||
@ -420,9 +416,7 @@ impose the 7 bit restriction. e.g., mach_write_to_3() */
|
|||||||
TRX_SYS_MYSQL_LOG_MAGIC_N
|
TRX_SYS_MYSQL_LOG_MAGIC_N
|
||||||
if we have valid data in the
|
if we have valid data in the
|
||||||
MySQL binlog info */
|
MySQL binlog info */
|
||||||
#define TRX_SYS_MYSQL_LOG_OFFSET_HIGH 4 /*!< high 4 bytes of the offset
|
#define TRX_SYS_MYSQL_LOG_OFFSET 4 /*!< the 64-bit offset
|
||||||
within that file */
|
|
||||||
#define TRX_SYS_MYSQL_LOG_OFFSET_LOW 8 /*!< low 4 bytes of the offset
|
|
||||||
within that file */
|
within that file */
|
||||||
#define TRX_SYS_MYSQL_LOG_NAME 12 /*!< MySQL log file name */
|
#define TRX_SYS_MYSQL_LOG_NAME 12 /*!< MySQL log file name */
|
||||||
|
|
||||||
|
@ -176,95 +176,67 @@ trx_sys_update_mysql_binlog_offset(
|
|||||||
/*===============================*/
|
/*===============================*/
|
||||||
const char* file_name,/*!< in: MySQL log file name */
|
const char* file_name,/*!< in: MySQL log file name */
|
||||||
int64_t offset, /*!< in: position in that log file */
|
int64_t offset, /*!< in: position in that log file */
|
||||||
ulint field, /*!< in: offset of the MySQL log info field in
|
|
||||||
the trx sys header */
|
|
||||||
trx_sysf_t* sys_header, /*!< in: trx sys header */
|
trx_sysf_t* sys_header, /*!< in: trx sys header */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in: mtr */
|
||||||
{
|
{
|
||||||
DBUG_PRINT("InnoDB",("trx_mysql_binlog_offset: %lld", (longlong) offset));
|
DBUG_PRINT("InnoDB",("trx_mysql_binlog_offset: %lld", (longlong) offset));
|
||||||
|
|
||||||
if (ut_strlen(file_name) >= TRX_SYS_MYSQL_LOG_NAME_LEN) {
|
const size_t len = strlen(file_name) + 1;
|
||||||
|
|
||||||
|
if (len > TRX_SYS_MYSQL_LOG_NAME_LEN) {
|
||||||
|
|
||||||
/* We cannot fit the name to the 512 bytes we have reserved */
|
/* We cannot fit the name to the 512 bytes we have reserved */
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mach_read_from_4(sys_header + field
|
if (mach_read_from_4(TRX_SYS_MYSQL_LOG_MAGIC_N_FLD
|
||||||
+ TRX_SYS_MYSQL_LOG_MAGIC_N_FLD)
|
+ TRX_SYS_MYSQL_LOG_INFO + sys_header)
|
||||||
!= TRX_SYS_MYSQL_LOG_MAGIC_N) {
|
!= TRX_SYS_MYSQL_LOG_MAGIC_N) {
|
||||||
|
|
||||||
mlog_write_ulint(sys_header + field
|
mlog_write_ulint(TRX_SYS_MYSQL_LOG_MAGIC_N_FLD
|
||||||
+ TRX_SYS_MYSQL_LOG_MAGIC_N_FLD,
|
+ TRX_SYS_MYSQL_LOG_INFO + sys_header,
|
||||||
TRX_SYS_MYSQL_LOG_MAGIC_N,
|
TRX_SYS_MYSQL_LOG_MAGIC_N,
|
||||||
MLOG_4BYTES, mtr);
|
MLOG_4BYTES, mtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 != strcmp((char*) (sys_header + field + TRX_SYS_MYSQL_LOG_NAME),
|
if (memcmp(file_name, TRX_SYS_MYSQL_LOG_NAME + TRX_SYS_MYSQL_LOG_INFO
|
||||||
file_name)) {
|
+ sys_header, len)) {
|
||||||
|
mlog_write_string(TRX_SYS_MYSQL_LOG_NAME
|
||||||
mlog_write_string(sys_header + field
|
+ TRX_SYS_MYSQL_LOG_INFO
|
||||||
+ TRX_SYS_MYSQL_LOG_NAME,
|
+ sys_header,
|
||||||
(byte*) file_name, 1 + ut_strlen(file_name),
|
reinterpret_cast<const byte*>(file_name),
|
||||||
mtr);
|
len, mtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mach_read_from_4(sys_header + field
|
mlog_write_ull(TRX_SYS_MYSQL_LOG_INFO + TRX_SYS_MYSQL_LOG_OFFSET
|
||||||
+ TRX_SYS_MYSQL_LOG_OFFSET_HIGH) > 0
|
+ sys_header, offset, mtr);
|
||||||
|| (offset >> 32) > 0) {
|
|
||||||
|
|
||||||
mlog_write_ulint(sys_header + field
|
|
||||||
+ TRX_SYS_MYSQL_LOG_OFFSET_HIGH,
|
|
||||||
(ulint)(offset >> 32),
|
|
||||||
MLOG_4BYTES, mtr);
|
|
||||||
}
|
|
||||||
|
|
||||||
mlog_write_ulint(sys_header + field
|
|
||||||
+ TRX_SYS_MYSQL_LOG_OFFSET_LOW,
|
|
||||||
(ulint)(offset & 0xFFFFFFFFUL),
|
|
||||||
MLOG_4BYTES, mtr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************//**
|
/** Display the MySQL binlog offset info if it is present in the trx
|
||||||
Stores the MySQL binlog offset info in the trx system header if
|
system header. */
|
||||||
the magic number shows it valid, and print the info to stderr */
|
|
||||||
void
|
void
|
||||||
trx_sys_print_mysql_binlog_offset(void)
|
trx_sys_print_mysql_binlog_offset()
|
||||||
/*===================================*/
|
|
||||||
{
|
{
|
||||||
trx_sysf_t* sys_header;
|
|
||||||
mtr_t mtr;
|
mtr_t mtr;
|
||||||
ulint trx_sys_mysql_bin_log_pos_high;
|
|
||||||
ulint trx_sys_mysql_bin_log_pos_low;
|
|
||||||
|
|
||||||
mtr_start(&mtr);
|
mtr.start();
|
||||||
|
|
||||||
sys_header = trx_sysf_get(&mtr);
|
const trx_sysf_t* sys_header = trx_sysf_get(&mtr);
|
||||||
|
|
||||||
if (mach_read_from_4(sys_header + TRX_SYS_MYSQL_LOG_INFO
|
if (mach_read_from_4(TRX_SYS_MYSQL_LOG_INFO
|
||||||
+ TRX_SYS_MYSQL_LOG_MAGIC_N_FLD)
|
+ TRX_SYS_MYSQL_LOG_MAGIC_N_FLD + sys_header)
|
||||||
!= TRX_SYS_MYSQL_LOG_MAGIC_N) {
|
== TRX_SYS_MYSQL_LOG_MAGIC_N) {
|
||||||
|
ib::info() << "Last binlog file '"
|
||||||
mtr_commit(&mtr);
|
<< TRX_SYS_MYSQL_LOG_INFO + TRX_SYS_MYSQL_LOG_NAME
|
||||||
|
+ sys_header
|
||||||
return;
|
<< "', position "
|
||||||
|
<< mach_read_from_8(TRX_SYS_MYSQL_LOG_INFO
|
||||||
|
+ TRX_SYS_MYSQL_LOG_OFFSET
|
||||||
|
+ sys_header);
|
||||||
}
|
}
|
||||||
|
|
||||||
trx_sys_mysql_bin_log_pos_high = mach_read_from_4(
|
mtr.commit();
|
||||||
sys_header + TRX_SYS_MYSQL_LOG_INFO
|
|
||||||
+ TRX_SYS_MYSQL_LOG_OFFSET_HIGH);
|
|
||||||
trx_sys_mysql_bin_log_pos_low = mach_read_from_4(
|
|
||||||
sys_header + TRX_SYS_MYSQL_LOG_INFO
|
|
||||||
+ TRX_SYS_MYSQL_LOG_OFFSET_LOW);
|
|
||||||
|
|
||||||
fprintf(stderr,
|
|
||||||
"InnoDB: Last MySQL binlog file position " ULINTPF " " ULINTPF
|
|
||||||
", file name %s\n",
|
|
||||||
trx_sys_mysql_bin_log_pos_high, trx_sys_mysql_bin_log_pos_low,
|
|
||||||
sys_header + TRX_SYS_MYSQL_LOG_INFO
|
|
||||||
+ TRX_SYS_MYSQL_LOG_NAME);
|
|
||||||
|
|
||||||
mtr_commit(&mtr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
|
@ -1496,7 +1496,6 @@ trx_write_serialisation_history(
|
|||||||
trx_sys_update_mysql_binlog_offset(
|
trx_sys_update_mysql_binlog_offset(
|
||||||
trx->mysql_log_file_name,
|
trx->mysql_log_file_name,
|
||||||
trx->mysql_log_offset,
|
trx->mysql_log_offset,
|
||||||
TRX_SYS_MYSQL_LOG_INFO,
|
|
||||||
sys_header,
|
sys_header,
|
||||||
mtr);
|
mtr);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user