Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions cachew.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,5 @@ cache disk {
limit-mb = 250000
max-ttl = "8h"
}

metadata memory {}
20 changes: 10 additions & 10 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,16 +179,16 @@ func Load(
return nil, nil, errors.Errorf("%s: expected at least one cache backend", ast.Pos)
}

var metadata metadatadb.Backend
if classified.metadata != nil {
name, inner, err := unwrapBlock(classified.metadata)
if err != nil {
return nil, nil, err
}
metadata, err = mr.Create(ctx, name, inner, vars)
if err != nil {
return nil, nil, errors.Errorf("%s: %w", classified.metadata.Pos, err)
}
if classified.metadata == nil {
return nil, nil, errors.Errorf("%s: expected a metadata backend", ast.Pos)
}
metaName, metaInner, err := unwrapBlock(classified.metadata)
if err != nil {
return nil, nil, err
}
metadata, err := mr.Create(ctx, metaName, metaInner, vars)
if err != nil {
return nil, nil, errors.Errorf("%s: %w", classified.metadata.Pos, err)
}

cache := cache.MaybeNewTiered(ctx, caches)
Expand Down
24 changes: 24 additions & 0 deletions internal/config/config_test.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
package config //nolint:testpackage

import (
"context"
"log/slog"
"net/http"
"strings"
"testing"

"github.com/alecthomas/assert/v2"
"github.com/alecthomas/hcl/v2"

"github.com/block/cachew/internal/cache"
"github.com/block/cachew/internal/logging"
"github.com/block/cachew/internal/metadatadb"
"github.com/block/cachew/internal/strategy"
)

func TestUnwrapBlock(t *testing.T) {
Expand Down Expand Up @@ -175,3 +183,19 @@ git-clone {
})
}
}

func TestLoadRequiresMetadataBackend(t *testing.T) {
cr := cache.NewRegistry()
cache.RegisterMemory(cr)
mr := metadatadb.NewRegistry()
metadatadb.RegisterMemory(mr)
sr := strategy.NewRegistry()

ast, err := hcl.Parse(strings.NewReader(`cache memory {}`))
assert.NoError(t, err)

ctx := logging.ContextWithLogger(context.Background(), slog.Default())
_, _, err = Load(ctx, cr, mr, sr, ast, http.NewServeMux(), nil)
assert.Error(t, err)
assert.Contains(t, err.Error(), "expected a metadata backend")
}
5 changes: 4 additions & 1 deletion internal/metadatadb/memory.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@ import (
"sync"

"github.com/alecthomas/errors"

"github.com/block/cachew/internal/logging"
)

// RegisterMemory registers the in-memory metadata backend.
func RegisterMemory(r *Registry) {
Register(r, "memory", "In-memory metadata store for testing and single-instance deployments",
func(_ context.Context, _ MemoryConfig) (*MemoryBackend, error) {
func(ctx context.Context, _ MemoryConfig) (*MemoryBackend, error) {
logging.FromContext(ctx).InfoContext(ctx, "Constructing in-memory metadata backend")
return NewMemoryBackend(), nil
},
)
Expand Down
3 changes: 3 additions & 0 deletions internal/metadatadb/s3.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ func NewS3Backend(ctx context.Context, clientProvider s3client.ClientProvider, c
return nil, errors.Errorf("bucket %s does not exist", config.Bucket)
}

logging.FromContext(ctx).InfoContext(ctx, "Constructing S3 metadata backend",
"bucket", config.Bucket, "prefix", config.Prefix, "lock-ttl", config.LockTTL, "sync-interval", config.SyncInterval)

ctx, cancel := context.WithCancel(ctx)
return &S3Backend{
client: client,
Expand Down