mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
wal: cleanup wal directory if creation fails
delete <data-dir>/member/wal if any operation after the rename in wal.Create fails to avoid reading an inconsistent WAL on restart. Fixes #10688
This commit is contained in:
parent
caee28a88e
commit
51035bfd84
23
wal/wal.go
23
wal/wal.go
@ -195,6 +195,7 @@ func Create(lg *zap.Logger, dirpath string, metadata []byte) (*WAL, error) {
|
||||
zap.Error(perr),
|
||||
)
|
||||
}
|
||||
w.cleanupWAL(lg)
|
||||
return nil, perr
|
||||
}
|
||||
if perr = fileutil.Fsync(pdir); perr != nil {
|
||||
@ -206,9 +207,10 @@ func Create(lg *zap.Logger, dirpath string, metadata []byte) (*WAL, error) {
|
||||
zap.Error(perr),
|
||||
)
|
||||
}
|
||||
w.cleanupWAL(lg)
|
||||
return nil, perr
|
||||
}
|
||||
if perr = pdir.Close(); err != nil {
|
||||
if perr = pdir.Close(); perr != nil {
|
||||
if lg != nil {
|
||||
lg.Warn(
|
||||
"failed to close the parent data directory file",
|
||||
@ -217,12 +219,31 @@ func Create(lg *zap.Logger, dirpath string, metadata []byte) (*WAL, error) {
|
||||
zap.Error(perr),
|
||||
)
|
||||
}
|
||||
w.cleanupWAL(lg)
|
||||
return nil, perr
|
||||
}
|
||||
|
||||
return w, nil
|
||||
}
|
||||
|
||||
func (w *WAL) cleanupWAL(lg *zap.Logger) {
|
||||
var err error
|
||||
if err = w.Close(); err != nil {
|
||||
if lg != nil {
|
||||
lg.Panic("failed to cleanup WAL", zap.Error(err))
|
||||
} else {
|
||||
plog.Panicf("failed to cleanup WAL: %v", err)
|
||||
}
|
||||
}
|
||||
if err = os.RemoveAll(w.dir); err != nil {
|
||||
if lg != nil {
|
||||
lg.Panic("failed to cleanup WAL", zap.Error(err))
|
||||
} else {
|
||||
plog.Panicf("failed to cleanup WAL: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (w *WAL) renameWAL(tmpdirpath string) (*WAL, error) {
|
||||
if err := os.RemoveAll(w.dir); err != nil {
|
||||
return nil, err
|
||||
|
Loading…
x
Reference in New Issue
Block a user