mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 10:31:54 +01:00
1af8bf39ca
Problem was that FIL_PAGE_FLUSH_LSN_OR_KEY_VERSION field that for encrypted pages even in system datafiles should contain key_version except very first page (0:0) is after encryption overwritten with flush lsn. Ported WL#7990 Repurpose FIL_PAGE_FLUSH_LSN to 10.1 The field FIL_PAGE_FLUSH_LSN_OR_KEY_VERSION is consulted during InnoDB startup. At startup, InnoDB reads the FIL_PAGE_FLUSH_LSN_OR_KEY_VERSION from the first page of each file in the InnoDB system tablespace. If there are multiple files, the minimum and maximum LSN can differ. These numbers are passed to InnoDB startup. Having the number in other files than the first file of the InnoDB system tablespace is not providing much additional value. It is conflicting with other use of the field, such as on InnoDB R-tree index pages and encryption key_version. This worklog will stop writing FIL_PAGE_FLUSH_LSN_OR_KEY_VERSION to other files than the first file of the InnoDB system tablespace (page number 0:0) when system tablespace is encrypted. If tablespace is not encrypted we continue writing FIL_PAGE_FLUSH_LSN_OR_KEY_VERSION to all first pages of system tablespace to avoid unnecessary warnings on downgrade. open_or_create_data_files(): pass only one flushed_lsn parameter xb_load_tablespaces(): pass only one flushed_lsn parameter. buf_page_create(): Improve comment about where FIL_PAGE_FIL_FLUSH_LSN_OR_KEY_VERSION is set. fil_write_flushed_lsn(): A new function, merged from fil_write_lsn_and_arch_no_to_file() and fil_write_flushed_lsn_to_data_files(). Only write to the first page of the system tablespace (page 0:0) if tablespace is encrypted, or write all first pages of system tablespace and invoke fil_flush_file_spaces(FIL_TYPE_TABLESPACE) afterwards. fil_read_first_page(): read flush_lsn and crypt_data only from first datafile. fil_open_single_table_tablespace(): Remove output of LSN, because it was only valid for the system tablespace and the undo tablespaces, not user tablespaces. fil_validate_single_table_tablespace(): Remove output of LSN. checkpoint_now_set(): Use fil_write_flushed_lsn and output a error if operation fails. Remove lsn variable from fsp_open_info. recv_recovery_from_checkpoint_start(): Remove unnecessary second flush_lsn parameter. log_empty_and_mark_files_at_shutdown(): Use fil_writte_flushed_lsn and output error if it fails. open_or_create_data_files(): Pass only one flushed_lsn variable.
77 lines
2.6 KiB
C
77 lines
2.6 KiB
C
/******************************************************
|
|
Copyright (c) 2012 Percona LLC and/or its affiliates.
|
|
|
|
Declarations of XtraBackup functions called by InnoDB code.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
|
|
*******************************************************/
|
|
|
|
#ifndef xb0xb_h
|
|
#define xb0xb_h
|
|
|
|
|
|
extern void os_io_init_simple(void);
|
|
extern pfs_os_file_t files[1000];
|
|
extern const char *innodb_checksum_algorithm_names[];
|
|
extern TYPELIB innodb_checksum_algorithm_typelib;
|
|
extern dberr_t open_or_create_data_files(
|
|
bool* create_new_db,
|
|
#ifdef UNIV_LOG_ARCHIVE
|
|
lsn_t* min_arch_log_no,
|
|
lsn_t* max_arch_log_no,
|
|
#endif
|
|
lsn_t* flushed_lsn,
|
|
ulint* sum_of_new_sizes)
|
|
;
|
|
int
|
|
fil_file_readdir_next_file(
|
|
/*=======================*/
|
|
dberr_t* err, /*!< out: this is set to DB_ERROR if an error
|
|
was encountered, otherwise not changed */
|
|
const char* dirname,/*!< in: directory name or path */
|
|
os_file_dir_t dir, /*!< in: directory stream */
|
|
os_file_stat_t* info) /*!< in/out: buffer where the
|
|
info is returned */;
|
|
buf_block_t* btr_node_ptr_get_child(
|
|
const rec_t* node_ptr,/*!< in: node pointer */
|
|
dict_index_t* index, /*!< in: index */
|
|
const ulint* offsets,/*!< in: array returned by rec_get_offsets() */
|
|
mtr_t* mtr) /*!< in: mtr */;
|
|
|
|
buf_block_t*
|
|
btr_root_block_get(
|
|
/*===============*/
|
|
const dict_index_t* index, /*!< in: index tree */
|
|
ulint mode, /*!< in: either RW_S_LATCH
|
|
or RW_X_LATCH */
|
|
mtr_t* mtr) /*!< in: mtr */;
|
|
fil_space_t*
|
|
fil_space_get_by_name(const char *);
|
|
ibool
|
|
recv_check_cp_is_consistent(const byte* buf);
|
|
void
|
|
innodb_log_checksum_func_update(
|
|
/*============================*/
|
|
ulint algorithm) /*!< in: algorithm */;
|
|
dberr_t recv_find_max_checkpoint(log_group_t** max_group, ulint* max_field);
|
|
dberr_t
|
|
srv_undo_tablespaces_init(
|
|
/*======================*/
|
|
ibool create_new_db,
|
|
ibool backup_mode,
|
|
const ulint n_conf_tablespaces,
|
|
ulint* n_opened);
|
|
|
|
#endif
|