From ca3bc54428b67e42258e64b37809f150295b4de4 Mon Sep 17 00:00:00 2001 From: Alex Sharov Date: Thu, 29 Dec 2022 14:47:17 +0700 Subject: [PATCH] Shared genesis db (#6465) --- core/genesis.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/core/genesis.go b/core/genesis.go index 1c12fa006..918aa3e56 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -26,6 +26,7 @@ import ( "errors" "fmt" "math/big" + "os" "sync" "github.com/c2h5oh/datasize" @@ -90,6 +91,14 @@ type AuthorityRoundSeal struct { Signature common.Hash `json:"signature"` } +var genesisTmpDB kv.RwDB +var genesisDBLock *sync.Mutex + +func init() { + genesisTmpDB = mdbx.NewMDBX(log.New()).InMem(os.TempDir()).MapSize(2 * datasize.GB).PageSize(2 * 4096).WriteMergeThreshold(2 * 8192).MustOpen() + genesisDBLock = &sync.Mutex{} +} + func (ga *GenesisAlloc) UnmarshalJSON(data []byte) error { m := make(map[common.UnprefixedAddress]GenesisAccount) if err := json.Unmarshal(data, &m); err != nil { @@ -370,9 +379,9 @@ func (g *Genesis) ToBlock() (*types.Block, *state.IntraBlockState, error) { go func() { // we may run inside write tx, can't open 2nd write tx in same goroutine // TODO(yperbasis): use memdb.MemoryMutation instead defer wg.Done() - tmpDB := mdbx.NewMDBX(log.New()).InMem("").MapSize(2 * datasize.GB).MustOpen() - defer tmpDB.Close() - tx, err := tmpDB.BeginRw(context.Background()) + genesisDBLock.Lock() + defer genesisDBLock.Unlock() + tx, err := genesisTmpDB.BeginRw(context.Background()) if err != nil { panic(err) }