Moved directory walk, compare file code to it's own function

This commit is contained in:
Michael Cambria 2018-09-25 12:10:36 -04:00
parent a17cadda88
commit 37715a0f87

View File

@ -26,6 +26,7 @@ import (
)
const lastIPFilePrefix = "last_reserved_ip."
const LineBreak = "\r\n"
var defaultDataDir = "/var/lib/cni/networks"
@ -65,7 +66,7 @@ func (s *Store) Reserve(id string, ifname string, ip net.IP, rangeID string) (bo
if err != nil {
return false, err
}
if _, err := f.WriteString(strings.TrimSpace(id) + "\n" + ifname); err != nil {
if _, err := f.WriteString(strings.TrimSpace(id) + LineBreak + ifname); err != nil {
f.Close()
os.Remove(f.Name())
return false, err
@ -97,10 +98,7 @@ func (s *Store) Release(ip net.IP) error {
return os.Remove(GetEscapedPath(s.dataDir, ip.String()))
}
// N.B. This function eats errors to be tolerant and
// release as much as possible
func (s *Store) ReleaseByID(id string, ifname string) error {
func (s *Store) ReleaseByKey(id string, ifname string, match string) (bool, error) {
found := false
err := filepath.Walk(s.dataDir, func(path string, info os.FileInfo, err error) error {
if err != nil || info.IsDir() {
@ -110,7 +108,7 @@ func (s *Store) ReleaseByID(id string, ifname string) error {
if err != nil {
return nil
}
if strings.TrimSpace(string(data)) == (strings.TrimSpace(id) + "\n" + ifname) {
if strings.TrimSpace(string(data)) == match {
if err := os.Remove(path); err != nil {
return nil
}
@ -118,27 +116,21 @@ func (s *Store) ReleaseByID(id string, ifname string) error {
}
return nil
})
return found, err
if (!found) && (err == nil) {
err = filepath.Walk(s.dataDir, func(path string, info os.FileInfo, err error) error {
if err != nil || info.IsDir() {
return nil
}
data, err := ioutil.ReadFile(path)
if err != nil {
return nil
}
isCurrent := strings.Contains(string(data), "\n")
}
if !isCurrent {
if strings.TrimSpace(string(data)) == (strings.TrimSpace(id)) {
if err := os.Remove(path); err != nil {
return nil
}
}
}
return nil
})
// N.B. This function eats errors to be tolerant and
// release as much as possible
func (s *Store) ReleaseByID(id string, ifname string) error {
found := false
match := strings.TrimSpace(id) + LineBreak + ifname
found, err := s.ReleaseByKey(id, ifname, match)
// For backwards compatibility, look for files written by a previous version
if !found && err == nil {
match := strings.TrimSpace(id)
found, err = s.ReleaseByKey(id, ifname, match)
}
return err
}