Skip to content

Commit 1d99d76

Browse files
authored
Merge pull request #153 from anyproto/GO-5827-delete-s3-keys
GO-5827 remove keys from s3
2 parents 429bcb8 + eee3f7c commit 1d99d76

File tree

7 files changed

+46
-2
lines changed

7 files changed

+46
-2
lines changed

index/delete.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"slices"
66
"strings"
7+
"time"
78

89
"github.com/redis/go-redis/v9"
910
)
@@ -66,7 +67,7 @@ func (ri *redisIndex) MarkSpaceAsDeleted(ctx context.Context, key Key) (ok bool,
6667
}
6768
defer release()
6869
if !exists {
69-
if err = ri.cl.Set(ctx, DelKey(key), 1, 0).Err(); err != nil {
70+
if err = ri.cl.Set(ctx, DelKey(key), time.Now().Unix(), 0).Err(); err != nil {
7071
return
7172
}
7273
return true, nil

index/loader.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ func init() {
3535
type persistentStore interface {
3636
IndexGet(ctx context.Context, key string) (value []byte, err error)
3737
IndexPut(ctx context.Context, key string, value []byte) (err error)
38+
IndexDelete(ctx context.Context, key string) (err error)
3839

3940
Get(ctx context.Context, k cid.Cid) (blocks.Block, error)
4041
}
@@ -271,9 +272,12 @@ func (ri *redisIndex) persistKey(ctx context.Context, storeKey, key string, dead
271272
stat.errors.Add(1)
272273
return
273274
}
274-
// key was removed - just remove it from store queue
275+
// the key was removed - remove it from the persistent store and the queue
275276
if errors.Is(err, redis.Nil) {
276277
stat.deleted.Add(1)
278+
if err = ri.persistStore.IndexDelete(ctx, key); err != nil {
279+
stat.errors.Add(1)
280+
}
277281
return ri.cl.ZRem(ctx, storeKey, key).Err()
278282
}
279283

index/loader_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,18 @@ func TestRedisIndex_PersistKeys(t *testing.T) {
2121
require.NoError(t, fx.BlocksAdd(ctx, bs))
2222
fx.PersistKeys(ctx)
2323
})
24+
t.Run("delete", func(t *testing.T) {
25+
fx := newFixtureConfig(t, &config.Config{PersistTtl: 1})
26+
defer fx.Finish(t)
27+
bs := testutil.NewRandBlocks(5)
28+
for _, b := range bs {
29+
_, release, _ := fx.AcquireKey(ctx, CidKey(b.Cid()))
30+
release()
31+
fx.persistStore.EXPECT().IndexDelete(ctx, CidKey(b.Cid()))
32+
}
33+
time.Sleep(time.Second * 3)
34+
fx.PersistKeys(ctx)
35+
})
2436
t.Run("persist", func(t *testing.T) {
2537
fx := newFixtureConfig(t, &config.Config{PersistTtl: 1})
2638
defer fx.Finish(t)

store/filedevstore/filedevstore.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,3 +106,7 @@ func (s *fsstore) IndexGet(ctx context.Context, key string) (value []byte, err e
106106
func (s *fsstore) IndexPut(ctx context.Context, key string, value []byte) (err error) {
107107
return os.WriteFile(filepath.Join(s.path, key), value, 0644)
108108
}
109+
110+
func (s *fsstore) IndexDelete(ctx context.Context, key string) (err error) {
111+
return os.Remove(filepath.Join(s.path, key))
112+
}

store/mock_store/mock_store.go

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

store/s3store/s3store.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,14 @@ func (s *s3store) IndexPut(ctx context.Context, key string, data []byte) (err er
239239
return
240240
}
241241

242+
func (s *s3store) IndexDelete(ctx context.Context, key string) (err error) {
243+
_, err = s.client.DeleteObjectWithContext(ctx, &s3.DeleteObjectInput{
244+
Key: aws.String(key),
245+
Bucket: s.indexBucket,
246+
})
247+
return
248+
}
249+
242250
func (s *s3store) Close(ctx context.Context) (err error) {
243251
return nil
244252
}

store/store.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ type Store interface {
1515

1616
IndexGet(ctx context.Context, key string) (value []byte, err error)
1717
IndexPut(ctx context.Context, key string, value []byte) (err error)
18+
IndexDelete(ctx context.Context, key string) (err error)
1819
app.Component
1920
}

0 commit comments

Comments
 (0)