From 17f4bcc8867173431177e8e3372ada9ad68b208c Mon Sep 17 00:00:00 2001 From: Poseidon Date: Thu, 2 Apr 2020 19:57:32 +0800 Subject: [PATCH] Mov late node sync test (#529) * mov late node sync test * add new testcase * bug fix * bug fix * fix ci * bug fix * fix mov apply block * opt code for clean mov store * use iterator replace to iteratorPrefix --- application/mov/database/mov_store.go | 14 ++++++++++++++ application/mov/mov_core.go | 12 +++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/application/mov/database/mov_store.go b/application/mov/database/mov_store.go index bbceaeca..c45b46f7 100644 --- a/application/mov/database/mov_store.go +++ b/application/mov/database/mov_store.go @@ -17,6 +17,7 @@ var ErrNotInitDBState = errors.New("database state of mov store is not initializ // MovStore is the interface for mov's persistent storage type MovStore interface { + Clear() GetMovDatabaseState() (*common.MovDatabaseState, error) InitDBState(height uint64, hash *bc.Hash) error ListOrders(orderAfter *common.Order) ([]*common.Order, error) @@ -92,6 +93,19 @@ func NewLevelDBMovStore(db dbm.DB) *LevelDBMovStore { return &LevelDBMovStore{db: db} } +// Clear will clear all the data of store +func (m *LevelDBMovStore) Clear() { + batch := m.db.NewBatch() + + iter := m.db.Iterator() + defer iter.Release() + + for iter.Next() { + batch.Delete(iter.Key()) + } + batch.Write() +} + // GetMovDatabaseState return the current DB's image status func (m *LevelDBMovStore) GetMovDatabaseState() (*common.MovDatabaseState, error) { if value := m.db.Get(bestMatchStore); value != nil { diff --git a/application/mov/mov_core.go b/application/mov/mov_core.go index 76154dcd..4a08cf5a 100644 --- a/application/mov/mov_core.go +++ b/application/mov/mov_core.go @@ -53,10 +53,15 @@ func NewCoreWithDB(store *database.LevelDBMovStore, startBlockHeight uint64) *Co // ApplyBlock parse pending order and cancel from the the transactions of block // and add pending order to the dex db, remove cancel order from dex db. func (m *Core) ApplyBlock(block *types.Block) error { - if block.Height <= m.startBlockHeight { + if block.Height < m.startBlockHeight { return nil } + if block.Height == m.startBlockHeight { + blockHash := block.Hash() + return m.InitChainStatus(&blockHash) + } + if err := m.validateMatchedTxSequence(block.Transactions); err != nil { return err } @@ -113,6 +118,11 @@ func (m *Core) DetachBlock(block *types.Block) error { return nil } + if block.Height == m.startBlockHeight { + m.movStore.Clear() + return nil + } + deleteOrders, addOrders, err := decodeTxsOrders(block.Transactions) if err != nil { return err -- 2.11.0