Skip to content

Commit

Permalink
Reimplement iteration over fileInfos in getOrphan.
Browse files Browse the repository at this point in the history
1. Reduce complexity due to nested if blocks by using early
return/continue
2. Improve logging

Changes suggested as a part of code review comments in 39748

Signed-off-by: Vikram bir Singh <vikrambir.singh@docker.com>
  • Loading branch information
Vikram bir Singh committed Sep 6, 2019
1 parent f505abb commit ebf12db
Showing 1 changed file with 31 additions and 23 deletions.
54 changes: 31 additions & 23 deletions layer/filestore.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (

"github.com/docker/distribution"
"github.com/docker/docker/pkg/ioutils"
"github.com/opencontainers/go-digest"
digest "github.com/opencontainers/go-digest"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)
Expand Down Expand Up @@ -317,32 +317,40 @@ func (fms *fileMetadataStore) getOrphan() ([]roLayer, error) {
}

for _, fi := range fileInfos {
if fi.IsDir() && strings.Contains(fi.Name(), "-removing") {
nameSplit := strings.Split(fi.Name(), "-")
dgst := digest.NewDigestFromEncoded(algorithm, nameSplit[0])
if err := dgst.Validate(); err != nil {
logrus.Debugf("Ignoring invalid digest %s:%s", algorithm, nameSplit[0])
} else {
chainID := ChainID(dgst)
chainFile := filepath.Join(fms.root, string(algorithm), fi.Name(), "cache-id")
contentBytes, err := ioutil.ReadFile(chainFile)
if err != nil {
logrus.WithError(err).WithField("digest", dgst).Error("cannot get cache ID")
}
cacheID := strings.TrimSpace(string(contentBytes))
if cacheID == "" {
logrus.Errorf("invalid cache id value")
}

l := &roLayer{
chainID: chainID,
cacheID: cacheID,
}
orphanLayers = append(orphanLayers, *l)
if !fi.IsDir() || !strings.HasSuffix(fi.Name(), "-removing") {
continue
}
// At this stage, fi.Name value looks like <digest>-<random>-removing
// Split on '-' to get the digest value.
nameSplit := strings.Split(fi.Name(), "-")
dgst := digest.NewDigestFromEncoded(algorithm, nameSplit[0])
if err := dgst.Validate(); err != nil {
logrus.WithError(err).WithField("digest", string(algorithm)+":"+nameSplit[0]).Debug("ignoring invalid digest")
continue
}

chainFile := filepath.Join(fms.root, string(algorithm), fi.Name(), "cache-id")
contentBytes, err := ioutil.ReadFile(chainFile)
if err != nil {
if !os.IsNotExist(err) {
logrus.WithError(err).WithField("digest", dgst).Error("failed to read cache ID")
}
continue
}
cacheID := strings.TrimSpace(string(contentBytes))
if cacheID == "" {
logrus.Error("invalid cache ID")
continue
}

l := &roLayer{
chainID: ChainID(dgst),
cacheID: cacheID,
}
orphanLayers = append(orphanLayers, *l)
}
}

return orphanLayers, nil
}

Expand Down

0 comments on commit ebf12db

Please sign in to comment.