coord

package
v0.56.0 Latest Latest
Warning

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

Go to latest
Published: Jul 11, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrLeaseReleased indicates a write lease has already been released.
	ErrLeaseReleased = errors.New("coord: lease released")
	// ErrStaleGeneration indicates a writer published from an old generation.
	ErrStaleGeneration = errors.New("coord: stale generation")
)
View Source
var (
	// ErrUnsupported indicates a scoped ObjectStore does not support direct coordination.
	ErrUnsupported = errors.New("coord: unsupported")
)

Functions

This section is empty.

Types

type BackendKind added in v0.52.0

type BackendKind string

BackendKind identifies the storage backend behind a coordination capability.

const (
	// BackendKindUnknown means the backend was not identified.
	BackendKindUnknown BackendKind = ""
	// BackendKindInMemory identifies the in-memory coordinator.
	BackendKindInMemory BackendKind = "in-memory"
	// BackendKindBbolt identifies the bbolt coordinator adapter.
	BackendKindBbolt BackendKind = "bbolt"
	// BackendKindOPFS identifies the OPFS coordinator adapter.
	BackendKindOPFS BackendKind = "opfs"
	// BackendKindRPC identifies a remote coordinator adapter.
	BackendKindRPC BackendKind = "rpc"
	// BackendKindUnsupported identifies a backend with no direct coordinator.
	BackendKindUnsupported BackendKind = "unsupported"
)

type Capability added in v0.52.0

type Capability struct {
	// Supported is true when direct coordination is available.
	Supported bool
	// Backend identifies the backend that would coordinate the scope.
	Backend BackendKind
	// VolumeID is the owning Volume id.
	VolumeID string
	// ObjectStoreID is the ObjectStore id inside the Volume.
	ObjectStoreID string
	// Generation is the latest durable generation observed by the coordinator.
	Generation uint64
	// FallbackReason explains why Supported is false.
	FallbackReason FallbackReason
}

Capability describes direct coordination support for a scoped ObjectStore.

type Coordinator

type Coordinator interface {
	// Capability reports whether the scoped ObjectStore supports direct
	// multi-writer coordination and why callers must fall back when it does not.
	Capability(ctx context.Context, scope Scope) (*Capability, error)
	// Snapshot returns the latest durable generation and root metadata.
	Snapshot(ctx context.Context, scope Scope) (*Snapshot, error)
	// Watch returns root, prefix, lock, and fallback events after generation.
	Watch(ctx context.Context, scope Scope, afterGeneration uint64) (Watch, error)
	// TryAcquireWriteLease attempts to acquire the logical write lease.
	TryAcquireWriteLease(ctx context.Context, scope Scope) (WriteLease, bool, error)
	// WaitAcquireWriteLease waits until the logical write lease is available.
	WaitAcquireWriteLease(ctx context.Context, scope Scope) (WriteLease, error)
}

Coordinator provides backend-neutral coordination for one Volume.

type Event added in v0.52.0

type Event struct {
	// ProcessID identifies the process that produced or requested the event.
	ProcessID string
	// VolumeID is the owning Volume id.
	VolumeID string
	// ObjectStoreID is the ObjectStore id inside the Volume.
	ObjectStoreID string
	// Generation is the durable generation associated with this event.
	Generation uint64
	// WantLock is true when another participant is waiting for the write lease.
	WantLock bool
	// Unlocked is true when a participant released the write lease.
	Unlocked bool
	// RootChanged carries the accepted root after a commit.
	RootChanged *bucket.ObjectRef
	// KeyPrefixChanged carries a key prefix invalidated by a commit.
	KeyPrefixChanged []byte
	// FallbackReason carries a visible fallback reason when direct coordination fails.
	FallbackReason FallbackReason
}

Event reports a coordination state change for a scoped ObjectStore.

type FallbackReason added in v0.52.0

type FallbackReason string

FallbackReason explains why a caller must use the proxy/RPC fallback path.

