mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 02:46:29 +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
 | 
