OSDN Git Service

Mov late node sync test (#529)
authorPoseidon <shenao.78@163.com>
Thu, 2 Apr 2020 11:57:32 +0000 (19:57 +0800)
committerGitHub <noreply@github.com>
Thu, 2 Apr 2020 11:57:32 +0000 (19:57 +0800)
* 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
application/mov/mov_core.go

index bbceaec..c45b46f 100644 (file)
@@ -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 {
index 76154dc..4a08cf5 100644 (file)
@@ -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