Moved directory walk, compare file code to it's own function
This commit is contained in:
parent
7b72f2afd4
commit
9959f787e8
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user