From 73eaeba88cbaa0443eb525c50742eb330e6e018d Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Mon, 23 Jul 2018 18:24:13 -0700 Subject: [PATCH] boltdbcache: fix releasing results Signed-off-by: Tonis Tiigi --- solver/boltdbcachestorage/storage.go | 12 +++++++++++- solver/testutil/cachestorage_testsuite.go | 11 ++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/solver/boltdbcachestorage/storage.go b/solver/boltdbcachestorage/storage.go index 8f8904491..0b38fe861 100644 --- a/solver/boltdbcachestorage/storage.go +++ b/solver/boltdbcachestorage/storage.go @@ -133,6 +133,11 @@ func (s *Store) Load(id string, resultID string) (solver.CacheResult, error) { func (s *Store) AddResult(id string, res solver.CacheResult) error { return s.db.Update(func(tx *bolt.Tx) error { + _, err := tx.Bucket([]byte(linksBucket)).CreateBucketIfNotExists([]byte(id)) + if err != nil { + return err + } + b, err := tx.Bucket([]byte(resultBucket)).CreateBucketIfNotExists([]byte(id)) if err != nil { return err @@ -218,7 +223,7 @@ func (s *Store) releaseHelper(tx *bolt.Tx, id, resultID string) error { return nil } - if err := ids.Delete([]byte(resultID)); err != nil { + if err := ids.Delete([]byte(id)); err != nil { return err } @@ -283,6 +288,11 @@ func (s *Store) emptyBranchWithParents(tx *bolt.Tx, id []byte) error { return err } } + + // intentionally ignoring errors + tx.Bucket([]byte(linksBucket)).DeleteBucket([]byte(id)) + tx.Bucket([]byte(resultBucket)).DeleteBucket([]byte(id)) + return nil } diff --git a/solver/testutil/cachestorage_testsuite.go b/solver/testutil/cachestorage_testsuite.go index 7bc16aaec..e87fd979b 100644 --- a/solver/testutil/cachestorage_testsuite.go +++ b/solver/testutil/cachestorage_testsuite.go @@ -203,6 +203,11 @@ func testResultReleaseSingleLevel(t *testing.T, st solver.CacheKeyStorage) { }) require.Equal(t, len(m), 0) + + st.Walk(func(id string) error { + require.False(t, true, fmt.Sprintf("id %s should have been released", id)) + return nil + }) } func testBacklinks(t *testing.T, st solver.CacheKeyStorage) { @@ -321,12 +326,16 @@ func testResultReleaseMultiLevel(t *testing.T, st solver.CacheKeyStorage) { require.Equal(t, len(m), 1) // release sub1 now releases foo as well - err = st.Release("sub1-result") require.NoError(t, err) require.False(t, st.Exists("sub1")) require.False(t, st.Exists("foo")) + + st.Walk(func(id string) error { + require.False(t, true, fmt.Sprintf("id %s should have been released", id)) + return nil + }) } func testWalkIDsByResult(t *testing.T, st solver.CacheKeyStorage) {