dnfjson: Adjust cache size info for new layout
The repo id hash directories are now down one level, below a directory named for the distribution.
This commit is contained in:
parent
3481e1d3ba
commit
8f20b550ea
3 changed files with 32 additions and 12 deletions
|
|
@ -70,7 +70,15 @@ func newRPMCache(path string, maxSize uint64) *rpmCache {
|
||||||
|
|
||||||
// updateInfo updates the repoPaths and repoRecency fields of the rpmCache.
|
// updateInfo updates the repoPaths and repoRecency fields of the rpmCache.
|
||||||
func (r *rpmCache) updateInfo() {
|
func (r *rpmCache) updateInfo() {
|
||||||
cacheEntries, _ := os.ReadDir(r.root)
|
// Top level of the cache is now used for separate distributions
|
||||||
|
dirs, _ := os.ReadDir(r.root)
|
||||||
|
for _, d := range dirs {
|
||||||
|
r.updateCacheDirInfo(filepath.Join(r.root, d.Name()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *rpmCache) updateCacheDirInfo(path string) {
|
||||||
|
cacheEntries, _ := os.ReadDir(path)
|
||||||
|
|
||||||
// each repository has multiple cache entries (3 on average), so using the
|
// each repository has multiple cache entries (3 on average), so using the
|
||||||
// number of cacheEntries to allocate the map and ID slice is a high upper
|
// number of cacheEntries to allocate the map and ID slice is a high upper
|
||||||
|
|
@ -103,7 +111,7 @@ func (r *rpmCache) updateInfo() {
|
||||||
repoIDs = append(repoIDs, repoID)
|
repoIDs = append(repoIDs, repoID)
|
||||||
}
|
}
|
||||||
mtime := eInfo.ModTime()
|
mtime := eInfo.ModTime()
|
||||||
ePath := filepath.Join(r.root, entry.Name())
|
ePath := filepath.Join(path, entry.Name())
|
||||||
|
|
||||||
// calculate and add entry size
|
// calculate and add entry size
|
||||||
size, err := dirSize(ePath)
|
size, err := dirSize(ePath)
|
||||||
|
|
@ -180,17 +188,23 @@ func (r *rpmCache) touchRepo(repoID string, t time.Time) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// we only touch the top-level directories and files of the cache
|
distroDirs, err := os.ReadDir(r.root)
|
||||||
cacheEntries, err := os.ReadDir(r.root)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
for _, d := range distroDirs {
|
||||||
|
// we only touch the top-level directories and files of the cache
|
||||||
|
cacheEntries, err := os.ReadDir(filepath.Join(r.root, d.Name()))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
for _, cacheEntry := range cacheEntries {
|
for _, cacheEntry := range cacheEntries {
|
||||||
if repoGlob.Match(cacheEntry.Name()) {
|
if repoGlob.Match(cacheEntry.Name()) {
|
||||||
path := filepath.Join(r.root, cacheEntry.Name())
|
path := filepath.Join(r.root, d.Name(), cacheEntry.Name())
|
||||||
if err := os.Chtimes(path, t, t); err != nil {
|
if err := os.Chtimes(path, t, t); err != nil {
|
||||||
return err
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -157,8 +157,10 @@ func TestCacheRead(t *testing.T) {
|
||||||
for name, cfg := range testCfgs {
|
for name, cfg := range testCfgs {
|
||||||
t.Run(name, func(t *testing.T) {
|
t.Run(name, func(t *testing.T) {
|
||||||
testCacheRoot := t.TempDir()
|
testCacheRoot := t.TempDir()
|
||||||
s := createTestCache(testCacheRoot, cfg)
|
// Cache is now per-distro, use the name of the config as a distro name
|
||||||
|
s := createTestCache(filepath.Join(testCacheRoot, name), cfg)
|
||||||
|
|
||||||
|
// Cache covers all distros, pass in top directory
|
||||||
cache := newRPMCache(testCacheRoot, 1048576) // 1 MiB, but doesn't matter for this test
|
cache := newRPMCache(testCacheRoot, 1048576) // 1 MiB, but doesn't matter for this test
|
||||||
|
|
||||||
nrepos := len(getRepoIDs(cfg))
|
nrepos := len(getRepoIDs(cfg))
|
||||||
|
|
@ -259,8 +261,12 @@ func TestCacheCleanup(t *testing.T) {
|
||||||
t.Run(name, func(t *testing.T) {
|
t.Run(name, func(t *testing.T) {
|
||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
testCacheRoot := t.TempDir()
|
testCacheRoot := t.TempDir()
|
||||||
createTestCache(testCacheRoot, cfg.cache)
|
// Cache is now per-distro, use the name of the config as a distro name
|
||||||
|
createTestCache(filepath.Join(testCacheRoot, name), cfg.cache)
|
||||||
|
|
||||||
|
// Cache covers all distros, pass in top directory
|
||||||
cache := newRPMCache(testCacheRoot, cfg.maxSize)
|
cache := newRPMCache(testCacheRoot, cfg.maxSize)
|
||||||
|
|
||||||
err := cache.shrink()
|
err := cache.shrink()
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ type BaseSolver struct {
|
||||||
// method.
|
// method.
|
||||||
func NewBaseSolver(cacheDir string) *BaseSolver {
|
func NewBaseSolver(cacheDir string) *BaseSolver {
|
||||||
return &BaseSolver{
|
return &BaseSolver{
|
||||||
cache: newRPMCache(cacheDir, 524288000), // 500 MiB
|
cache: newRPMCache(cacheDir, 1024*1024*1024), // 1 GiB
|
||||||
dnfJsonCmd: []string{"/usr/libexec/osbuild-composer/dnf-json"},
|
dnfJsonCmd: []string{"/usr/libexec/osbuild-composer/dnf-json"},
|
||||||
resultCache: NewDNFCache(60 * time.Second),
|
resultCache: NewDNFCache(60 * time.Second),
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue