core/rawdb: no need to run truncateFile for readonly mode (#28145)
Avoid truncating files, if ancients are opened in readonly mode. With this change, we return error instead of trying (and failing) to repair
This commit is contained in:
parent
5b9cbe30f8
commit
545f4c5547
@ -212,6 +212,9 @@ func (t *freezerTable) repair() error {
|
|||||||
}
|
}
|
||||||
// Ensure the index is a multiple of indexEntrySize bytes
|
// Ensure the index is a multiple of indexEntrySize bytes
|
||||||
if overflow := stat.Size() % indexEntrySize; overflow != 0 {
|
if overflow := stat.Size() % indexEntrySize; overflow != 0 {
|
||||||
|
if t.readonly {
|
||||||
|
return fmt.Errorf("index file(path: %s, name: %s) size is not a multiple of %d", t.path, t.name, indexEntrySize)
|
||||||
|
}
|
||||||
truncateFreezerFile(t.index, stat.Size()-overflow) // New file can't trigger this path
|
truncateFreezerFile(t.index, stat.Size()-overflow) // New file can't trigger this path
|
||||||
}
|
}
|
||||||
// Retrieve the file sizes and prepare for truncation
|
// Retrieve the file sizes and prepare for truncation
|
||||||
@ -270,6 +273,9 @@ func (t *freezerTable) repair() error {
|
|||||||
// Keep truncating both files until they come in sync
|
// Keep truncating both files until they come in sync
|
||||||
contentExp = int64(lastIndex.offset)
|
contentExp = int64(lastIndex.offset)
|
||||||
for contentExp != contentSize {
|
for contentExp != contentSize {
|
||||||
|
if t.readonly {
|
||||||
|
return fmt.Errorf("freezer table(path: %s, name: %s, num: %d) is corrupted", t.path, t.name, lastIndex.filenum)
|
||||||
|
}
|
||||||
verbose = true
|
verbose = true
|
||||||
// Truncate the head file to the last offset pointer
|
// Truncate the head file to the last offset pointer
|
||||||
if contentExp < contentSize {
|
if contentExp < contentSize {
|
||||||
|
Loading…
Reference in New Issue
Block a user