Skip to content

Commit 87bc6c8

Browse files
authored
feat(store): Add HasQ4ByHash method on store (#4035)
1 parent 5a5d450 commit 87bc6c8

File tree

4 files changed

+48
-1
lines changed

4 files changed

+48
-1
lines changed

core/exchange_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ func TestExchange_StoreHistoricIfArchival(t *testing.T) {
146146
headers, err := ce.GetRangeByHeight(ctx, genHeader, 30)
147147
require.NoError(t, err)
148148

149-
// ensure all "historic" EDSs were stored
149+
// ensure all "historic" EDSs were stored but not the .q4 files
150150
for _, h := range headers {
151151
has, err := store.HasByHeight(ctx, h.Height())
152152
require.NoError(t, err)
@@ -159,6 +159,11 @@ func TestExchange_StoreHistoricIfArchival(t *testing.T) {
159159
has, err = store.HasByHash(ctx, h.DAH.Hash())
160160
require.NoError(t, err)
161161
assert.True(t, has)
162+
163+
// ensure .q4 file was not stored
164+
has, err = store.HasQ4ByHash(ctx, h.DAH.Hash())
165+
require.NoError(t, err)
166+
assert.False(t, has)
162167
}
163168
}
164169

core/listener_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ func TestListener_DoesNotStoreHistoric(t *testing.T) {
130130
has, err := store.HasByHash(ctx, hash)
131131
require.NoError(t, err)
132132
assert.False(t, has)
133+
134+
// ensure .q4 file was not stored
135+
has, err = store.HasQ4ByHash(ctx, hash)
136+
require.NoError(t, err)
137+
assert.False(t, has)
133138
}
134139
}
135140

store/store.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,15 @@ func (s *Store) hasByHeight(height uint64) (bool, error) {
432432
return exists(pathODS)
433433
}
434434

435+
func (s *Store) HasQ4ByHash(_ context.Context, datahash share.DataHash) (bool, error) {
436+
lock := s.stripLock.byHash(datahash)
437+
lock.RLock()
438+
defer lock.RUnlock()
439+
440+
pathQ4File := s.hashToPath(datahash, q4FileExt)
441+
return exists(pathQ4File)
442+
}
443+
435444
func (s *Store) RemoveODSQ4(ctx context.Context, height uint64, datahash share.DataHash) error {
436445
lock := s.stripLock.byHashAndHeight(datahash, height)
437446
lock.lock()

store/store_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"testing"
99
"time"
1010

11+
"github.com/stretchr/testify/assert"
1112
"github.com/stretchr/testify/require"
1213

1314
libshare "github.com/celestiaorg/go-square/v2/share"
@@ -268,6 +269,33 @@ func TestEDSStore(t *testing.T) {
268269
})
269270
}
270271

272+
t.Run("HasQ4", func(t *testing.T) {
273+
dir := t.TempDir()
274+
edsStore, err := NewStore(paramsNoCache(), dir)
275+
require.NoError(t, err)
276+
277+
square, roots := randomEDS(t)
278+
randHeight := uint64(8)
279+
280+
has, err := edsStore.HasQ4ByHash(ctx, roots.Hash())
281+
require.NoError(t, err)
282+
assert.False(t, has)
283+
284+
err = edsStore.PutODSQ4(ctx, roots, randHeight, square)
285+
require.NoError(t, err)
286+
287+
has, err = edsStore.HasQ4ByHash(ctx, roots.Hash())
288+
require.NoError(t, err)
289+
assert.True(t, has)
290+
291+
err = edsStore.RemoveQ4(ctx, randHeight, roots.Hash())
292+
require.NoError(t, err)
293+
294+
has, err = edsStore.HasQ4ByHash(ctx, roots.Hash())
295+
require.NoError(t, err)
296+
assert.False(t, has)
297+
})
298+
271299
t.Run("Does not exist", func(t *testing.T) {
272300
dir := t.TempDir()
273301
edsStore, err := NewStore(paramsNoCache(), dir)

0 commit comments

Comments
 (0)