mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
65d79e3e5e
Instead of implementing refcounts at each graphdriver, implement this in the layer package which is what the engine actually interacts with now. This means interacting directly with the graphdriver is no longer explicitly safe with regard to Get/Put calls being refcounted. In addition, with the containerd, layers may still be mounted after a daemon restart since we will no longer explicitly kill containers when we shutdown or startup engine. Because of this ref counts would need to be repopulated. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
// +build linux
|
|
|
|
package aufs
|
|
|
|
import (
|
|
"bufio"
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
)
|
|
|
|
// Return all the directories
|
|
func loadIds(root string) ([]string, error) {
|
|
dirs, err := ioutil.ReadDir(root)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
out := []string{}
|
|
for _, d := range dirs {
|
|
if !d.IsDir() {
|
|
out = append(out, d.Name())
|
|
}
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
// Read the layers file for the current id and return all the
|
|
// layers represented by new lines in the file
|
|
//
|
|
// If there are no lines in the file then the id has no parent
|
|
// and an empty slice is returned.
|
|
func getParentIds(root, id string) ([]string, error) {
|
|
f, err := os.Open(path.Join(root, "layers", id))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer f.Close()
|
|
|
|
out := []string{}
|
|
s := bufio.NewScanner(f)
|
|
|
|
for s.Scan() {
|
|
if t := s.Text(); t != "" {
|
|
out = append(out, s.Text())
|
|
}
|
|
}
|
|
return out, s.Err()
|
|
}
|
|
|
|
func (a *Driver) getMountpoint(id string) string {
|
|
return path.Join(a.mntPath(), id)
|
|
}
|
|
|
|
func (a *Driver) mntPath() string {
|
|
return path.Join(a.rootPath(), "mnt")
|
|
}
|
|
|
|
func (a *Driver) getDiffPath(id string) string {
|
|
return path.Join(a.diffPath(), id)
|
|
}
|
|
|
|
func (a *Driver) diffPath() string {
|
|
return path.Join(a.rootPath(), "diff")
|
|
}
|