boltprojection

package
v0.7.1 Latest Latest
Warning

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

Go to latest
Published: Apr 1, 2024 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

Package boltprojection provides utilities for building BoltDB-based projections.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func New

New returns a new Dogma projection message handler by binding a BoltDB-specific projection handler to a BoltDB database.

If db is nil the returned handler will return an error whenever an operation that requires the database is performed.

Types

type MessageHandler

type MessageHandler interface {
	// Configure produces a configuration for this handler by calling methods on
	// the configurer c.
	//
	// The implementation MUST allow for multiple calls to Configure(). Each
	// call SHOULD produce the same configuration.
	//
	// The engine MUST call Configure() before calling HandleEvent(). It is
	// RECOMMENDED that the engine only call Configure() once per handler.
	Configure(c dogma.ProjectionConfigurer)

	// HandleEvent updates the projection to reflect the occurrence of an event.
	//
	// Changes to the projection state MUST be performed within the supplied
	// transaction.
	//
	// If nil is returned, the projection state has been persisted successfully.
	//
	// If an error is returned, the projection SHOULD be left in the state it
	// was before HandleEvent() was called.
	//
	// The engine SHOULD provide "at-least-once" delivery guarantees to the
	// handler. That is, the engine should call HandleEvent() with the same
	// event message until a nil error is returned.
	//
	// The engine MAY provide guarantees about the order in which event messages
	// will be passed to HandleEvent(), however in the interest of engine
	// portability the implementation SHOULD NOT assume that HandleEvent() will
	// be called with events in the same order that they were recorded.
	//
	// The supplied context parameter SHOULD have a deadline. The implementation
	// SHOULD NOT impose its own deadline. Instead a suitable timeout duration
	// can be suggested to the engine via the handler's TimeoutHint() method.
	//
	// The engine MUST NOT call HandleEvent() with any message of a type that
	// has not been configured for consumption by a prior call to Configure().
	// If any such message is passed, the implementation MUST panic with the
	// UnexpectedMessage value.
	//
	// The engine MAY call HandleEvent() from multiple goroutines concurrently.
	HandleEvent(ctx context.Context, tx *bbolt.Tx, s dogma.ProjectionEventScope, m dogma.Message) error

	// TimeoutHint returns a duration that is suitable for computing a deadline
	// for the handling of the given message by this handler.
	//
	// The hint SHOULD be as short as possible. The implementation MAY return a
	// zero-value to indicate that no hint can be made.
	//
	// The engine SHOULD use a duration as close as possible to the hint. Use of
	// a duration shorter than the hint is NOT RECOMMENDED, as this will likely
	// lead to repeated message handling failures.
	TimeoutHint(m dogma.Message) time.Duration

	// Compact reduces the size of the projection's data.
	//
	// The implementation SHOULD attempt to decrease the size of the
	// projection's data by whatever means available. For example, it may delete
	// any unused data, or collapse multiple data sets into one.
	//
	// The context MAY have a deadline. The implementation SHOULD compact data
	// using multiple small transactions, such that if the deadline is reached a
	// future call to Compact() does not need to compact the same data.
	//
	// The engine SHOULD call Compact() repeatedly throughout the lifetime of
	// the projection. The precise scheduling of calls to Compact() are
	// engine-defined. It MAY be called concurrently with any other method.
	Compact(ctx context.Context, db *bbolt.DB, s dogma.ProjectionCompactScope) error
}

MessageHandler is a specialization of dogma.ProjectionMessageHandler that persists to a BoltDB database.

type NoCompactBehavior

type NoCompactBehavior struct{}

NoCompactBehavior can be embedded in MessageHandler implementations to indicate that the projection does not require its data to be compacted.

It provides an implementation of MessageHandler.Compact() that always returns a nil error.

func (NoCompactBehavior) Compact

Compact returns nil.

type ResourceRepository added in v0.6.4

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

ResourceRepository is an implementation of resource.Repository that stores resources versions in a BoltDB database.

func NewResourceRepository added in v0.6.4

func NewResourceRepository(
	db *bbolt.DB,
	key string,
) *ResourceRepository

NewResourceRepository returns a new BoltDB resource repository.

func (*ResourceRepository) DeleteResource added in v0.6.4

func (rr *ResourceRepository) DeleteResource(ctx context.Context, r []byte) error

DeleteResource removes all information about the resource r.

func (*ResourceRepository) ResourceVersion added in v0.6.4

func (rr *ResourceRepository) ResourceVersion(ctx context.Context, r []byte) ([]byte, error)

ResourceVersion returns the version of the resource r.

func (*ResourceRepository) StoreResourceVersion added in v0.6.4

func (rr *ResourceRepository) StoreResourceVersion(ctx context.Context, r, v []byte) error

StoreResourceVersion sets the version of the resource r to v without checking the current version.

func (*ResourceRepository) UpdateResourceVersion added in v0.6.4

func (rr *ResourceRepository) UpdateResourceVersion(
	ctx context.Context,
	r, c, n []byte,
) (ok bool, err error)

UpdateResourceVersion updates the version of the resource r to n.

If c is not the current version of r, it returns false and no update occurs.

func (*ResourceRepository) UpdateResourceVersionFn added in v0.6.4

func (rr *ResourceRepository) UpdateResourceVersionFn(
	ctx context.Context,
	r, c, n []byte,
	fn func(context.Context, *bbolt.Tx) error,
) (ok bool, err error)

UpdateResourceVersion updates the version of the resource r to n and performs a user-defined operation within the same transaction.

If c is not the current version of r, it returns false and no update occurs.

Directories

Path Synopsis
Package fixtures is a set of test fixtures and mocks for BoltDB projections.
Package fixtures is a set of test fixtures and mocks for BoltDB projections.

Jump to

Keyboard shortcuts

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