functional and tested setTrieFlushIntervalClone plugin

This commit is contained in:
philip-morlier 2023-02-19 19:00:40 -08:00
parent bff86afa0c
commit 0186a12412
2 changed files with 27 additions and 0 deletions

View File

@ -1366,6 +1366,11 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.
chosen := current - TriesInMemory
flushInterval := time.Duration(atomic.LoadInt64(&bc.flushInterval))
// If we exceeded time allowance, flush an entire trie to disk
// begin PluGeth code injection
flushInterval = pluginSetTrieFlushIntervalClone(flushInterval)
// end PluGeth code injection
if bc.gcproc > flushInterval {
// If the header is missing (canonical chain behind), we're reorging a low
// diff sidechain. Suspend committing until this operation is completed.

View File

@ -4,6 +4,7 @@ import (
"encoding/json"
"math/big"
"reflect"
"time"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/state"
@ -296,3 +297,24 @@ func pluginGetBlockTracer(hash common.Hash, statedb *state.StateDB) (*metaTracer
}
return PluginGetBlockTracer(plugins.DefaultPluginLoader, hash, statedb)
}
func PluginSetTrieFlushIntervalClone(pl *plugins.PluginLoader, flushInterval time.Duration) time.Duration {
fnList := pl.Lookup("SetTrieFlushIntervalClone", func(item interface{}) bool{
_, ok := item.(func(time.Duration) time.Duration)
return ok
})
for _, fni := range fnList {
log.Error("len fn list", "len", len(fnList))
if fn, ok := fni.(func(time.Duration) time.Duration); ok {
return fn(flushInterval)
}
}
return flushInterval
}
func pluginSetTrieFlushIntervalClone(flushInterval time.Duration) time.Duration {
if plugins.DefaultPluginLoader == nil {
log.Warn("Attempting setTreiFlushIntervalClone, but default PluginLoader has not been initialized")
}
return PluginSetTrieFlushIntervalClone(plugins.DefaultPluginLoader, flushInterval)
}