objstore

package
v1.2.5 Latest Latest
Warning

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

Go to latest
Published: Sep 23, 2024 License: Apache-2.0 Imports: 5 Imported by: 0

Documentation

Index

Constants

View Source
const ObjStoreUpdateVersionAny int64 = 0

Use for version passed to Update to ignore version check

Variables

View Source
var ErrKVStoreNotInitialized = errors.New("Object Storage not initialized")
View Source
var SyncActionStrs = [...]string{
	"update",
	"delete",
	"list-start",
	"list",
	"list-end",
}

Functions

func DbKeyPrefixParse

func DbKeyPrefixParse(inkey string) (region, typ, key string, err error)

func DbKeyPrefixRemove

func DbKeyPrefixRemove(key string) string

func DbKeyPrefixString

func DbKeyPrefixString(typ string) string

func DbKeyString

func DbKeyString(typ string, key ObjKey) string

func ExistsError

func ExistsError(key string) error

func GetRegion

func GetRegion() uint32

func NotFoundError

func NotFoundError(key string) error

Types

type FieldMap

type FieldMap interface {
	// Has returns true if the fieldKey is specified.
	Has(fieldKey string) bool
	// Fields returns all the specified fields.
	Fields() []string
}

FieldMap is used to check if a member field of an object was specified. This is used to distinguish between a zero value vs a "not set" value for updates.

type KVOp

type KVOp func(opts *KVOptions)

func WithLease

func WithLease(leaseID int64) KVOp

func WithRevision

func WithRevision(rev int64) KVOp

type KVOptions

type KVOptions struct {
	LeaseID int64
	Rev     int64
}

func GetKVOptions

func GetKVOptions(opts []KVOp) *KVOptions

func (*KVOptions) Apply

func (o *KVOptions) Apply(opts []KVOp)

type KVStore

type KVStore interface {
	// Create creates an object with the given string key and value.
	// Create should fail if the key already exists.
	// It returns the revision (transaction) number and any error.
	Create(ctx context.Context, key, val string) (int64, error)
	// Update updates an object with the given string key and value.
	// Update should fail if the key does not exist, or if the version
	// doesn't match (meaning some other thread has already updated it).
	// It returns the revision (transaction) number and any error.
	Update(ctx context.Context, key, val string, version int64) (int64, error)
	// Delete deletes an object with the given key string.
	// It returns the revision (transaction) number and any error.
	Delete(ctx context.Context, key string) (int64, error)
	// Get retrieves a single object with the given key string.
	// Get returns the data, a version, mod revision, and any error.
	Get(key string, opts ...KVOp) ([]byte, int64, int64, error)
	// Put the key-value pair, regardless of whether it already exists or not.
	Put(ctx context.Context, key, val string, opts ...KVOp) (int64, error)
	// List retrives all objects that have the given key string prefix.
	List(key string, cb ListCb) error
	// Sync is a blocking call used to keep in sync with the database.
	// The initial call (or sometimes after a reconnect), the full set
	// of objects will be called back. Afterwards, or after reconnect
	// if the history is still present, only changes will be called back.
	// It is up to the caller to resync their local cache given actions
	// of SyncAllStart and SyncAllEnd. Any objects that were not received
	// during that time must be removed from the local cache.
	// Use a context with cancel to be able to cancel the call.
	Sync(ctx context.Context, key string, cb SyncCb) error
	// ApplySTM applies a Software Transaction Model which basically
	// collects gets/puts and does an all-or-nothing transaction.
	// It tracks revisions for all gets and puts. If any keys were
	// changed before the transaction commits, all changes are aborted.
	// Apply func is the function to make the changes which uses the
	// STM to make the changes.
	// Unfortunately the way etcd sets this up, there's no way to wrap
	// the STM with an objstore-specific interface, so we're stuck exactly
	// implementing the etcd-specific interface.
	// Important: Etcd apparently does not honor the order in which
	// multiple puts appear within an apply func, at least for watch
	// callbacks (perhaps because they all have the same revision ID).
	// If ordering is important, do not use multiple puts in the same STM.
	ApplySTM(ctx context.Context, apply func(concurrency.STM) error) (int64, error)
	// Leases work like etcd leases. A key committed with a lease will
	// automatically be deleted once the lease expires.
	// To avoid that, the KeepAlive call must remain active.
	// Grant creates a new lease
	Grant(ctx context.Context, ttl int64) (int64, error)
	// Revoke a lease
	Revoke(ctx context.Context, lease int64) error
	// KeepAlive keeps a lease alive. This call blocks.
	KeepAlive(ctx context.Context, leaseID int64) error
}

type ListCb

type ListCb func(key, val []byte, rev, modRev int64) error

Callback function for List function

type Obj

type Obj interface {
	// Validate checks all object fields to make sure they do not
	// contain invalid data. Primarily used to validate data passed
	// in by a user. FieldMap specifies fields for update, allowing
	// to distinguish between the zero value and "not set".
	// It will be nil for create.
	Validate(fmap FieldMap) error
	// CopyInFields copies in modified fields for an Update.
	//CopyInFields(src Obj)
	// GetObjKey returns the ObjKey that uniquely identifies the object.
	GetObjKey() ObjKey
	// HasFields returns true if the object contains a Fields []string
	// field used for updating only certain fields on Update.
	HasFields() bool
}

Any object that wants to be stored in the database needs to implement the Obj interface.

type ObjKey

type ObjKey interface {
	// GetKeyString returns a string representation of the ObjKey
	GetKeyString() string
	// Validate checks that the key object fields do not contain
	// invalid or missing data.
	ValidateKey() error
	// NotFoundError returns a not found error describing the key.
	NotFoundError() error
	// ExistsError returns an already exists error describing the key.
	ExistsError() error
	// Get key tags for logging and tagging
	GetTags() map[string]string
}

ObjKey is the struct on the Object that uniquely identifies the Object.

type SyncCb

type SyncCb func(ctx context.Context, data *SyncCbData)

type SyncCbAction

type SyncCbAction int32
const (
	SyncUpdate SyncCbAction = iota
	SyncDelete
	SyncListStart
	SyncList
	SyncListEnd
)

type SyncCbData

type SyncCbData struct {
	// action on the data
	Action SyncCbAction
	// key - will be nil for action SyncListAllStart/End/Error
	Key []byte
	// value - will be nil for action SyncListAllStart/End/Error
	Value []byte
	// global revision of the data
	Rev int64
	// last modified revision of the data
	ModRev int64
	// MoreEvents indicates there are more changes in the revision.
	// With transactions, multiple changes can be done in the same
	// revision, but each change is called back separately.
	// MoreEvents is set to true if there are more changes to be
	// called back for the current revision.
	MoreEvents bool
}

Jump to

Keyboard shortcuts

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