const (
	// FallbackReasonNone means no fallback is required.
	FallbackReasonNone FallbackReason = ""
	// FallbackReasonUnsupported means the scoped backend has no coordinator.
	FallbackReasonUnsupported FallbackReason = "unsupported"
	// FallbackReasonDescriptorInvalid means a direct descriptor failed validation.
	FallbackReasonDescriptorInvalid FallbackReason = "descriptor-invalid"
	// FallbackReasonDescriptorStale means the direct descriptor was for an old generation.
	FallbackReasonDescriptorStale FallbackReason = "descriptor-stale"
)

type Scope added in v0.52.0

type Scope struct {
	// VolumeID is the owning Volume id.
	VolumeID string
	// ObjectStoreID is the ObjectStore id inside the Volume.
	ObjectStoreID string
	// ParticipantID identifies the process or handle performing the operation.
	ParticipantID string
}

Scope identifies the coordinated ObjectStore inside a Volume.

type Snapshot added in v0.52.0

type Snapshot struct {
	// VolumeID is the owning Volume id.
	VolumeID string
	// ObjectStoreID is the ObjectStore id inside the Volume.
	ObjectStoreID string
	// Generation is the latest durable generation.
	Generation uint64
	// Root is the latest durable ObjectStore root.
	Root *bucket.ObjectRef
}

Snapshot captures the latest durable generation and root metadata.

type UnsupportedCoordinator added in v0.52.0

type UnsupportedCoordinator struct {
	// Backend is the unsupported backend kind to report.
	Backend BackendKind
	// Reason is the fallback reason to report.
	Reason FallbackReason
}

UnsupportedCoordinator reports explicit proxy/RPC fallback for a Volume.

func NewUnsupportedCoordinator added in v0.52.0

func NewUnsupportedCoordinator(backend BackendKind, reason FallbackReason) *UnsupportedCoordinator

NewUnsupportedCoordinator builds a Coordinator for unsupported backends.

func (*UnsupportedCoordinator) Capability added in v0.52.0

func (c *UnsupportedCoordinator) Capability(ctx context.Context, scope Scope) (*Capability, error)

Capability reports an unsupported coordination capability.

func (*UnsupportedCoordinator) Snapshot added in v0.52.0

func (c *UnsupportedCoordinator) Snapshot(ctx context.Context, scope Scope) (*Snapshot, error)

Snapshot returns ErrUnsupported because no durable coordination snapshot exists.

func (*UnsupportedCoordinator) TryAcquireWriteLease added in v0.52.0

func (c *UnsupportedCoordinator) TryAcquireWriteLease(ctx context.Context, scope Scope) (WriteLease, bool, error)

TryAcquireWriteLease returns ErrUnsupported because no direct lease exists.

func (*UnsupportedCoordinator) WaitAcquireWriteLease added in v0.52.0

func (c *UnsupportedCoordinator) WaitAcquireWriteLease(ctx context.Context, scope Scope) (WriteLease, error)

WaitAcquireWriteLease returns ErrUnsupported because no direct lease exists.

func (*UnsupportedCoordinator) Watch added in v0.52.0

func (c *UnsupportedCoordinator) Watch(ctx context.Context, scope Scope, afterGeneration uint64) (Watch, error)

Watch returns ErrUnsupported because the backend has no direct event stream.

type Watch added in v0.52.0

type Watch interface {
	// Events returns the event stream for this watch.
	Events() <-chan Event
	// Close releases resources held by this watch.
	Close() error
}

Watch streams coordination events until closed or until its context ends.

type WriteLease added in v0.52.0

type WriteLease interface {
	// Refresh returns the latest durable generation and root before writing.
	Refresh(ctx context.Context) (*Snapshot, error)
	// Publish records an accepted generation/root/prefix change.
	Publish(ctx context.Context, event Event) (*Snapshot, error)
	// Release releases the logical write lease.
	Release(ctx context.Context) error
}

WriteLease owns one logical write turn for a scoped ObjectStore.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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