-
Notifications
You must be signed in to change notification settings - Fork 199
/
fullHistoryTriePruningStorer.go
57 lines (46 loc) · 1.64 KB
/
fullHistoryTriePruningStorer.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
package pruning
import (
"math"
"github.com/ElrondNetwork/elrond-go/storage"
"github.com/ElrondNetwork/elrond-go/storage/lrucache"
)
type fullHistoryTriePruningStorer struct {
*triePruningStorer
args *StorerArgs
shardId string
oldEpochsActivePersistersCache storage.Cacher
}
// NewFullHistoryTriePruningStorer will return a new instance of PruningStorer without sharded directories' naming scheme
func NewFullHistoryTriePruningStorer(args *FullHistoryStorerArgs) (*fullHistoryTriePruningStorer, error) {
return initFullHistoryTriePruningStorer(args, "")
}
func initFullHistoryTriePruningStorer(args *FullHistoryStorerArgs, shardId string) (*fullHistoryTriePruningStorer, error) {
err := checkArgs(args.StorerArgs)
if err != nil {
return nil, err
}
activePersisters, persistersMapByEpoch, err := initPersistersInEpoch(args.StorerArgs, shardId)
if err != nil {
return nil, err
}
ps, err := initPruningStorer(args.StorerArgs, shardId, activePersisters, persistersMapByEpoch)
if err != nil {
return nil, err
}
tps := &triePruningStorer{ps}
ps.extendPersisterLifeHandler = tps.extendPersisterLife
tps.registerHandler(args.Notifier)
if args.NumOfOldActivePersisters < 1 || args.NumOfOldActivePersisters > math.MaxInt32 {
return nil, storage.ErrInvalidNumberOfOldPersisters
}
fhps := &fullHistoryTriePruningStorer{
triePruningStorer: tps,
args: args.StorerArgs,
shardId: shardId,
}
fhps.oldEpochsActivePersistersCache, err = lrucache.NewCacheWithEviction(int(args.NumOfOldActivePersisters), fhps.onEvicted)
if err != nil {
return nil, err
}
return fhps, nil
}