diff --git a/server/storage/backend/backend.go b/server/storage/backend/backend.go index 95f5cf96f..6051ab8d4 100644 --- a/server/storage/backend/backend.go +++ b/server/storage/backend/backend.go @@ -477,6 +477,16 @@ func (b *backend) defrag() error { b.readTx.Lock() defer b.readTx.Unlock() + defer func() { + // NOTE: We should exit as soon as possible because that tx + // might be closed. The inflight request might use invalid + // tx and then panic as well. The real panic reason might be + // shadowed by new panic. So, we should fatal here with lock. + if rerr := recover(); rerr != nil { + b.lg.Fatal("unexpected panic during defrag", zap.Any("panic", rerr)) + } + }() + b.batchTx.unsafeCommit(true) b.batchTx.tx = nil