From aa58f7802c74e9fa0ceef1d7318b66a2094141e5 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Thu, 1 Apr 2010 15:23:04 +0400 Subject: [PATCH] Applying InnoDB snapshot Detailed revision comments: r6467 | inaam | 2010-01-14 20:46:00 +0200 (Thu, 14 Jan 2010) | 10 lines branches/zip rb://226 log_sys->written_to_all_lsn does not accurately represent the LSN upto which write and flush has taken place. Under a race condition it can fall behind log_sys->flushed_to_disk_lsn which is accurate. Besides written_to_all_lsn is redundant as currently InnoDB supports only one log group. Approved by: Heikki --- storage/innodb_plugin/include/log0log.h | 12 +++++++++++- storage/innodb_plugin/log/log0log.c | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/storage/innodb_plugin/include/log0log.h b/storage/innodb_plugin/include/log0log.h index 135aeb69e2d..233714eb63a 100644 --- a/storage/innodb_plugin/include/log0log.h +++ b/storage/innodb_plugin/include/log0log.h @@ -825,7 +825,17 @@ struct log_struct{ written to some log group; for this to be advanced, it is enough that the write i/o has been completed for all - log groups */ + log groups. + Note that since InnoDB currently + has only one log group therefore + this value is redundant. Also it + is possible that this value + falls behind the + flushed_to_disk_lsn transiently. + It is appropriate to use either + flushed_to_disk_lsn or + write_lsn which are always + up-to-date and accurate. */ ib_uint64_t write_lsn; /*!< end lsn for the current running write */ ulint write_end_offset;/*!< the data in buffer has diff --git a/storage/innodb_plugin/log/log0log.c b/storage/innodb_plugin/log/log0log.c index 86c9f9b4130..063581055e9 100644 --- a/storage/innodb_plugin/log/log0log.c +++ b/storage/innodb_plugin/log/log0log.c @@ -2013,7 +2013,7 @@ log_checkpoint( return(TRUE); } - ut_ad(log_sys->written_to_all_lsn >= oldest_lsn); + ut_ad(log_sys->flushed_to_disk_lsn >= oldest_lsn); if (log_sys->n_pending_checkpoint_writes > 0) { /* A checkpoint write is running */