Commit 9a5dafba authored by marko@hundin.mysql.fi's avatar marko@hundin.mysql.fi

InnoDB cleanup: Remove unused code for online backup

parent 92c15122
...@@ -114,20 +114,6 @@ dulint ...@@ -114,20 +114,6 @@ dulint
log_get_lsn(void); log_get_lsn(void);
/*=============*/ /*=============*/
/* out: current lsn */ /* out: current lsn */
/****************************************************************************
Gets the online backup lsn. */
UNIV_INLINE
dulint
log_get_online_backup_lsn_low(void);
/*===============================*/
/****************************************************************************
Gets the online backup state. */
UNIV_INLINE
ibool
log_get_online_backup_state_low(void);
/*=================================*/
/* out: online backup state, the caller must
own the log_sys mutex */
/********************************************************** /**********************************************************
Initializes the log. */ Initializes the log. */
...@@ -326,20 +312,6 @@ log_archived_file_name_gen( ...@@ -326,20 +312,6 @@ log_archived_file_name_gen(
char* buf, /* in: buffer where to write */ char* buf, /* in: buffer where to write */
ulint id, /* in: group id */ ulint id, /* in: group id */
ulint file_no);/* in: file number */ ulint file_no);/* in: file number */
/**********************************************************
Switches the database to the online backup state. */
ulint
log_switch_backup_state_on(void);
/*============================*/
/* out: DB_SUCCESS or DB_ERROR */
/**********************************************************
Switches the online backup state off. */
ulint
log_switch_backup_state_off(void);
/*=============================*/
/* out: DB_SUCCESS or DB_ERROR */
/************************************************************************ /************************************************************************
Checks that there is enough free space in the log to start a new query step. Checks that there is enough free space in the log to start a new query step.
Flushes the log buffer or makes a new checkpoint if necessary. NOTE: this Flushes the log buffer or makes a new checkpoint if necessary. NOTE: this
...@@ -871,13 +843,6 @@ struct log_struct{ ...@@ -871,13 +843,6 @@ struct log_struct{
os_event_t archiving_on; /* if archiving has been stopped, os_event_t archiving_on; /* if archiving has been stopped,
a thread can wait for this event to a thread can wait for this event to
become signaled */ become signaled */
/* Fields involved in online backups */
ibool online_backup_state;
/* TRUE if the database is in the
online backup state */
dulint online_backup_lsn;
/* lsn when the state was changed to
the online backup state */
}; };
#define LOG_ARCH_ON 71 #define LOG_ARCH_ON 71
......
...@@ -318,8 +318,7 @@ log_reserve_and_write_fast( ...@@ -318,8 +318,7 @@ log_reserve_and_write_fast(
data_len = len + log->buf_free % OS_FILE_LOG_BLOCK_SIZE; data_len = len + log->buf_free % OS_FILE_LOG_BLOCK_SIZE;
if (log->online_backup_state if (data_len >= OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_TRL_SIZE) {
|| (data_len >= OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_TRL_SIZE)) {
/* The string does not fit within the current log block /* The string does not fit within the current log block
or the log block would become full */ or the log block would become full */
...@@ -403,36 +402,3 @@ log_free_check(void) ...@@ -403,36 +402,3 @@ log_free_check(void)
log_check_margins(); log_check_margins();
} }
} }
/****************************************************************************
Gets the online backup lsn. */
UNIV_INLINE
dulint
log_get_online_backup_lsn_low(void)
/*===============================*/
/* out: online_backup_lsn, the caller must
own the log_sys mutex */
{
#ifdef UNIV_SYNC_DEBUG
ut_ad(mutex_own(&(log_sys->mutex)));
#endif /* UNIV_SYNC_DEBUG */
ut_ad(log_sys->online_backup_state);
return(log_sys->online_backup_lsn);
}
/****************************************************************************
Gets the online backup state. */
UNIV_INLINE
ibool
log_get_online_backup_state_low(void)
/*=================================*/
/* out: online backup state, the caller must
own the log_sys mutex */
{
#ifdef UNIV_SYNC_DEBUG
ut_ad(mutex_own(&(log_sys->mutex)));
#endif /* UNIV_SYNC_DEBUG */
return(log_sys->online_backup_state);
}
...@@ -82,7 +82,7 @@ flag value must give the length also! */ ...@@ -82,7 +82,7 @@ flag value must give the length also! */
predefined minimum record */ predefined minimum record */
#define MLOG_IBUF_BITMAP_INIT ((byte)27) /* initialize an ibuf bitmap #define MLOG_IBUF_BITMAP_INIT ((byte)27) /* initialize an ibuf bitmap
page */ page */
#define MLOG_FULL_PAGE ((byte)28) /* full contents of a page */ /*#define MLOG_FULL_PAGE ((byte)28) full contents of a page */
#define MLOG_INIT_FILE_PAGE ((byte)29) /* this means that a file page #define MLOG_INIT_FILE_PAGE ((byte)29) /* this means that a file page
is taken into use and the prior is taken into use and the prior
contents of the page should be contents of the page should be
...@@ -230,16 +230,6 @@ mtr_memo_release( ...@@ -230,16 +230,6 @@ mtr_memo_release(
mtr_t* mtr, /* in: mtr */ mtr_t* mtr, /* in: mtr */
void* object, /* in: object */ void* object, /* in: object */
ulint type); /* in: object type: MTR_MEMO_S_LOCK, ... */ ulint type); /* in: object type: MTR_MEMO_S_LOCK, ... */
/****************************************************************
Parses a log record which contains the full contents of a page. */
byte*
mtr_log_parse_full_page(
/*====================*/
/* out: end of log record or NULL */
byte* ptr, /* in: buffer */
byte* end_ptr,/* in: buffer end */
page_t* page); /* in: page or NULL */
/************************************************************** /**************************************************************
Checks if memo contains the given item. */ Checks if memo contains the given item. */
UNIV_INLINE UNIV_INLINE
......
...@@ -793,11 +793,7 @@ log_init(void) ...@@ -793,11 +793,7 @@ log_init(void)
log_sys->archiving_on = os_event_create(NULL); log_sys->archiving_on = os_event_create(NULL);
/*----------------------------*/ /*----------------------------*/
log_sys->online_backup_state = FALSE;
/*----------------------------*/
log_block_init(log_sys->buf, log_sys->lsn); log_block_init(log_sys->buf, log_sys->lsn);
log_block_set_first_rec_group(log_sys->buf, LOG_BLOCK_HDR_SIZE); log_block_set_first_rec_group(log_sys->buf, LOG_BLOCK_HDR_SIZE);
...@@ -2973,66 +2969,6 @@ loop: ...@@ -2973,66 +2969,6 @@ loop:
mutex_exit(&(log_sys->mutex)); mutex_exit(&(log_sys->mutex));
} }
/**********************************************************
Switches the database to the online backup state. */
ulint
log_switch_backup_state_on(void)
/*============================*/
/* out: DB_SUCCESS or DB_ERROR */
{
dulint backup_lsn;
mutex_enter(&(log_sys->mutex));
if (log_sys->online_backup_state) {
/* The database is already in that state */
mutex_exit(&(log_sys->mutex));
return(DB_ERROR);
}
log_sys->online_backup_state = TRUE;
backup_lsn = log_sys->lsn;
log_sys->online_backup_lsn = backup_lsn;
mutex_exit(&(log_sys->mutex));
/* log_checkpoint_and_mark_file_spaces(); */
return(DB_SUCCESS);
}
/**********************************************************
Switches the online backup state off. */
ulint
log_switch_backup_state_off(void)
/*=============================*/
/* out: DB_SUCCESS or DB_ERROR */
{
mutex_enter(&(log_sys->mutex));
if (!log_sys->online_backup_state) {
/* The database is already in that state */
mutex_exit(&(log_sys->mutex));
return(DB_ERROR);
}
log_sys->online_backup_state = FALSE;
mutex_exit(&(log_sys->mutex));
return(DB_SUCCESS);
}
/******************************************************************** /********************************************************************
Makes a checkpoint at the latest lsn and writes it to first page of each Makes a checkpoint at the latest lsn and writes it to first page of each
data file in the database, so that we know that the file spaces contain data file in the database, so that we know that the file spaces contain
......
...@@ -790,9 +790,6 @@ recv_parse_or_apply_log_rec_body( ...@@ -790,9 +790,6 @@ recv_parse_or_apply_log_rec_body(
} else if (type == MLOG_IBUF_BITMAP_INIT) { } else if (type == MLOG_IBUF_BITMAP_INIT) {
new_ptr = ibuf_parse_bitmap_init(ptr, end_ptr, page, mtr); new_ptr = ibuf_parse_bitmap_init(ptr, end_ptr, page, mtr);
} else if (type == MLOG_FULL_PAGE) {
new_ptr = mtr_log_parse_full_page(ptr, end_ptr, page);
} else if (type == MLOG_INIT_FILE_PAGE) { } else if (type == MLOG_INIT_FILE_PAGE) {
new_ptr = fsp_parse_init_file_page(ptr, end_ptr, page); new_ptr = fsp_parse_init_file_page(ptr, end_ptr, page);
...@@ -1093,15 +1090,7 @@ recv_recover_page( ...@@ -1093,15 +1090,7 @@ recv_recover_page(
buf = ((byte*)(recv->data)) + sizeof(recv_data_t); buf = ((byte*)(recv->data)) + sizeof(recv_data_t);
} }
if (recv->type == MLOG_INIT_FILE_PAGE if (recv->type == MLOG_INIT_FILE_PAGE) {
|| recv->type == MLOG_FULL_PAGE) {
/* A new file page may have been taken into use,
or we have stored the full contents of the page:
in this case it may be that the original log record
type was MLOG_INIT_FILE_PAGE, and we replaced it
with MLOG_FULL_PAGE, thus we have to apply
any record of type MLOG_FULL_PAGE */
page_lsn = page_newest_lsn; page_lsn = page_newest_lsn;
mach_write_to_8(page + UNIV_PAGE_SIZE mach_write_to_8(page + UNIV_PAGE_SIZE
......
...@@ -105,179 +105,6 @@ mtr_memo_pop_all( ...@@ -105,179 +105,6 @@ mtr_memo_pop_all(
} }
} }
/****************************************************************
Writes to the log the contents of a full page. This is called when the
database is in the online backup state. */
static
void
mtr_log_write_full_page(
/*====================*/
page_t* page, /* in: page to write */
ulint i, /* in: i'th page for mtr */
ulint n_pages,/* in: total number of pages for mtr */
mtr_t* mtr) /* in: mtr */
{
byte* buf;
byte* ptr;
ulint len;
buf = mem_alloc(UNIV_PAGE_SIZE + 50);
ptr = mlog_write_initial_log_record_fast(page, MLOG_FULL_PAGE, buf,
mtr);
ut_memcpy(ptr, page, UNIV_PAGE_SIZE);
len = (ptr - buf) + UNIV_PAGE_SIZE;
if (i == n_pages - 1) {
if (n_pages > 1) {
*(buf + len) = MLOG_MULTI_REC_END;
len++;
} else {
*buf = (byte)((ulint)*buf | MLOG_SINGLE_REC_FLAG);
}
}
ut_ad(len < UNIV_PAGE_SIZE + 50);
log_write_low(buf, len);
mem_free(buf);
}
/****************************************************************
Parses a log record which contains the full contents of a page. */
byte*
mtr_log_parse_full_page(
/*====================*/
/* out: end of log record or NULL */
byte* ptr, /* in: buffer */
byte* end_ptr,/* in: buffer end */
page_t* page) /* in: page or NULL */
{
if (end_ptr < ptr + UNIV_PAGE_SIZE) {
return(NULL);
}
if (page) {
ut_memcpy(page, ptr, UNIV_PAGE_SIZE);
}
return(ptr + UNIV_PAGE_SIZE);
}
/****************************************************************
Writes to the database log the full contents of the pages that this mtr has
modified. */
static
void
mtr_log_write_backup_full_pages(
/*============================*/
mtr_t* mtr, /* in: mini-transaction */
ulint n_pages)/* in: number of pages modified by mtr */
{
mtr_memo_slot_t* slot;
dyn_array_t* memo;
buf_block_t* block;
ulint offset;
ulint type;
ulint i;
ut_ad(mtr);
ut_ad(mtr->magic_n == MTR_MAGIC_N);
ut_ad(mtr->state == MTR_COMMITTING);
/* Open the database log for log_write_low */
mtr->start_lsn = log_reserve_and_open(n_pages * (UNIV_PAGE_SIZE + 50));
memo = &(mtr->memo);
offset = dyn_array_get_data_size(memo);
i = 0;
while (offset > 0) {
offset -= sizeof(mtr_memo_slot_t);
slot = dyn_array_get_element(memo, offset);
block = slot->object;
type = slot->type;
if ((block != NULL) && (type == MTR_MEMO_PAGE_X_FIX)) {
mtr_log_write_full_page(block->frame, i, n_pages, mtr);
i++;
}
}
ut_ad(i == n_pages);
}
/****************************************************************
Checks if mtr is the first to modify any page after online_backup_lsn. */
static
ibool
mtr_first_to_modify_page_after_backup(
/*==================================*/
/* out: TRUE if first for a page */
mtr_t* mtr, /* in: mini-transaction */
ulint* n_pages) /* out: number of modified pages (all modified
pages, backup_lsn does not matter here) */
{
mtr_memo_slot_t* slot;
dyn_array_t* memo;
ulint offset;
buf_block_t* block;
ulint type;
dulint backup_lsn;
ibool ret = FALSE;
ut_ad(mtr);
ut_ad(mtr->magic_n == MTR_MAGIC_N);
ut_ad(mtr->state == MTR_COMMITTING);
backup_lsn = log_get_online_backup_lsn_low();
memo = &(mtr->memo);
offset = dyn_array_get_data_size(memo);
*n_pages = 0;
while (offset > 0) {
offset -= sizeof(mtr_memo_slot_t);
slot = dyn_array_get_element(memo, offset);
block = slot->object;
type = slot->type;
if ((block != NULL) && (type == MTR_MEMO_PAGE_X_FIX)) {
*n_pages = *n_pages + 1;
if (ut_dulint_cmp(buf_frame_get_newest_modification(
block->frame),
backup_lsn) <= 0) {
fprintf(stderr,
"Page %lu newest %lu backup %lu\n",
block->offset,
ut_dulint_get_low(
buf_frame_get_newest_modification(
block->frame)),
ut_dulint_get_low(backup_lsn));
ret = TRUE;
}
}
}
return(ret);
}
/**************************************************************** /****************************************************************
Writes the contents of a mini-transaction log, if any, to the database log. */ Writes the contents of a mini-transaction log, if any, to the database log. */
static static
...@@ -291,7 +118,6 @@ mtr_log_reserve_and_write( ...@@ -291,7 +118,6 @@ mtr_log_reserve_and_write(
ulint data_size; ulint data_size;
ibool success; ibool success;
byte* first_data; byte* first_data;
ulint n_modified_pages;
ut_ad(mtr); ut_ad(mtr);
...@@ -322,27 +148,12 @@ mtr_log_reserve_and_write( ...@@ -322,27 +148,12 @@ mtr_log_reserve_and_write(
if (mtr->log_mode == MTR_LOG_ALL) { if (mtr->log_mode == MTR_LOG_ALL) {
if (log_get_online_backup_state_low() block = mlog;
&& mtr_first_to_modify_page_after_backup(mtr,
&n_modified_pages)) {
/* The database is in the online backup state: write
to the log the full contents of all the pages if this
mtr is the first to modify any page in the buffer pool
after online_backup_lsn */
log_close();
log_release();
mtr_log_write_backup_full_pages(mtr, n_modified_pages);
} else {
block = mlog;
while (block != NULL) { while (block != NULL) {
log_write_low(dyn_block_get_data(block), log_write_low(dyn_block_get_data(block),
dyn_block_get_used(block)); dyn_block_get_used(block));
block = dyn_array_get_next_block(mlog, block); block = dyn_array_get_next_block(mlog, block);
}
} }
} else { } else {
ut_ad(mtr->log_mode == MTR_LOG_NONE); ut_ad(mtr->log_mode == MTR_LOG_NONE);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment