etcdserver: continue releasing snap db in case of error

Signed-off-by: Ted Yu <yuzhihong@gmail.com>
Signed-off-by: Gyuho Lee <leegyuho@amazon.com>
This commit is contained in:
Ted Yu 2020-05-16 04:43:55 -07:00 committed by Gyuho Lee
parent 87fc3c9e57
commit 4079deadb4
2 changed files with 20 additions and 5 deletions

View File

@ -285,7 +285,7 @@ func (s *Snapshotter) cleanupSnapdir(filenames []string) error {
plog.Infof("found orphaned defragmentation file; deleting: %s", filename)
}
if rmErr := os.Remove(filepath.Join(s.dir, filename)); rmErr != nil && !os.IsNotExist(rmErr) {
return fmt.Errorf("failed to remove orphaned defragmentation file %s: %v", filename, rmErr)
return fmt.Errorf("failed to remove orphaned .snap.db file %s: %v", filename, rmErr)
}
}
}
@ -307,12 +307,25 @@ func (s *Snapshotter) ReleaseSnapDBs(snap raftpb.Snapshot) error {
hexIndex := strings.TrimSuffix(filepath.Base(filename), ".snap.db")
index, err := strconv.ParseUint(hexIndex, 16, 64)
if err != nil {
return fmt.Errorf("failed to parse index from .snap.db filename '%s': %v", filename, err)
if s.lg != nil {
s.lg.Warn("failed to parse index from filename", zap.String("path", filename), zap.String("error", err.Error()))
} else {
plog.Warnf("failed to parse index from filename: %s (%v)", filename, err)
}
continue
}
if index < snap.Metadata.Index {
s.lg.Info("found orphaned .snap.db file; deleting", zap.String("path", filename))
if s.lg != nil {
s.lg.Warn("found orphaned .snap.db file; deleting", zap.String("path", filename))
} else {
plog.Warnf("found orphaned .snap.db file; deleting: %s", filename)
}
if rmErr := os.Remove(filepath.Join(s.dir, filename)); rmErr != nil && !os.IsNotExist(rmErr) {
return fmt.Errorf("failed to remove orphaned defragmentation file %s: %v", filename, rmErr)
if s.lg != nil {
s.lg.Warn("failed to remove orphaned .snap.db file", zap.String("path", filename), zap.Error(rmErr))
} else {
plog.Warnf("failed to remove orphaned .snap.db file: %s (%v)", filename, rmErr)
}
}
}
}

View File

@ -104,7 +104,9 @@ var RangeRequest_SortTarget_value = map[string]int32{
func (x RangeRequest_SortTarget) String() string {
return proto.EnumName(RangeRequest_SortTarget_name, int32(x))
}
func (RangeRequest_SortTarget) EnumDescriptor() ([]byte, []int) { return fileDescriptorRpc, []int{1, 1} }
func (RangeRequest_SortTarget) EnumDescriptor() ([]byte, []int) {
return fileDescriptorRpc, []int{1, 1}
}
type Compare_CompareResult int32