diff --git a/src/box/box.cc b/src/box/box.cc index bca73ed9a5782c37cd478035022876935a9a435a..08264608e009e166dc43120956ef0968435219ba 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -242,7 +242,7 @@ box_leave_local_standby_mode(void *data __attribute__((unused))) /* * notify engines about end of recovery. */ - engine_end_recover(); + engine_end_recovery(); stat_cleanup(stat_base, IPROTO_TYPE_STAT_MAX); box_set_wal_mode(cfg_gets("wal_mode")); diff --git a/src/box/engine.cc b/src/box/engine.cc index 793bbc92d6ae3b0ca1f215768154bef10f4fc4f5..8d3c945825316491031ba32e1734c5316b72cc9e 100644 --- a/src/box/engine.cc +++ b/src/box/engine.cc @@ -56,9 +56,6 @@ void EngineFactory::commit(struct txn*) void EngineFactory::rollback(struct txn*) {} -void EngineFactory::recoveryEvent(enum engine_recovery_event) -{} - Engine::Engine(EngineFactory *f) :factory(f) { @@ -101,7 +98,7 @@ engine_begin_recover_snapshot(int64_t snapshot_lsn) /* recover engine snapshot */ EngineFactory *f; engine_foreach(f) { - f->set_snapshot_lsn(snapshot_lsn); + f->begin_recover_snapshot(snapshot_lsn); } } @@ -127,13 +124,13 @@ engine_end_recover_snapshot() */ EngineFactory *f; engine_foreach(f) { - f->recoveryEvent(END_RECOVERY_SNAPSHOT); + f->end_recover_snapshot(); } space_foreach(do_one_recover_step, NULL); } void -engine_end_recover() +engine_end_recovery() { /* * For all new spaces created after recovery is complete, @@ -141,7 +138,7 @@ engine_end_recover() */ EngineFactory *f; engine_foreach(f) { - f->recoveryEvent(END_RECOVERY); + f->end_recovery(); } space_foreach(do_one_recover_step, NULL); } diff --git a/src/box/engine.h b/src/box/engine.h index 9acddbc38bb05c965044b93b2c9dd72b6b90474b..1f4e4f6e2a5a709ffa15adc9fe8354d600fcb81e 100644 --- a/src/box/engine.h +++ b/src/box/engine.h @@ -66,15 +66,6 @@ enum engine_recovery_state { READY_ALL_KEYS }; -/** - * Engine specific recovery events that represents - * global recovery stage change. - */ -enum engine_recovery_event { - END_RECOVERY_SNAPSHOT, - END_RECOVERY -}; - /** * Engine specific snapshot event. */ @@ -117,8 +108,6 @@ class EngineFactory: public Object { virtual void init(); /** Create a new engine instance for a space. */ virtual Engine *open() = 0; - /* Inform engine about a recovery stage change. */ - virtual void recoveryEvent(enum engine_recovery_event); /** * Check a key definition for violation of * various limits. @@ -139,8 +128,15 @@ class EngineFactory: public Object { virtual void begin(struct txn*, struct space*); virtual void commit(struct txn*); virtual void rollback(struct txn*); - virtual void set_snapshot_lsn(int64_t lsn) = 0; - + /** Recovery */ + virtual void begin_recover_snapshot(int64_t snapshot_lsn) = 0; + /* Inform engine about a recovery stage change. */ + virtual void end_recover_snapshot() = 0; + /** + * Inform the engine about the global recovery + * state change (end of recovery from the binary log). + */ + virtual void end_recovery() = 0; /** * Engine snapshotting support. */ @@ -239,6 +235,6 @@ engine_end_recover_snapshot(); * Build secondary keys in all spaces. */ void -engine_end_recover(); +engine_end_recovery(); #endif /* TARANTOOL_BOX_ENGINE_H_INCLUDED */ diff --git a/src/box/memtx_engine.cc b/src/box/memtx_engine.cc index c2447e0026c0a0f919532e5024a46f38d06c4616..69600f03df23230c4fcd3cb3a54db8d4e170e430 100644 --- a/src/box/memtx_engine.cc +++ b/src/box/memtx_engine.cc @@ -80,16 +80,15 @@ MemtxFactory::MemtxFactory() } void -MemtxFactory::recoveryEvent(enum engine_recovery_event event) +MemtxFactory::end_recover_snapshot() { - switch (event) { - case END_RECOVERY_SNAPSHOT: - recovery.recover = space_build_primary_key; - break; - case END_RECOVERY: - recovery.recover = space_build_all_keys; - break; - } + recovery.recover = space_build_primary_key; +} + +void +MemtxFactory::end_recovery() +{ + recovery.recover = space_build_all_keys; } Engine *MemtxFactory::open() @@ -214,7 +213,7 @@ MemtxFactory::rollback(struct txn *txn) /** Called at start to tell memtx to recover to a given LSN. */ void -MemtxFactory::set_snapshot_lsn(int64_t /* lsn */) +MemtxFactory::begin_recover_snapshot(int64_t /* lsn */) { /* * memtx snapshotting supported directly by box. diff --git a/src/box/memtx_engine.h b/src/box/memtx_engine.h index 0d9fb3b5d3863548466e8d9ca050572aede32eb7..8a981305defac3f1b9c7d31bf688b114240e01e3 100644 --- a/src/box/memtx_engine.h +++ b/src/box/memtx_engine.h @@ -36,9 +36,10 @@ struct MemtxFactory: public EngineFactory { virtual Index *createIndex(struct key_def *key_def); virtual void dropIndex(Index *index); virtual void keydefCheck(struct key_def *key_def); - virtual void recoveryEvent(enum engine_recovery_event event); virtual void rollback(struct txn*); - virtual void set_snapshot_lsn(int64_t lsn); + virtual void begin_recover_snapshot(int64_t lsn); + virtual void end_recover_snapshot(); + virtual void end_recovery(); virtual void snapshot(enum engine_snapshot_event, int64_t); }; diff --git a/src/box/sophia_engine.cc b/src/box/sophia_engine.cc index 79f8a1cba2d35ccedbe7a7de1b2a522521e06b2b..a5f4bc78749b17e75394a795c34111a1aeeb2d8e 100644 --- a/src/box/sophia_engine.cc +++ b/src/box/sophia_engine.cc @@ -145,23 +145,23 @@ SophiaFactory::open() } void -SophiaFactory::recoveryEvent(enum engine_recovery_event event) +SophiaFactory::end_recover_snapshot() { - switch (event) { - case END_RECOVERY_SNAPSHOT: - recovery.replace = sophia_replace_recover; - recovery.recover = sophia_recovery_end_snapshot; - break; - case END_RECOVERY: - /* complete two-phase recovery */ - int rc = sp_open(env); - if (rc == -1) - sophia_raise(env); - recovery.state = READY_NO_KEYS; - recovery.replace = sophia_replace; - recovery.recover = space_noop; - break; - } + recovery.replace = sophia_replace_recover; + recovery.recover = sophia_recovery_end_snapshot; +} + + +void +SophiaFactory::end_recovery() +{ + /* complete two-phase recovery */ + int rc = sp_open(env); + if (rc == -1) + sophia_raise(env); + recovery.state = READY_NO_KEYS; + recovery.replace = sophia_replace; + recovery.recover = space_noop; } Index* @@ -392,7 +392,7 @@ sophia_snapshot_delete(void *env, int64_t lsn) } void -SophiaFactory::set_snapshot_lsn(int64_t lsn) +SophiaFactory::begin_recover_snapshot(int64_t lsn) { sophia_snapshot_recover(env, lsn); } diff --git a/src/box/sophia_engine.h b/src/box/sophia_engine.h index 2b3cac646b9f957dcee860b31d68850fb9b0a70a..3b287829ac2bd06ff05e1e3a6c231bb2a2c54776 100644 --- a/src/box/sophia_engine.h +++ b/src/box/sophia_engine.h @@ -39,8 +39,9 @@ struct SophiaFactory: public EngineFactory { virtual void begin(struct txn*, struct space*); virtual void commit(struct txn*); virtual void rollback(struct txn*); - virtual void recoveryEvent(enum engine_recovery_event); - virtual void set_snapshot_lsn(int64_t); + virtual void begin_recover_snapshot(int64_t); + virtual void end_recover_snapshot(); + virtual void end_recovery(); virtual void snapshot(enum engine_snapshot_event, int64_t); void *env; void *tx;