storage

package
v0.48.0 Latest Latest
Warning

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

Go to latest
Published: Nov 4, 2026 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Overview

Package storage keeps the states 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 `` /* 236-byte string literal not displayed */
}

Config selects where the SPECTRE server keeps mirror states.

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 states in memory, so a restart loses them. Stored states share their maps 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, at time.Time) error

Clear removes the divergences of a service environment's mirror, and ignores its quarantines that began before at.

func (*Memory) Close

func (m *Memory) Close() error

Close does nothing, because memory holds no resources.

func (*Memory) Divergences added in v0.47.0

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

Divergences returns every stored divergence, in no particular order.

func (*Memory) Put added in v0.47.0

func (m *Memory) Put(_ context.Context, state model.State, at time.Time) error

Put replaces the state of a service environment's mirror.

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, or its service environment was cleared after it began.

func (*Memory) States added in v0.47.0

func (m *Memory) States(_ context.Context, since time.Time) ([]model.State, error)

States returns the states received at or after since, in no particular order, and forgets older ones.

type Redis

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

Redis keeps states and divergences in two hashes, shared by servers using the same database. Each command touches one key, so it works in a cluster.

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, at time.Time) error

Clear removes the divergences of a service environment's mirror, and ignores its quarantines that began before at.

func (*Redis) Close

func (r *Redis) Close() error

Close disconnects from Redis.

func (*Redis) Divergences added in v0.47.0

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

Divergences returns every stored divergence, in no particular order.

func (*Redis) Put added in v0.47.0

func (r *Redis) Put(ctx context.Context, state model.State, at time.Time) error

Put replaces the state of a service environment's mirror.

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, or its service environment was cleared after it began.

func (*Redis) States added in v0.47.0

func (r *Redis) States(ctx context.Context, since time.Time) ([]model.State, error)

States returns the states received at or after since, in no particular order, and forgets older ones.

type Store

type Store interface {
	// Put replaces the state of a service environment's mirror.
	Put(ctx context.Context, state model.State, received time.Time) error
	// States returns the states received at or after since, in no particular
	// order, and forgets older ones.
	States(ctx context.Context, since time.Time) ([]model.State, error)
	// Record keeps a divergence unless its source has already reported a later
	// quarantine, or its service environment was cleared after it began.
	Record(ctx context.Context, divergence model.Divergence) error
	// Clear removes the divergences of a service environment's mirror, and
	// ignores its quarantines that began before at.
	Clear(ctx context.Context, service, environment string, at time.Time) error
	// Divergences returns every stored divergence, in no particular order.
	Divergences(ctx context.Context) ([]model.Divergence, error)
	Close() error
}

Store keeps the latest state of each service environment's mirror, with when the server received it. Callers validate states and never mutate stored 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