Skip to content
This repository has been archived by the owner on Apr 4, 2023. It is now read-only.

Commit

Permalink
compact more data
Browse files Browse the repository at this point in the history
  • Loading branch information
patrick-ogrady committed Jan 25, 2022
1 parent 376b435 commit 0159af2
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 21 deletions.
25 changes: 16 additions & 9 deletions chain/storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,19 +57,26 @@ const (
linkedTxLRUSize = 512
)

type PrefixRange struct {
Start []byte
End []byte
}

var (
lastAccepted = []byte("last_accepted")
linkedTxCache = &cache.LRU{Size: linkedTxLRUSize}

// CompactablePrefixes have frequent overwrite/delete operations and should
// be compacted on a regular basis to avoid DB size bloat.
CompactablePrefixes = []byte{
infoPrefix,
keyPrefix,
expiryPrefix,
pruningPrefix,
balancePrefix,
ownedPrefix,
CompactableRanges = []*PrefixRange{
{nil, []byte{blockPrefix, parser.ByteDelimiter}},
{[]byte{blockPrefix, parser.ByteDelimiter}, []byte{txPrefix, parser.ByteDelimiter}},
{[]byte{txPrefix, parser.ByteDelimiter}, []byte{txValuePrefix, parser.ByteDelimiter}},
{[]byte{txValuePrefix, parser.ByteDelimiter}, []byte{infoPrefix, parser.ByteDelimiter}},
{[]byte{infoPrefix, parser.ByteDelimiter}, []byte{keyPrefix, parser.ByteDelimiter}},
{[]byte{keyPrefix, parser.ByteDelimiter}, []byte{expiryPrefix, parser.ByteDelimiter}},
// Group expiry and pruning together
{[]byte{expiryPrefix, parser.ByteDelimiter}, []byte{balancePrefix, parser.ByteDelimiter}},
{[]byte{balancePrefix, parser.ByteDelimiter}, []byte{ownedPrefix, parser.ByteDelimiter}},
{[]byte{ownedPrefix, parser.ByteDelimiter}, nil},
}
)

Expand Down
23 changes: 11 additions & 12 deletions vm/compactor.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ func (vm *VM) compact() {
t := time.NewTimer(vm.config.CompactInterval)
defer t.Stop()

prefixes := chain.CompactablePrefixes
currentPrefix := 0
ranges := chain.CompactableRanges
currentRange := 0

// Ensure there is something to compact
if len(prefixes) == 0 {
if len(ranges) == 0 {
log.Debug("exiting compactor because nothing to compact")
return
}
Expand All @@ -36,17 +36,16 @@ func (vm *VM) compact() {

// Compact next range
start := time.Now()
rangeStart := chain.CompactablePrefixKey(prefixes[currentPrefix])
rangeEnd := chain.CompactablePrefixKey(prefixes[currentPrefix] + 1)
if err := vm.db.Compact(rangeStart, rangeEnd); err != nil {
log.Error("unable to compact prefix range", "start", rangeStart, "stop", rangeEnd)
prefix := ranges[currentRange]
if err := vm.db.Compact(prefix.Start, prefix.End); err != nil {
log.Error("unable to compact prefix range", "start", prefix.Start, "stop", prefix.End)
}
log.Debug("compacted prefix", "start", rangeStart, "stop", rangeEnd, "t", time.Since(start))
log.Debug("compacted prefix", "start", prefix.Start, "stop", prefix.End, "t", time.Since(start))

// Update prefix compaction index
currentPrefix++
if currentPrefix > len(prefixes)-1 {
currentPrefix = 0
// Update range compaction index
currentRange++
if currentRange > len(ranges)-1 {
currentRange = 0
}

t.Reset(vm.config.CompactInterval)
Expand Down

0 comments on commit 0159af2

Please sign in to comment.