-
Notifications
You must be signed in to change notification settings - Fork 199
/
factory.go
126 lines (107 loc) · 3.94 KB
/
factory.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package integrationtests
import (
"github.com/multiversx/mx-chain-core-go/hashing/sha256"
"github.com/multiversx/mx-chain-core-go/marshal"
"github.com/multiversx/mx-chain-go/common"
"github.com/multiversx/mx-chain-go/config"
"github.com/multiversx/mx-chain-go/state"
accountFactory "github.com/multiversx/mx-chain-go/state/factory"
"github.com/multiversx/mx-chain-go/state/storagePruningManager"
"github.com/multiversx/mx-chain-go/state/storagePruningManager/evictionWaitingList"
"github.com/multiversx/mx-chain-go/storage"
"github.com/multiversx/mx-chain-go/storage/database"
"github.com/multiversx/mx-chain-go/storage/factory"
"github.com/multiversx/mx-chain-go/storage/storageunit"
"github.com/multiversx/mx-chain-go/testscommon"
"github.com/multiversx/mx-chain-go/testscommon/enableEpochsHandlerMock"
"github.com/multiversx/mx-chain-go/testscommon/statusHandler"
testcommonStorage "github.com/multiversx/mx-chain-go/testscommon/storage"
"github.com/multiversx/mx-chain-go/trie"
)
// TestMarshalizer -
var TestMarshalizer = &marshal.GogoProtoMarshalizer{}
// TestHasher -
var TestHasher = sha256.NewSha256()
// MaxTrieLevelInMemory -
const MaxTrieLevelInMemory = uint(5)
// CreateMemUnit -
func CreateMemUnit() storage.Storer {
capacity := uint32(10)
shards := uint32(1)
sizeInBytes := uint64(0)
cache, _ := storageunit.NewCache(storageunit.CacheConfig{Type: storageunit.LRUCache, Capacity: capacity, Shards: shards, SizeInBytes: sizeInBytes})
unit, _ := storageunit.NewStorageUnit(cache, database.NewMemDB())
return unit
}
// CreateStorer -
func CreateStorer(parentDir string) storage.Storer {
cacheConfig := storageunit.CacheConfig{
Name: "trie",
Type: "SizeLRU",
SizeInBytes: 314572800, // 300MB
Capacity: 500000,
}
trieCache, err := storageunit.NewCache(cacheConfig)
if err != nil {
return nil
}
dbConfig := config.DBConfig{
FilePath: "trie",
Type: "LvlDBSerial",
BatchDelaySeconds: 2,
MaxBatchSize: 45000,
MaxOpenFiles: 10,
}
dbConfigHandler := factory.NewDBConfigHandler(dbConfig)
persisterFactory, err := factory.NewPersisterFactory(dbConfigHandler)
if err != nil {
return nil
}
triePersister, err := persisterFactory.Create(parentDir)
if err != nil {
return nil
}
trieStorage, err := storageunit.NewStorageUnit(trieCache, triePersister)
if err != nil {
return nil
}
return trieStorage
}
// CreateInMemoryShardAccountsDB -
func CreateInMemoryShardAccountsDB() *state.AccountsDB {
return CreateAccountsDB(CreateMemUnit(), &enableEpochsHandlerMock.EnableEpochsHandlerStub{})
}
// CreateAccountsDB -
func CreateAccountsDB(db storage.Storer, enableEpochs common.EnableEpochsHandler) *state.AccountsDB {
ewlArgs := evictionWaitingList.MemoryEvictionWaitingListArgs{
RootHashesSize: 100,
HashesSize: 10000,
}
ewl, _ := evictionWaitingList.NewMemoryEvictionWaitingList(ewlArgs)
args := testcommonStorage.GetStorageManagerArgs()
args.MainStorer = db
args.Marshalizer = TestMarshalizer
args.Hasher = TestHasher
trieStorage, _ := trie.NewTrieStorageManager(args)
tr, _ := trie.NewTrie(trieStorage, TestMarshalizer, TestHasher, enableEpochs, MaxTrieLevelInMemory)
spm, _ := storagePruningManager.NewStoragePruningManager(ewl, 10)
argsAccCreator := accountFactory.ArgsAccountCreator{
Hasher: TestHasher,
Marshaller: TestMarshalizer,
EnableEpochsHandler: enableEpochs,
}
accCreator, _ := accountFactory.NewAccountCreator(argsAccCreator)
argsAccountsDB := state.ArgsAccountsDB{
Trie: tr,
Hasher: TestHasher,
Marshaller: TestMarshalizer,
AccountFactory: accCreator,
StoragePruningManager: spm,
ProcessingMode: common.Normal,
ProcessStatusHandler: &testscommon.ProcessStatusHandlerStub{},
AppStatusHandler: &statusHandler.AppStatusHandlerStub{},
AddressConverter: &testscommon.PubkeyConverterMock{},
}
adb, _ := state.NewAccountsDB(argsAccountsDB)
return adb
}