mirror of
https://github.com/MariaDB/server.git
synced 2025-01-15 19:42:28 +01:00
129 lines
4.7 KiB
C
129 lines
4.7 KiB
C
/******************************************************
|
|
XtraBackup: hot backup tool for InnoDB
|
|
(c) 2009-2013 Percona LLC and/or its affiliates.
|
|
Originally Created 3/3/2009 Yasufumi Kinoshita
|
|
Written by Alexey Kopytov, Aleksandr Kuzminsky, Stewart Smith, Vadim Tkachenko,
|
|
Yasufumi Kinoshita, Ignacio Nin and Baron Schwartz.
|
|
|
|
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-1335 USA
|
|
|
|
*******************************************************/
|
|
|
|
/* Source file cursor interface */
|
|
|
|
#ifndef FIL_CUR_H
|
|
#define FIL_CUR_H
|
|
|
|
#include <my_dir.h>
|
|
#include "read_filt.h"
|
|
#include "mtr0types.h"
|
|
#include "srv0start.h"
|
|
#include "srv0srv.h"
|
|
#include "xtrabackup.h"
|
|
|
|
struct xb_fil_cur_t {
|
|
pfs_os_file_t file; /*!< source file handle */
|
|
fil_node_t* node; /*!< source tablespace node */
|
|
char rel_path[FN_REFLEN];
|
|
/*!< normalized file path */
|
|
char abs_path[FN_REFLEN];
|
|
/*!< absolute file path */
|
|
MY_STAT statinfo; /*!< information about the file */
|
|
ulint zip_size; /*!< compressed page size in bytes or 0
|
|
for uncompressed pages */
|
|
ulint page_size; /*!< physical page size */
|
|
xb_read_filt_t* read_filter; /*!< read filter */
|
|
xb_read_filt_ctxt_t read_filter_ctxt;
|
|
/*!< read filter context */
|
|
byte* buf; /*!< read buffer */
|
|
size_t buf_size; /*!< buffer size in bytes */
|
|
size_t buf_read; /*!< number of read bytes in buffer
|
|
after the last cursor read */
|
|
size_t buf_npages; /*!< number of pages in buffer after the
|
|
last cursor read */
|
|
ib_int64_t buf_offset; /*!< file offset of the first page in
|
|
buffer */
|
|
unsigned buf_page_no; /*!< number of the first page in
|
|
buffer */
|
|
uint thread_n; /*!< thread number for diagnostics */
|
|
uint32_t space_id; /*!< ID of tablespace */
|
|
uint32_t space_size; /*!< space size in pages */
|
|
uint32_t n_process_batch;/*!< Number of batch processed */
|
|
|
|
/** @return whether this is not a file-per-table tablespace */
|
|
bool is_system() const
|
|
{
|
|
ut_ad(space_id != SRV_TMP_SPACE_ID);
|
|
return(space_id == TRX_SYS_SPACE
|
|
|| srv_is_undo_tablespace(space_id));
|
|
}
|
|
};
|
|
|
|
typedef enum {
|
|
XB_FIL_CUR_SUCCESS,
|
|
XB_FIL_CUR_SKIP,
|
|
XB_FIL_CUR_ERROR,
|
|
XB_FIL_CUR_EOF
|
|
} xb_fil_cur_result_t;
|
|
|
|
/************************************************************************
|
|
Open a source file cursor and initialize the associated read filter.
|
|
|
|
@return XB_FIL_CUR_SUCCESS on success, XB_FIL_CUR_SKIP if the source file must
|
|
be skipped and XB_FIL_CUR_ERROR on error. */
|
|
xb_fil_cur_result_t
|
|
xb_fil_cur_open(
|
|
/*============*/
|
|
xb_fil_cur_t* cursor, /*!< out: source file cursor */
|
|
xb_read_filt_t* read_filter, /*!< in/out: the read filter */
|
|
fil_node_t* node, /*!< in: source tablespace node */
|
|
uint thread_n, /*!< thread number for diagnostics */
|
|
ulonglong max_file_size = ULLONG_MAX);
|
|
|
|
/** Reads and verifies the next block of pages from the source
|
|
file. Positions the cursor after the last read non-corrupted page.
|
|
@param[in,out] cursor source file cursor
|
|
@param[out] corrupted_pages adds corrupted pages if
|
|
opt_log_innodb_page_corruption is set
|
|
@return XB_FIL_CUR_SUCCESS if some have been read successfully, XB_FIL_CUR_EOF
|
|
if there are no more pages to read and XB_FIL_CUR_ERROR on error. */
|
|
xb_fil_cur_result_t xb_fil_cur_read(xb_fil_cur_t *cursor,
|
|
CorruptedPages &corrupted_pages);
|
|
/************************************************************************
|
|
Close the source file cursor opened with xb_fil_cur_open() and its
|
|
associated read filter. */
|
|
void
|
|
xb_fil_cur_close(
|
|
/*=============*/
|
|
xb_fil_cur_t *cursor); /*!< in/out: source file cursor */
|
|
|
|
/***********************************************************************
|
|
Extracts the relative path ("database/table.ibd") of a tablespace from a
|
|
specified possibly absolute path.
|
|
|
|
For user tablespaces both "./database/table.ibd" and
|
|
"/remote/dir/database/table.ibd" result in "database/table.ibd".
|
|
|
|
For system tablepsaces (i.e. When is_system is TRUE) both "/remote/dir/ibdata1"
|
|
and "./ibdata1" yield "ibdata1" in the output. */
|
|
const char *
|
|
xb_get_relative_path(
|
|
/*=================*/
|
|
const char* path, /*!< in: tablespace path (either
|
|
relative or absolute) */
|
|
ibool is_system); /*!< in: TRUE for system tablespaces,
|
|
i.e. when only the filename must be
|
|
returned. */
|
|
|
|
#endif
|