mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-26 06:36:43 +00:00
TEST: Fixed race issue in existing test files caused by integration of goroutine. All tests passing
This commit is contained in:
parent
7520990fa6
commit
5bd391008a
2 changed files with 24 additions and 19 deletions
|
|
@ -79,7 +79,6 @@ func NewTracingHooksFromFirehose(tracer *Firehose) *tracing.Hooks {
|
|||
OnBlockEnd: tracer.OnBlockEnd,
|
||||
OnSkippedBlock: tracer.OnSkippedBlock,
|
||||
OnClose: tracer.OnClose,
|
||||
// TODO: OnClose
|
||||
|
||||
OnTxStart: tracer.OnTxStart,
|
||||
OnTxEnd: tracer.OnTxEnd,
|
||||
|
|
@ -193,7 +192,8 @@ type Firehose struct {
|
|||
|
||||
// Worker queuefor blockprinting
|
||||
blockPrintQueue chan *blockPrintJob
|
||||
workerWg sync.WaitGroup
|
||||
flushDone sync.WaitGroup
|
||||
closeOnce sync.Once
|
||||
}
|
||||
|
||||
const FirehoseProtocolVersion = "3.0"
|
||||
|
|
@ -257,12 +257,8 @@ func NewFirehose(config *FirehoseConfig) *Firehose {
|
|||
}
|
||||
}
|
||||
|
||||
// Worker goroutines
|
||||
numWorkers := 1
|
||||
firehose.workerWg.Add(numWorkers)
|
||||
for i := 0; i < numWorkers; i++ {
|
||||
go firehose.blockPrintWorker()
|
||||
}
|
||||
firehose.flushDone.Add(1)
|
||||
go firehose.blockPrintWorker()
|
||||
|
||||
return firehose
|
||||
}
|
||||
|
|
@ -499,13 +495,13 @@ func (f *Firehose) OnBlockEnd(err error) {
|
|||
f.fixOrdinalsForEndOfBlockChanges()
|
||||
}
|
||||
|
||||
f.printBlockToFirehose(f.block, f.blockFinality)
|
||||
//f.ensureInBlockAndNotInTrx()
|
||||
//job := &blockPrintJob{
|
||||
// block: f.block,
|
||||
// finality: f.blockFinality,
|
||||
//}
|
||||
//f.blockPrintQueue <- job
|
||||
f.ensureInBlockAndNotInTrx()
|
||||
// f.printBlockToFirehose(f.block, f.blockFinality)
|
||||
job := &blockPrintJob{
|
||||
block: f.block,
|
||||
finality: f.blockFinality,
|
||||
}
|
||||
f.blockPrintQueue <- job
|
||||
|
||||
} else {
|
||||
// An error occurred, could have happen in transaction/call context, we must not check if in trx/call, only check in block
|
||||
|
|
@ -626,8 +622,7 @@ func (f *Firehose) reorderCallOrdinals(call *pbeth.Call, ordinalBase uint64) (or
|
|||
|
||||
func (f *Firehose) OnClose() {
|
||||
log.Info("Firehose closing: waiting for worker goroutines to finish and shutting down channels")
|
||||
close(f.blockPrintQueue)
|
||||
f.workerWg.Wait()
|
||||
f.CloseBlockPrintQueue()
|
||||
}
|
||||
|
||||
func (f *Firehose) OnSystemCallStart() {
|
||||
|
|
@ -2827,9 +2822,15 @@ type blockPrintJob struct {
|
|||
}
|
||||
|
||||
func (f *Firehose) blockPrintWorker() {
|
||||
defer f.workerWg.Done()
|
||||
|
||||
defer f.flushDone.Done()
|
||||
for job := range f.blockPrintQueue {
|
||||
f.printBlockToFirehose(job.block, job.finality)
|
||||
}
|
||||
}
|
||||
|
||||
func (f *Firehose) CloseBlockPrintQueue() {
|
||||
f.closeOnce.Do(func() {
|
||||
close(f.blockPrintQueue)
|
||||
f.flushDone.Wait()
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ func TestFirehosePrestate(t *testing.T) {
|
|||
|
||||
runPrestateBlock(t, filepath.Join(folder, "prestate.json"), tracingHooks)
|
||||
|
||||
tracer.CloseBlockPrintQueue()
|
||||
|
||||
genesisLine, blockLines, unknownLines := readTracerFirehoseLines(t, tracer)
|
||||
require.Len(t, unknownLines, 0, "Lines:\n%s", strings.Join(slicesMap(unknownLines, func(l unknownLine) string { return "- '" + string(l) + "'" }), "\n"))
|
||||
require.NotNil(t, genesisLine)
|
||||
|
|
@ -203,6 +205,8 @@ func testBlockTracesCorrectly(t *testing.T, genesisSpec *core.Genesis, engine co
|
|||
n, err := chain.InsertChain(blocks)
|
||||
require.NoError(t, err, "failed to insert chain block %d", n)
|
||||
|
||||
tracer.CloseBlockPrintQueue()
|
||||
|
||||
assertBlockEquals(t, tracer, filepath.Join("testdata", goldenDir, string(model)), len(blocks))
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue