Skip to content

Commit 91e0627

Browse files
committed
index: GetStatusEnttry method
1 parent 0980752 commit 91e0627

2 files changed

Lines changed: 82 additions & 0 deletions

File tree

nodestorage/indexstorage.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,17 @@ import (
1717

1818
type SpaceStatus int
1919

20+
type SpaceStatusEntry struct {
21+
SpaceId string
22+
Status SpaceStatus
23+
Error string
24+
NewHash string
25+
OldHash string
26+
LastAccess time.Time
27+
ArchiveSizeCompressed int64
28+
ArchiveSizeUncompressed int64
29+
}
30+
2031
const (
2132
SpaceStatusOk SpaceStatus = iota
2233
SpaceStatusRemove
@@ -152,6 +163,25 @@ func (d *indexStorage) SpaceStatus(ctx context.Context, spaceId string) (status
152163
return SpaceStatus(doc.Value().GetInt(statusKey)), nil
153164
}
154165

166+
func (d *indexStorage) SpaceStatusEntry(ctx context.Context, spaceId string) (entry SpaceStatusEntry, err error) {
167+
doc, err := d.spaceColl.FindId(ctx, spaceId)
168+
if err != nil {
169+
return entry, err
170+
}
171+
v := doc.Value()
172+
entry = SpaceStatusEntry{
173+
SpaceId: spaceId,
174+
Status: SpaceStatus(v.GetInt(statusKey)),
175+
Error: v.GetString(errorKey),
176+
NewHash: v.GetString(newHashKey),
177+
OldHash: v.GetString(oldHashKey),
178+
LastAccess: time.Unix(int64(v.GetInt(lastAccessKey)), 0),
179+
ArchiveSizeCompressed: int64(v.GetInt(archiveSizeCompressedKey)),
180+
ArchiveSizeUncompressed: int64(v.GetInt(archiveSizeUncompressedKey)),
181+
}
182+
return entry, nil
183+
}
184+
155185
func (d *indexStorage) SetSpaceStatus(ctx context.Context, spaceId string, status SpaceStatus, recId string) (err error) {
156186
tx, err := d.db.WriteTx(ctx)
157187
if err != nil {

nodestorage/indexstorage_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,58 @@ func TestIndexStorage_MarkArchived(t *testing.T) {
114114
assert.Equal(t, SpaceStatusArchived, status)
115115
}
116116

117+
func TestIndexStorage_SpaceStatusEntry(t *testing.T) {
118+
t.Run("not found", func(t *testing.T) {
119+
tempDir := t.TempDir()
120+
fx, err := createTestIndexStorage(ctx, tempDir)
121+
require.NoError(t, err)
122+
defer fx.Close()
123+
124+
_, err = fx.(*indexStorage).SpaceStatusEntry(ctx, "nonexistent")
125+
require.ErrorIs(t, err, anystore.ErrDocNotFound)
126+
})
127+
128+
t.Run("existing entry", func(t *testing.T) {
129+
tempDir := t.TempDir()
130+
fx, err := createTestIndexStorage(ctx, tempDir)
131+
require.NoError(t, err)
132+
defer fx.Close()
133+
134+
require.NoError(t, fx.SetSpaceStatus(ctx, "space1", SpaceStatusOk, ""))
135+
require.NoError(t, fx.UpdateHash(ctx, SpaceUpdate{
136+
SpaceId: "space1",
137+
OldHash: "old",
138+
NewHash: "new",
139+
}))
140+
require.NoError(t, fx.MarkArchived(ctx, "space1", 100, 200))
141+
142+
entry, err := fx.(*indexStorage).SpaceStatusEntry(ctx, "space1")
143+
require.NoError(t, err)
144+
assert.Equal(t, "space1", entry.SpaceId)
145+
assert.Equal(t, SpaceStatusArchived, entry.Status)
146+
assert.Equal(t, "new", entry.NewHash)
147+
assert.Equal(t, "old", entry.OldHash)
148+
assert.Equal(t, int64(100), entry.ArchiveSizeCompressed)
149+
assert.Equal(t, int64(200), entry.ArchiveSizeUncompressed)
150+
assert.False(t, entry.LastAccess.IsZero())
151+
})
152+
153+
t.Run("error status", func(t *testing.T) {
154+
tempDir := t.TempDir()
155+
fx, err := createTestIndexStorage(ctx, tempDir)
156+
require.NoError(t, err)
157+
defer fx.Close()
158+
159+
require.NoError(t, fx.SetSpaceStatus(ctx, "space1", SpaceStatusOk, ""))
160+
require.NoError(t, fx.MarkError(ctx, "space1", "some error"))
161+
162+
entry, err := fx.(*indexStorage).SpaceStatusEntry(ctx, "space1")
163+
require.NoError(t, err)
164+
assert.Equal(t, SpaceStatusError, entry.Status)
165+
assert.Equal(t, "some error", entry.Error)
166+
})
167+
}
168+
117169
func TestIndexStorage_MarkError(t *testing.T) {
118170
tempDir := t.TempDir()
119171
fx, err := createTestIndexStorage(ctx, tempDir)

0 commit comments

Comments
 (0)