core/rawdb: polish

This commit is contained in:
Gary Rong 2026-03-03 11:17:11 +08:00
parent e21a61538a
commit 1cd4b02579
2 changed files with 13 additions and 16 deletions

View file

@ -320,6 +320,9 @@ func (f *Freezer) TruncateTail(tail uint64) (uint64, error) {
} }
} }
f.tail.Store(tail) f.tail.Store(tail)
if f.head.Load() < tail {
f.head.Store(tail)
}
return old, nil return old, nil
} }

View file

@ -822,11 +822,10 @@ func (t *freezerTable) truncateTail(items uint64) error {
shorten := indexEntrySize * int64(newDeleted-deleted) shorten := indexEntrySize * int64(newDeleted-deleted)
if t.metadata.flushOffset <= shorten { if t.metadata.flushOffset <= shorten {
return fmt.Errorf("invalid index flush offset: %d, shorten: %d", t.metadata.flushOffset, shorten) return fmt.Errorf("invalid index flush offset: %d, shorten: %d", t.metadata.flushOffset, shorten)
} else { }
if err := t.metadata.setFlushOffset(t.metadata.flushOffset-shorten, true); err != nil { if err := t.metadata.setFlushOffset(t.metadata.flushOffset-shorten, true); err != nil {
return err return err
} }
}
// Retrieve the new size and update the total size counter // Retrieve the new size and update the total size counter
newSize, err := t.sizeNolock() newSize, err := t.sizeNolock()
if err != nil { if err != nil {
@ -1247,25 +1246,20 @@ func (t *freezerTable) doSync() error {
if t.index == nil || t.head == nil || t.metadata.file == nil { if t.index == nil || t.head == nil || t.metadata.file == nil {
return errClosed return errClosed
} }
var err error if err := t.index.Sync(); err != nil {
trackError := func(e error) { return err
if e != nil && err == nil {
err = e
} }
if err := t.head.Sync(); err != nil {
return err
} }
trackError(t.index.Sync())
trackError(t.head.Sync())
// A crash may occur before the offset is updated, leaving the offset // A crash may occur before the offset is updated, leaving the offset
// points to a old position. If so, the extra items above the offset // points to an old position. If so, the extra items above the offset
// will be truncated during the next run. // will be truncated during the next run.
stat, err := t.index.Stat() stat, err := t.index.Stat()
if err != nil { if err != nil {
return err return err
} }
offset := stat.Size() return t.metadata.setFlushOffset(stat.Size(), true)
trackError(t.metadata.setFlushOffset(offset, true))
return err
} }
func (t *freezerTable) dumpIndexStdout(start, stop int64) { func (t *freezerTable) dumpIndexStdout(start, stop int64) {