core/rawdb: improve freezerTable.Sync (#26245)

While investigating #22374, I noticed that the Sync operation of the
freezer does not take the table lock. It also doesn't call sync for all files
if there is an error with one of them. I doubt this will fix anything, but
didn't want to drop the fix on the floor either.
This commit is contained in:
Felix Lange 2022-11-24 10:50:28 +01:00 committed by GitHub
parent ec2ec2d08e
commit 193f350eb9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -867,13 +867,20 @@ func (t *freezerTable) advanceHead() error {
// Sync pushes any pending data from memory out to disk. This is an expensive
// operation, so use it with care.
func (t *freezerTable) Sync() error {
if err := t.index.Sync(); err != nil {
return err
t.lock.Lock()
defer t.lock.Unlock()
var err error
trackError := func(e error) {
if e != nil && err == nil {
err = e
}
if err := t.meta.Sync(); err != nil {
return err
}
return t.head.Sync()
trackError(t.index.Sync())
trackError(t.meta.Sync())
trackError(t.head.Sync())
return err
}
func (t *freezerTable) dumpIndexStdout(start, stop int64) {