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 7b72f2afd4
commit 9959f787e8

View File

@ -26,6 +26,7 @@ import (
) )
const lastIPFilePrefix = "last_reserved_ip." const lastIPFilePrefix = "last_reserved_ip."
const LineBreak = "\r\n"
var defaultDataDir = "/var/lib/cni/networks" 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 { if err != nil {
return false, err 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() f.Close()
os.Remove(f.Name()) os.Remove(f.Name())
return false, err return false, err
@ -97,10 +98,7 @@ func (s *Store) Release(ip net.IP) error {
return os.Remove(GetEscapedPath(s.dataDir, ip.String())) return os.Remove(GetEscapedPath(s.dataDir, ip.String()))
} }
// N.B. This function eats errors to be tolerant and func (s *Store) ReleaseByKey(id string, ifname string, match string) (bool, error) {
// release as much as possible
func (s *Store) ReleaseByID(id string, ifname string) error {
found := false found := false
err := filepath.Walk(s.dataDir, func(path string, info os.FileInfo, err error) error { err := filepath.Walk(s.dataDir, func(path string, info os.FileInfo, err error) error {
if err != nil || info.IsDir() { if err != nil || info.IsDir() {
@ -110,7 +108,7 @@ func (s *Store) ReleaseByID(id string, ifname string) error {
if err != nil { if err != nil {
return 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 { if err := os.Remove(path); err != nil {
return nil return nil
} }
@ -118,27 +116,21 @@ func (s *Store) ReleaseByID(id string, ifname string) error {
} }
return nil 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 { // N.B. This function eats errors to be tolerant and
if strings.TrimSpace(string(data)) == (strings.TrimSpace(id)) { // release as much as possible
if err := os.Remove(path); err != nil { func (s *Store) ReleaseByID(id string, ifname string) error {
return nil found := false
} match := strings.TrimSpace(id) + LineBreak + ifname
} found, err := s.ReleaseByKey(id, ifname, match)
}
return nil // 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 return err
} }