cmd/stcrashreceiver, lib/db: Improve panic message handling (#7029)
This commit is contained in:
+12
-3
@@ -13,6 +13,7 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"regexp"
|
||||
"time"
|
||||
|
||||
"github.com/dchest/siphash"
|
||||
@@ -816,7 +817,7 @@ func (db *Lowlevel) getMetaAndCheck(folder string) *metadataTracker {
|
||||
var err error
|
||||
defer func() {
|
||||
if err != nil && !backend.IsClosed(err) {
|
||||
panic(err)
|
||||
warnAndPanic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
@@ -944,14 +945,14 @@ func (db *Lowlevel) verifyLocalSequence(curSeq int64, folder string) bool {
|
||||
|
||||
t, err := db.newReadOnlyTransaction()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
warnAndPanic(err)
|
||||
}
|
||||
ok := true
|
||||
if err := t.withHaveSequence([]byte(folder), curSeq+1, func(fi protocol.FileIntf) bool {
|
||||
ok = false // we got something, which we should not have
|
||||
return false
|
||||
}); err != nil && !backend.IsClosed(err) {
|
||||
panic(err)
|
||||
warnAndPanic(err)
|
||||
}
|
||||
t.close()
|
||||
|
||||
@@ -1161,3 +1162,11 @@ func (db *Lowlevel) needsRepairPath() string {
|
||||
func unchanged(nf, ef protocol.FileIntf) bool {
|
||||
return ef.FileVersion().Equal(nf.FileVersion()) && ef.IsInvalid() == nf.IsInvalid() && ef.FileLocalFlags() == nf.FileLocalFlags()
|
||||
}
|
||||
|
||||
var ldbPathRe = regexp.MustCompile(`(open|write|read) .+[\\/].+[\\/]index[^\\/]+[\\/][^\\/]+: `)
|
||||
|
||||
func warnAndPanic(err error) {
|
||||
l.Warnf("Fatal error: %v", err)
|
||||
msg := ldbPathRe.ReplaceAllString(err.Error(), "$1 x: ")
|
||||
panic(msg)
|
||||
}
|
||||
|
||||
+1
-2
@@ -531,6 +531,5 @@ func fatalError(err error, opStr string, db *Lowlevel) {
|
||||
}
|
||||
}
|
||||
}
|
||||
l.Warnf("Fatal error: %v: %v", opStr, err)
|
||||
panic(err)
|
||||
warnAndPanic(fmt.Errorf("%v: %w:", opStr, err))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user