"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "client/pkg/fileutil/purge.go" between
etcd-3.5.5.tar.gz and etcd-3.5.6.tar.gz

About: etcd is a distributed reliable key-value store for the most critical data of a distributed system (written in "Go").

purge.go  (etcd-3.5.5):purge.go  (etcd-3.5.6)
skipping to change at line 44 skipping to change at line 44
return doneC, errC return doneC, errC
} }
// purgeFile is the internal implementation for PurgeFile which can post purged files to purgec if non-nil. // purgeFile is the internal implementation for PurgeFile which can post purged files to purgec if non-nil.
// if donec is non-nil, the function closes it to notify its exit. // if donec is non-nil, the function closes it to notify its exit.
func purgeFile(lg *zap.Logger, dirname string, suffix string, max uint, interval time.Duration, stop <-chan struct{}, purgec chan<- string, donec chan<- struct{ }) <-chan error { func purgeFile(lg *zap.Logger, dirname string, suffix string, max uint, interval time.Duration, stop <-chan struct{}, purgec chan<- string, donec chan<- struct{ }) <-chan error {
if lg == nil { if lg == nil {
lg = zap.NewNop() lg = zap.NewNop()
} }
errC := make(chan error, 1) errC := make(chan error, 1)
lg.Info("started to purge file",
zap.String("dir", dirname),
zap.String("suffix", suffix),
zap.Uint("max", max),
zap.Duration("interval", interval))
go func() { go func() {
if donec != nil { if donec != nil {
defer close(donec) defer close(donec)
} }
for { for {
fnames, err := ReadDir(dirname) fnames, err := ReadDir(dirname)
if err != nil { if err != nil {
errC <- err errC <- err
return return
} }
skipping to change at line 66 skipping to change at line 72
if strings.HasSuffix(fname, suffix) { if strings.HasSuffix(fname, suffix) {
newfnames = append(newfnames, fname) newfnames = append(newfnames, fname)
} }
} }
sort.Strings(newfnames) sort.Strings(newfnames)
fnames = newfnames fnames = newfnames
for len(newfnames) > int(max) { for len(newfnames) > int(max) {
f := filepath.Join(dirname, newfnames[0]) f := filepath.Join(dirname, newfnames[0])
l, err := TryLockFile(f, os.O_WRONLY, PrivateFile Mode) l, err := TryLockFile(f, os.O_WRONLY, PrivateFile Mode)
if err != nil { if err != nil {
lg.Warn("failed to lock file", zap.String ("path", f), zap.Error(err))
break break
} }
if err = os.Remove(f); err != nil { if err = os.Remove(f); err != nil {
lg.Error("failed to remove file", zap.Str ing("path", f), zap.Error(err))
errC <- err errC <- err
return return
} }
if err = l.Close(); err != nil { if err = l.Close(); err != nil {
lg.Warn("failed to unlock/close", zap.Str ing("path", l.Name()), zap.Error(err)) lg.Error("failed to unlock/close", zap.St ring("path", l.Name()), zap.Error(err))
errC <- err errC <- err
return return
} }
lg.Info("purged", zap.String("path", f)) lg.Info("purged", zap.String("path", f))
newfnames = newfnames[1:] newfnames = newfnames[1:]
} }
if purgec != nil { if purgec != nil {
for i := 0; i < len(fnames)-len(newfnames); i++ { for i := 0; i < len(fnames)-len(newfnames); i++ {
purgec <- fnames[i] purgec <- fnames[i]
} }
 End of changes. 4 change blocks. 
1 lines changed or deleted 9 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)