mirror of
https://github.com/moby/buildkit.git
synced 2026-08-05 07:10:23 +00:00
boltdbcache: fix releasing results
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user