storage

package
v0.42.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 28, 2026 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Overview

Package storage keeps the divergences that mirrors report to the SPECTRE server. A URL selects the backend by its scheme, such as memory://, redis://, or redis-cluster://.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	Storage *url.URL `` /* 234-byte string literal not displayed */
}

Config selects where the SPECTRE server keeps divergences.

func (Config) Validate

func (c Config) Validate() error

Validate checks that a backend serves the storage URL's scheme.

type Constructor added in v0.41.0

type Constructor func(ctx context.Context, storageURL *url.URL) (Store, error)

Constructor opens a store at a URL whose scheme it is registered for.

type Memory

type Memory struct {
	// contains filtered or unexported fields
}

Memory keeps divergences in memory, so a restart loses them. Stored divergences share their slices with callers, who never mutate them.

func NewMemory

func NewMemory() *Memory

NewMemory returns an empty in-memory store.

func (*Memory) Clear

func (m *Memory) Clear(_ context.Context, service, environment string) error

Clear removes the divergences of both directions of a service environment's mirror.

func (*Memory) Close

func (m *Memory) Close() error

Close does nothing, because memory holds no resources.

func (*Memory) List

func (m *Memory) List(_ context.Context) ([]model.Divergence, error)

List returns every stored divergence, in no particular order.

func (*Memory) Record

func (m *Memory) Record(_ context.Context, divergence model.Divergence) error

Record keeps a divergence unless its source has already reported a later quarantine.

type Redis

type Redis struct {
	// contains filtered or unexported fields
}

Redis keeps divergences in one hash, shared by servers using the same database. Commands touch only that key, so in a cluster one node's slot serves them all.

func NewRedis

func NewRedis(ctx context.Context, storageURL *url.URL) (*Redis, error)

NewRedis connects to the Redis server at a redis:// or rediss:// URL, or to the Redis Cluster at a redis-cluster:// or rediss-cluster:// URL.

func (*Redis) Clear

func (r *Redis) Clear(ctx context.Context, service, environment string) error

Clear removes the divergences of both directions of a service environment's mirror.

func (*Redis) Close

func (r *Redis) Close() error

Close disconnects from Redis.

func (*Redis) List

func (r *Redis) List(ctx context.Context) ([]model.Divergence, error)

List returns every stored divergence, in no particular order.

func (*Redis) Record

func (r *Redis) Record(ctx context.Context, divergence model.Divergence) error

Record keeps a divergence unless its source has already reported a later quarantine.

type Store

type Store interface {
	// Record keeps a divergence unless its source has already reported a later quarantine.
	Record(ctx context.Context, divergence model.Divergence) error
	// Clear removes the divergences of both directions of a service environment's mirror.
	Clear(ctx context.Context, service, environment string) error
	// List returns every stored divergence, in no particular order.
	List(ctx context.Context) ([]model.Divergence, error)
	Close() error
}

Store keeps the latest divergence of each mirror direction. Callers validate divergences before recording them and never mutate stored or listed ones.

func Open

func Open(ctx context.Context, config Config) (Store, error)

Open returns the store the configuration's URL selects.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL