From 811ce92df6765ceb3241a9b67033185437a8362d Mon Sep 17 00:00:00 2001 From: Roman Tsisyk <roman@tsisyk.com> Date: Mon, 18 Apr 2016 18:16:52 +0300 Subject: [PATCH] Remove struct recovery from memtx_engine.cc --- src/box/box.cc | 7 ++++++- src/box/memtx_engine.cc | 16 +++++----------- src/box/memtx_engine.h | 4 +++- src/box/recovery.h | 8 ++++---- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/box/box.cc b/src/box/box.cc index 8befbe5fd2..c09569adac 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -1200,7 +1200,8 @@ engine_init() * so it must be registered first. */ MemtxEngine *memtx = new MemtxEngine(cfg_gets("snap_dir"), - cfg_geti("panic_on_snap_error")); + cfg_geti("panic_on_snap_error"), + cfg_geti("panic_on_wal_error")); engine_register(memtx); SysviewEngine *sysview = new SysviewEngine(); @@ -1344,8 +1345,12 @@ box_init(void) recovery = recovery_new(cfg_gets("wal_dir"), cfg_geti("panic_on_wal_error"), &checkpoint_vclock); + /* Add a surrogate server id for snapshot rows */ + vclock_add_server(&recovery->vclock, 0); /* Tell Sophia engine LSN it must recover to. */ engine_recover_to_checkpoint(lsn); + /* Replace server vclock using the data from snapshot */ + vclock_copy(&recovery->vclock, &checkpoint_vclock); engine_begin_wal_recovery(); } else { /* TODO: don't create recovery for this case */ diff --git a/src/box/memtx_engine.cc b/src/box/memtx_engine.cc index 919adf7299..f53e2ab114 100644 --- a/src/box/memtx_engine.cc +++ b/src/box/memtx_engine.cc @@ -44,7 +44,6 @@ #include "iproto_constants.h" #include "xrow.h" #include "xstream.h" -#include "recovery.h" #include "cluster.h" #include "relay.h" #include "schema.h" @@ -601,11 +600,13 @@ memtx_build_secondary_keys(struct space *space, void *param) handler->replace = memtx_replace_all_keys; } -MemtxEngine::MemtxEngine(const char *snap_dirname, bool panic_on_snap_error) +MemtxEngine::MemtxEngine(const char *snap_dirname, bool panic_on_snap_error, + bool panic_on_wal_error) :Engine("memtx"), m_checkpoint(0), m_state(MEMTX_INITIALIZED), - m_snap_io_rate_limit(UINT64_MAX) + m_snap_io_rate_limit(UINT64_MAX), + m_panic_on_wal_error(panic_on_wal_error) { flags = ENGINE_CAN_BE_TEMPORARY; xdir_create(&m_snap_dir, snap_dirname, SNAP, &SERVER_ID); @@ -662,7 +663,6 @@ MemtxEngine::recoverSnapshotRow(struct xrow_header *row) void MemtxEngine::recoverToCheckpoint(int64_t lsn) { - struct recovery *r = ::recovery; assert(m_state == MEMTX_INITIALIZED); /* * By default, enable fast start: bulk read of tuples @@ -683,9 +683,6 @@ MemtxEngine::recoverToCheckpoint(int64_t lsn) /* Save server UUID */ SERVER_ID = snap->server_uuid; - /* Add a surrogate server id for snapshot rows */ - vclock_add_server(&r->vclock, 0); - say_info("recovering from `%s'", snap->filename); struct xlog_cursor cursor; xlog_cursor_open(&cursor, snap); @@ -713,14 +710,11 @@ MemtxEngine::recoverToCheckpoint(int64_t lsn) if (!cursor.eof_read) panic("snapshot `%s' has no EOF marker", snap->filename); - /* Replace server vclock using the data from snapshot */ - vclock_copy(&r->vclock, &snap->vclock); - if (m_state == MEMTX_READING_SNAPSHOT) { /* End of the fast path: loaded the primary key. */ space_foreach(memtx_end_build_primary_key, this); - if (r->wal_dir.panic_if_error) { + if (m_panic_on_wal_error) { /* * Fast start path: "play out" WAL * records using the primary key only, diff --git a/src/box/memtx_engine.h b/src/box/memtx_engine.h index 3f32eb2f7a..6ca9201794 100644 --- a/src/box/memtx_engine.h +++ b/src/box/memtx_engine.h @@ -44,7 +44,8 @@ enum memtx_recovery_state { extern struct mempool memtx_index_extent_pool; struct MemtxEngine: public Engine { - MemtxEngine(const char *snap_dirname, bool panic_on_snap_error); + MemtxEngine(const char *snap_dirname, bool panic_on_snap_error, + bool panic_on_wal_error); ~MemtxEngine(); virtual Handler *open() override; virtual Index *createIndex(struct key_def *key_def) override; @@ -90,6 +91,7 @@ struct MemtxEngine: public Engine { /** Limit disk usage of checkpointing (bytes per second). */ uint64_t m_snap_io_rate_limit; struct vclock m_last_checkpoint; + bool m_panic_on_wal_error; }; enum { diff --git a/src/box/recovery.h b/src/box/recovery.h index fa4fa3f1a9..61a7b3c598 100644 --- a/src/box/recovery.h +++ b/src/box/recovery.h @@ -89,6 +89,10 @@ recovery_finalize(struct recovery *r, struct xstream *stream, void recovery_fill_lsn(struct recovery *r, struct xrow_header *row); +#if defined(__cplusplus) +} /* extern "C" */ +#endif /* defined(__cplusplus) */ + /** * The write ahead log doesn't store the last checkpoint: * it is represented by the last valid snapshot of memtx engine. @@ -118,8 +122,4 @@ void recover_remaining_wals(struct recovery *r, struct xstream *stream, struct vclock *stop_vclock); -#if defined(__cplusplus) -} /* extern "C" */ -#endif /* defined(__cplusplus) */ - #endif /* TARANTOOL_RECOVERY_H_INCLUDED */ -- GitLab