-
Notifications
You must be signed in to change notification settings - Fork 4
/
clean_by_height_storage.go
63 lines (51 loc) · 1.5 KB
/
clean_by_height_storage.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
package cmds
import (
"context"
"github.com/spikeekips/mitum-currency/digest"
"github.com/spikeekips/mitum/base"
mitumcmds "github.com/spikeekips/mitum/launch/cmds"
"github.com/spikeekips/mitum/launch/pm"
)
type CleanByHeightStorageCommand struct {
*mitumcmds.CleanByHeightStorageCommand
*BaseNodeCommand
}
func newCleanByHeightStorageCommand() (CleanByHeightStorageCommand, error) {
co := mitumcmds.NewCleanByHeightStorageCommand()
cmd := CleanByHeightStorageCommand{
CleanByHeightStorageCommand: &co,
BaseNodeCommand: NewBaseNodeCommand(co.Logging),
}
hooks := []pm.Hook{
pm.NewHook(pm.HookPrefixPost, ProcessNameDigestDatabase,
"set_digest_clean_storage_by_height", func(ctx context.Context) (context.Context, error) {
var st *digest.Database
if err := LoadDigestDatabaseContextValue(ctx, &st); err != nil {
return ctx, err
}
return context.WithValue(ctx, mitumcmds.ContextValueCleanDatabaseByHeight,
func(ctx context.Context, h base.Height) error {
return st.CleanByHeight(ctx, h)
}), nil
}),
}
ps, err := cmd.BaseProcesses(co.Processes())
if err != nil {
return cmd, err
}
processes := []pm.Process{
ProcessorDigestDatabase,
}
for i := range processes {
if err := ps.AddProcess(processes[i], false); err != nil {
return CleanByHeightStorageCommand{}, err
}
}
for i := range hooks {
if err := hooks[i].Add(ps); err != nil {
return CleanByHeightStorageCommand{}, err
}
}
_ = cmd.SetProcesses(ps)
return cmd, nil
}