From 8f1a2afc53f9c9d77ed1b168ac044e9e47b74b05 Mon Sep 17 00:00:00 2001 From: Mikhail Klementev Date: Mon, 15 May 2023 18:37:09 +0000 Subject: [PATCH] feat: modify cache api to store more than one kernel for version --- distro/debian/cache.go | 13 ++++++++++--- distro/debian/cache_test.go | 8 +++++--- distro/debian/kernel.go | 21 +++++++++++++-------- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/distro/debian/cache.go b/distro/debian/cache.go index 8ed3730..f6b307a 100644 --- a/distro/debian/cache.go +++ b/distro/debian/cache.go @@ -1,6 +1,7 @@ package debian import ( + "errors" "sync" "github.com/rapidloop/skv" @@ -21,12 +22,18 @@ func NewCache(path string) (c *Cache, err error) { return } -func (c Cache) Put(p DebianKernel) error { - return c.store.Put(p.Version.Package, p) +func (c Cache) Put(p []DebianKernel) error { + if len(p) == 0 { + return errors.New("empty slice") + } + return c.store.Put(p[0].Version.Package, p) } -func (c Cache) Get(version string) (p DebianKernel, err error) { +func (c Cache) Get(version string) (p []DebianKernel, err error) { err = c.store.Get(version, &p) + if len(p) == 0 { + err = skv.ErrNotFound + } return } diff --git a/distro/debian/cache_test.go b/distro/debian/cache_test.go index 911ef55..018914d 100644 --- a/distro/debian/cache_test.go +++ b/distro/debian/cache_test.go @@ -34,15 +34,16 @@ func TestCache(t *testing.T) { Image: image, } - err = c.Put(dk) + err = c.Put([]DebianKernel{dk}) if err != nil { t.Fatal(err) } - dk2, err := c.Get(version) + dk2s, err := c.Get(version) if err != nil { t.Fatal(err) } + dk2 := dk2s[0] if dk.Image.Deb.Hash != dk2.Image.Deb.Hash { t.Fatalf("mismatch") @@ -56,10 +57,11 @@ func TestCache(t *testing.T) { } defer c.Close() - dk3, err := c.Get(version) + dk3s, err := c.Get(version) if err != nil { t.Fatal(err) } + dk3 := dk3s[0] if dk.Image.Deb.Hash != dk3.Image.Deb.Hash { t.Fatalf("mismatch") diff --git a/distro/debian/kernel.go b/distro/debian/kernel.go index 98e91af..17cd104 100644 --- a/distro/debian/kernel.go +++ b/distro/debian/kernel.go @@ -137,11 +137,12 @@ func GetCachedKernel(deb string) (dk DebianKernel, err error) { } for _, version := range versions { - var tmpdk DebianKernel - tmpdk, err = c.Get(version) + var tmpdks []DebianKernel + tmpdks, err = c.Get(version) if err != nil { continue } + tmpdk := tmpdks[0] if deb == tmpdk.Image.Deb.Name { dk = tmpdk @@ -225,11 +226,15 @@ func findKbuild(versions []string, kpkgver string) ( func getKernelsByVersion(slog zerolog.Logger, c *Cache, toolsVersions []string, version string) (kernels []DebianKernel) { - dk, err := c.Get(version) - if err == nil && !dk.Internal.Invalid { - slog.Trace().Msgf("found in cache") - kernels = append(kernels, dk) - return + var dk DebianKernel + dks, err := c.Get(version) + if err == nil { + dk = dks[0] + if !dk.Internal.Invalid { + slog.Trace().Msgf("found in cache") + kernels = append(kernels, dk) + return + } } if dk.Internal.Invalid { @@ -280,7 +285,7 @@ func getKernelsByVersion(slog zerolog.Logger, c *Cache, toolsVersions []string, kernels = append(kernels, dk) } - err = c.Put(dk) + err = c.Put([]DebianKernel{dk}) if err != nil { slog.Error().Err(err).Msg("put to cache") return