implement GetAll in metadatastore
This commit is contained in:
@@ -4,13 +4,14 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"iter"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana/pkg/apimachinery/validation"
|
||||
)
|
||||
|
||||
const (
|
||||
metadatasSection = "unified/metadata"
|
||||
metadataSection = "unified/metadata"
|
||||
)
|
||||
|
||||
type metadataStore struct {
|
||||
@@ -58,7 +59,11 @@ func (d *metadataStore) Get(ctx context.Context, key MetadataKey) (Metadata, err
|
||||
return Metadata{}, fmt.Errorf("invalid metadata key: %w", err)
|
||||
}
|
||||
|
||||
reader, err := d.kv.Get(ctx, metadatasSection, key.String())
|
||||
return d.get(ctx, key.String())
|
||||
}
|
||||
|
||||
func (d *metadataStore) get(ctx context.Context, key string) (Metadata, error) {
|
||||
reader, err := d.kv.Get(ctx, metadataSection, key)
|
||||
if err != nil {
|
||||
return Metadata{}, err
|
||||
}
|
||||
@@ -70,6 +75,26 @@ func (d *metadataStore) Get(ctx context.Context, key MetadataKey) (Metadata, err
|
||||
return metadata, nil
|
||||
}
|
||||
|
||||
func (d *metadataStore) GetAll(ctx context.Context) iter.Seq2[Metadata, error] {
|
||||
opts := ListOptions{
|
||||
Sort: SortOrderAsc,
|
||||
StartKey: "",
|
||||
}
|
||||
return func(yield func(Metadata, error) bool) {
|
||||
for metadataKey, err := range d.kv.Keys(ctx, metadataSection, opts) {
|
||||
if err != nil {
|
||||
yield(Metadata{}, err)
|
||||
return
|
||||
}
|
||||
|
||||
metadata, err := d.get(ctx, metadataKey)
|
||||
if !yield(metadata, err) {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (d *metadataStore) Save(ctx context.Context, metadata Metadata) error {
|
||||
metadataKey := MetadataKey{
|
||||
Namespace: metadata.Namespace,
|
||||
@@ -81,7 +106,7 @@ func (d *metadataStore) Save(ctx context.Context, metadata Metadata) error {
|
||||
return fmt.Errorf("invalid metadataKey key: %w", err)
|
||||
}
|
||||
|
||||
writer, err := d.kv.Save(ctx, metadatasSection, metadataKey.String())
|
||||
writer, err := d.kv.Save(ctx, metadataSection, metadataKey.String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -27,9 +27,9 @@ func TestNewMetadataStore(t *testing.T) {
|
||||
|
||||
func TestMetadataStore_MetadataKey_String(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
name string
|
||||
metadataKey MetadataKey
|
||||
expected string
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "basic event key",
|
||||
@@ -116,27 +116,78 @@ func TestMetadataStore_MetadataKey_Validate(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMetadataStore_Save_Get(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
store := setupTestMetadataStore(t)
|
||||
func TestMetadataStore(t *testing.T) {
|
||||
|
||||
metadata := Metadata{
|
||||
Namespace: "default",
|
||||
Group: "apps",
|
||||
Resource: "resource",
|
||||
LastImportTime: time.Now().Truncate(time.Microsecond),
|
||||
}
|
||||
t.Run("Save and Get", func(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
store := setupTestMetadataStore(t)
|
||||
metadata := Metadata{
|
||||
Namespace: "default",
|
||||
Group: "apps",
|
||||
Resource: "resource",
|
||||
LastImportTime: time.Now().Truncate(time.Microsecond),
|
||||
}
|
||||
|
||||
err := store.Save(ctx, metadata)
|
||||
require.NoError(t, err)
|
||||
err := store.Save(ctx, metadata)
|
||||
require.NoError(t, err)
|
||||
|
||||
metadataKey := MetadataKey{
|
||||
Namespace: "default",
|
||||
Group: "apps",
|
||||
Resource: "resource",
|
||||
}
|
||||
metadataKey := MetadataKey{
|
||||
Namespace: "default",
|
||||
Group: "apps",
|
||||
Resource: "resource",
|
||||
}
|
||||
|
||||
retrievedMetadata, err := store.Get(ctx, metadataKey)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, metadata, retrievedMetadata)
|
||||
retrievedMetadata, err := store.Get(ctx, metadataKey)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, metadata, retrievedMetadata)
|
||||
})
|
||||
|
||||
t.Run("GetAll", func(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
store := setupTestMetadataStore(t)
|
||||
metadatas := []Metadata{
|
||||
{
|
||||
Namespace: "stacks-1",
|
||||
Group: "apps",
|
||||
Resource: "resource",
|
||||
LastImportTime: time.Now().Add(-2 * time.Minute).Truncate(time.Microsecond),
|
||||
},
|
||||
{
|
||||
Namespace: "stacks-2",
|
||||
Group: "apps",
|
||||
Resource: "resource",
|
||||
LastImportTime: time.Now().Add(-7 * time.Minute).Truncate(time.Microsecond),
|
||||
},
|
||||
{
|
||||
Namespace: "stacks-3",
|
||||
Group: "apps",
|
||||
Resource: "resource",
|
||||
LastImportTime: time.Now().Add(-3 * time.Minute).Truncate(time.Microsecond),
|
||||
},
|
||||
{
|
||||
Namespace: "stacks-4",
|
||||
Group: "apps",
|
||||
Resource: "resource",
|
||||
LastImportTime: time.Now().Add(-24 * time.Minute).Truncate(time.Microsecond),
|
||||
},
|
||||
{
|
||||
Namespace: "stacks-5",
|
||||
Group: "apps",
|
||||
Resource: "resource",
|
||||
LastImportTime: time.Now().Add(-44 * time.Minute).Truncate(time.Microsecond),
|
||||
},
|
||||
}
|
||||
|
||||
for _, metadata := range metadatas {
|
||||
err := store.Save(ctx, metadata)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
var i int
|
||||
for metadata, err := range store.GetAll(ctx) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, metadatas[i], metadata)
|
||||
i++
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user