Skip to content

Commit e2d4555

Browse files
authored
fix(rawdb): correct MemoryFreezer AncientSize by decrementing size on truncation
1 parent da3822d commit e2d4555

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

core/rawdb/freezer_memory.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,18 @@ func (t *memoryTable) truncateHead(items uint64) error {
9191
if items < t.offset {
9292
return errors.New("truncation below tail")
9393
}
94-
t.data = t.data[:items-t.offset]
94+
removeFrom := items - t.offset
95+
var removed uint64
96+
for i := removeFrom; i < uint64(len(t.data)); i++ {
97+
removed += uint64(len(t.data[i]))
98+
}
99+
t.data = t.data[:removeFrom]
95100
t.items = items
101+
if removed >= t.size {
102+
t.size = 0
103+
} else {
104+
t.size -= removed
105+
}
96106
return nil
97107
}
98108

@@ -108,8 +118,25 @@ func (t *memoryTable) truncateTail(items uint64) error {
108118
if t.items < items {
109119
return errors.New("truncation above head")
110120
}
111-
t.data = t.data[items-t.offset:]
121+
drop := items - t.offset
122+
var removed uint64
123+
for i := uint64(0); i < drop; i++ {
124+
removed += uint64(len(t.data[i]))
125+
}
126+
newLen := uint64(len(t.data)) - drop
127+
if newLen == 0 {
128+
t.data = nil
129+
} else {
130+
newData := make([][]byte, newLen)
131+
copy(newData, t.data[drop:])
132+
t.data = newData
133+
}
112134
t.offset = items
135+
if removed >= t.size {
136+
t.size = 0
137+
} else {
138+
t.size -= removed
139+
}
113140
return nil
114141
}
115142

0 commit comments

Comments
 (0)