Skip to content

Commit 4a2d82b

Browse files
authored
Lower memory consumption for integration tests. (#334)
1 parent 2494188 commit 4a2d82b

File tree

13 files changed

+56
-14
lines changed

13 files changed

+56
-14
lines changed

cmd/sonicd/app/launcher.go

+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ func initFlags() {
6666
flags.CacheFlag,
6767
flags.LiveDbCacheFlag,
6868
flags.ArchiveCacheFlag,
69+
flags.StateDbCacheCapacityFlag,
6970
}
7071
networkingFlags = []cli.Flag{
7172
flags.BootnodesFlag,

cmd/sonicd/app/run_test.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ func tmpdir(t *testing.T) string {
2323
}
2424

2525
func initFakenetDatadir(dataDir string, validatorsNum idx.Validator) {
26-
genesisStore := makefakegenesis.FakeGenesisStore(validatorsNum, futils.ToFtm(1000000000), futils.ToFtm(5000000))
26+
genesisStore := makefakegenesis.FakeGenesisStore(
27+
validatorsNum,
28+
futils.ToFtm(1000000000),
29+
futils.ToFtm(5000000),
30+
)
2731
defer genesisStore.Close()
2832

2933
if err := genesis.ImportGenesisStore(genesis.ImportParams{

cmd/sonictool/app/genesis.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ func jsonGenesisImport(ctx *cli.Context) error {
100100
if err != nil {
101101
return fmt.Errorf("failed to load JSON genesis: %w", err)
102102
}
103+
103104
genesisStore, err := makefakegenesis.ApplyGenesisJson(genesisJson)
104105
if err != nil {
105106
return fmt.Errorf("failed to prepare JSON genesis: %w", err)
@@ -139,7 +140,11 @@ func fakeGenesisImport(ctx *cli.Context) error {
139140
return err
140141
}
141142

142-
genesisStore := makefakegenesis.FakeGenesisStore(idx.Validator(validatorsNumber), futils.ToFtm(1000000000), futils.ToFtm(5000000))
143+
genesisStore := makefakegenesis.FakeGenesisStore(
144+
idx.Validator(validatorsNumber),
145+
futils.ToFtm(1000000000),
146+
futils.ToFtm(5000000),
147+
)
143148
defer genesisStore.Close()
144149
return genesis.ImportGenesisStore(genesis.ImportParams{
145150
GenesisStore: genesisStore,

cmd/sonictool/app/main.go

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ func Run() error {
2020
flags.CacheFlag,
2121
flags.LiveDbCacheFlag,
2222
flags.ArchiveCacheFlag,
23+
flags.StateDbCacheCapacityFlag,
2324
}
2425
app.Commands = []cli.Command{
2526
{

config/config.go

+4
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,10 @@ func MakeAllConfigsFromFile(ctx *cli.Context, configFile string) (*Config, error
341341
cfg.Lachesis.SuppressFramePanic = true
342342
}
343343

344+
if ctx.IsSet(flags.StateDbCacheCapacityFlag.Name) {
345+
cfg.OperaStore.EVM.Cache.StateDbCapacity = ctx.GlobalInt(flags.StateDbCacheCapacityFlag.Name)
346+
}
347+
344348
return &cfg, nil
345349
}
346350

config/flags/flags.go

+7
Original file line numberDiff line numberDiff line change
@@ -365,4 +365,11 @@ var (
365365
"Setting this value to <=2000 will result in pre-confugired cache capacity of 2KB", CacheFlag.Name),
366366
Value: 0,
367367
}
368+
StateDbCacheCapacityFlag = cli.IntFlag{
369+
Name: "statedb.cache",
370+
Usage: "The number of cached data elements by each StateDb instance. Since this is an experimental feature " +
371+
"used mainly by tests it is generally recommended leaving this blank. In tests no value lower than 1024 " +
372+
"is recommended. Setting this to <1 will automatically set the cache capacity to a DB defined default value.",
373+
Value: 0,
374+
}
368375
)

gossip/common_test.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,14 @@ func newTestEnv(firstEpoch idx.Epoch, validatorsNum idx.Validator, tb testing.TB
143143
rules.Blocks.MaxEmptyBlockSkipPeriod = 0
144144
rules.Emitter.Interval = 0
145145

146-
genStore := makefakegenesis.FakeGenesisStoreWithRulesAndStart(validatorsNum, utils.ToFtm(genesisBalance), utils.ToFtm(genesisStake), rules, firstEpoch, 2)
146+
genStore := makefakegenesis.FakeGenesisStoreWithRulesAndStart(
147+
validatorsNum,
148+
utils.ToFtm(genesisBalance),
149+
utils.ToFtm(genesisStake),
150+
rules,
151+
firstEpoch,
152+
2,
153+
)
147154
genesis := genStore.Genesis()
148155

149156
store, err := NewMemStore(tb)

gossip/evmstore/config.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ type (
1919
EvmBlocksNum int
2020
// Cache size for EvmBlock (size in bytes).
2121
EvmBlocksSize uint
22+
// Cache size for StateDb instances (0 for DB-selected default)
23+
StateDbCapacity int
2224
}
2325
// StoreConfig is a config for store db.
2426
StoreConfig struct {
@@ -38,11 +40,11 @@ type (
3840
func DefaultStoreConfig(scale cachescale.Func) StoreConfig {
3941
return StoreConfig{
4042
Cache: StoreCacheConfig{
41-
ReceiptsSize: scale.U(4 * opt.MiB),
42-
ReceiptsBlocks: scale.I(4000),
43-
TxPositions: scale.I(20000),
44-
EvmBlocksNum: scale.I(5000),
45-
EvmBlocksSize: scale.U(6 * opt.MiB),
43+
ReceiptsSize: scale.U(4 * opt.MiB),
44+
ReceiptsBlocks: scale.I(4000),
45+
TxPositions: scale.I(20000),
46+
EvmBlocksNum: scale.I(5000),
47+
EvmBlocksSize: scale.U(6 * opt.MiB),
4648
},
4749
StateDb: carmen.Parameters{
4850
Variant: "go-file",

gossip/evmstore/store.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func (s *Store) Open() error {
7878
if err != nil {
7979
return fmt.Errorf("failed to create carmen state; %s", err)
8080
}
81-
s.liveStateDb = carmen.CreateStateDBUsing(s.carmenState)
81+
s.liveStateDb = carmen.CreateCustomStateDBUsing(s.carmenState, s.cfg.Cache.StateDbCapacity)
8282
return nil
8383
}
8484

gossip/handler_fuzz.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@ func makeFuzzedHandler() (h *handler, err error) {
6868
genesisStake = 2 * 4e6
6969
)
7070

71-
genStore := makefakegenesis.FakeGenesisStore(genesisStakers, utils.ToFtm(genesisBalance), utils.ToFtm(genesisStake))
71+
genStore := makefakegenesis.FakeGenesisStore(
72+
genesisStakers,
73+
utils.ToFtm(genesisBalance),
74+
utils.ToFtm(genesisStake),
75+
)
7276
genesis := genStore.Genesis()
7377

7478
config := DefaultConfig(cachescale.Identity)

integration/makefakegenesis/genesis.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,13 @@ func FakeGenesisStoreWithRules(num idx.Validator, balance, stake *big.Int, rules
5050
return FakeGenesisStoreWithRulesAndStart(num, balance, stake, rules, 2, 1)
5151
}
5252

53-
func FakeGenesisStoreWithRulesAndStart(num idx.Validator, balance, stake *big.Int, rules opera.Rules, epoch idx.Epoch, block idx.Block) *genesisstore.Store {
53+
func FakeGenesisStoreWithRulesAndStart(
54+
num idx.Validator,
55+
balance, stake *big.Int,
56+
rules opera.Rules,
57+
epoch idx.Epoch,
58+
block idx.Block,
59+
) *genesisstore.Store {
5460
builder := makegenesis.NewGenesisBuilder()
5561

5662
validators := GetFakeValidators(num)

integration/makegenesis/genesis.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,8 @@ func NewGenesisBuilder() *GenesisBuilder {
128128
if err != nil {
129129
panic(fmt.Errorf("failed to create carmen state; %s", err))
130130
}
131-
carmenStateDb := carmen.CreateStateDBUsing(carmenState)
131+
// Set cache size to lowest value possible
132+
carmenStateDb := carmen.CreateCustomStateDBUsing(carmenState, 1024)
132133
tmpStateDB := evmstore.CreateCarmenStateDb(carmenStateDb)
133134
return &GenesisBuilder{
134135
tmpStateDB: tmpStateDB,

tests/integration_test_net.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -201,15 +201,14 @@ func startIntegrationTestNet(directory string, args []string) (*IntegrationTestN
201201
"--datadir", result.stateDir(),
202202
"--statedb.livecache", "1",
203203
"--statedb.archivecache", "1",
204+
"--statedb.cache", "1024",
204205
}, args...)
205206
if err := sonictool.Run(); err != nil {
206207
os.Args = originalArgs
207208
return nil, fmt.Errorf("failed to initialize the test network: %w", err)
208209
}
209210
os.Args = originalArgs
210211

211-
os.Args = originalArgs
212-
213212
if err := result.start(); err != nil {
214213
return nil, fmt.Errorf("failed to start the test network: %w", err)
215214
}
@@ -274,6 +273,7 @@ func (n *IntegrationTestNet) start() error {
274273
// database memory usage options
275274
"--statedb.livecache", "1",
276275
"--statedb.archivecache", "1",
276+
"--statedb.cache", "1024",
277277
}
278278

279279
err := sonicd.Run()

0 commit comments

Comments
 (0)