diff --git a/chain/taskreplay.go b/chain/taskreplay.go index 52a9a4ffb..04da27aa8 100644 --- a/chain/taskreplay.go +++ b/chain/taskreplay.go @@ -133,7 +133,7 @@ func (t *taskReplay) doReplay() error { } ptxs := nblk.PatchTransactions() if len(ptxs.Hash()) > 0 { - tr = sm.PatchTransition(tr, ptxs, nblk) + tr = service.PatchTransition(tr, ptxs, nblk, true) } cb := make(chan error, 2) cancel, err := tr.Execute(transitionCallback(cb)) diff --git a/service/manager.go b/service/manager.go index f2b10c537..bc1980c9c 100644 --- a/service/manager.go +++ b/service/manager.go @@ -288,7 +288,7 @@ func (m *manager) PatchTransition(t module.Transition, patchTxList module.Transa // If there is no way to validate patches, then set 'alreadyValidated' to // true. It'll skip unnecessary validation for already validated normal // transactions. - return patchTransition(pt, bi, patchTxList) + return patchTransition(pt, patchTxList, bi, false) } func (m *manager) CreateSyncTransition(t module.Transition, result []byte, vlHash []byte, noBuffer bool) module.Transition { diff --git a/service/transition.go b/service/transition.go index e43566c51..036d188c2 100644 --- a/service/transition.go +++ b/service/transition.go @@ -157,13 +157,19 @@ type transition struct { dsrTracker DSRTracker } -func patchTransition(t *transition, bi module.BlockInfo, patchTXs module.TransactionList) *transition { +func patchTransition(t *transition, patchTXs module.TransactionList, bi module.BlockInfo, validated bool) *transition { if patchTXs == nil { patchTXs = transaction.NewTransactionListFromSlice(t.db, nil) } if len(patchTXs.Hash()) == 0 { bi = nil } + var step transitionStep + if validated { + step = stepValidated + } else { + step = stepInited + } return &transition{ parent: t.parent, pid: t.pid, @@ -176,7 +182,7 @@ func patchTransition(t *transition, bi module.BlockInfo, patchTXs module.Transac transitionContext: t.transitionContext, ntxIDs: t.ntxIDs, ntxCount: t.ntxCount, - step: stepInited, + step: step, } } @@ -902,23 +908,29 @@ func (t *transition) executeTxs(l module.TransactionList, ctx contract.Context, func (t *transition) finalizeNormalTransaction() error { startTS := time.Now(); + defer func() { + t.txFlushDuration = time.Since(startTS) + }() + if err := t.normalTransactions.Flush(); err != nil { + return err + } if err := t.commitTXIDs(module.TransactionGroupNormal); err != nil { return err } if err := t.commitDSRs(); err != nil { return err } - defer func() { - t.txFlushDuration = time.Since(startTS) - }() - return t.normalTransactions.Flush() + return nil } func (t *transition) finalizePatchTransaction() error { + if err := t.patchTransactions.Flush(); err != nil { + return err + } if err := t.commitTXIDs(module.TransactionGroupPatch); err != nil { return err } - return t.patchTransactions.Flush() + return nil } func (t *transition) finalizeResult(noFlush bool, keepParent bool) error { @@ -1108,8 +1120,9 @@ func NewSyncTransition( func PatchTransition( tr module.Transition, - bi module.BlockInfo, ptxs module.TransactionList, + bi module.BlockInfo, + validated bool, ) module.Transition { - return patchTransition(tr.(*transition), bi, ptxs) + return patchTransition(tr.(*transition), ptxs, bi, validated) } diff --git a/testsuite/build.gradle b/testsuite/build.gradle index 103442947..e81d21242 100644 --- a/testsuite/build.gradle +++ b/testsuite/build.gradle @@ -95,6 +95,7 @@ class ChainTest extends Test { } void startDocker(String serverPort) { + def glTag = System.getProperty("GL_TAG", "latest") List commands = new LinkedList() commands.add("docker") commands.add("run") @@ -107,7 +108,7 @@ class ChainTest extends Test { commands.add("data/dockerenv/" + dockerEnv) commands.add("--name") commands.add("gochain-" + dockerEnv) - commands.add("goloop/gochain") + commands.add("goloop/gochain:${glTag}") process = commands.execute(null, getWorkingDir()) if (process.waitFor() == 0) { Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {