state

package
v0.0.0-...-a452e14 Latest Latest
Warning

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

Go to latest
Published: Nov 19, 2020 License: MIT Imports: 1 Imported by: 0

README

State Stores

State Stores provide a common way to interact with different data store implementations, and allow users to opt-in to advanced capabilities using defined metadata.

Currently supported state stores are:

  • AWS DynamoDB
  • Azure CosmosDB
  • Azure Table Storage
  • Cassandra
  • Cloud Firestore (Datastore mode)
  • CloudState
  • Couchbase
  • Etcd
  • HashiCorp Consul
  • Hazelcast
  • Memcached
  • MongoDB
  • Redis
  • SQL Server
  • Zookeeper
  • Cloud Firestore (Datastore mode)
  • Couchbase

Implementing a new State Store

A compliant state store needs to implement one or more interfaces: Store and TransactionalStore.

The interface for Store:

type Store interface {
	Init(metadata Metadata) error
	Delete(req *DeleteRequest) error
	BulkDelete(req []DeleteRequest) error
	Get(req *GetRequest) (*GetResponse, error)
	Set(req *SetRequest) error
	BulkSet(req []SetRequest) error
}

The interface for TransactionalStore:

type TransactionalStore interface {
	Init(metadata Metadata) error
	Multi(reqs []TransactionalRequest) error
}

See the documentation repo for examples.

Documentation

Index

Constants

View Source
const (
	FirstWrite = "first-write"
	LastWrite  = "last-write"
	Strong     = "strong"
	Eventual   = "eventual"
)

Variables

This section is empty.

Functions

func CheckRequestOptions

func CheckRequestOptions(options interface{}) error

CheckRequestOptions checks if request options use supported keywords

func DeleteWithOptions

func DeleteWithOptions(method func(req *DeleteRequest) error, req *DeleteRequest) error

DeleteWithOptions handles DeleteRequest with options

func SetWithOptions

func SetWithOptions(method func(req *SetRequest) error, req *SetRequest) error

SetWithOptions handles SetRequest with request options

Types

type DeleteRequest

type DeleteRequest struct {
	Key      string            `json:"key"`
	ETag     string            `json:"etag,omitempty"`
	Metadata map[string]string `json:"metadata"`
	Options  DeleteStateOption `json:"options,omitempty"`
}

DeleteRequest is the object describing a delete state request

func (DeleteRequest) GetKey

func (r DeleteRequest) GetKey() string

Key gets the Key on a DeleteRequest

func (DeleteRequest) GetMetadata

func (r DeleteRequest) GetMetadata() map[string]string

Metadata gets the Metadata on a DeleteRequest

type DeleteStateOption

type DeleteStateOption struct {
	Concurrency string `json:"concurrency,omitempty"` //"concurrency"
	Consistency string `json:"consistency"`           //"eventual, strong"
}

DeleteStateOption controls how a state store reacts to a delete request

type GetRequest

type GetRequest struct {
	Key      string            `json:"key"`
	Metadata map[string]string `json:"metadata"`
	Options  GetStateOption    `json:"options,omitempty"`
}

GetRequest is the object describing a state fetch request

type GetResponse

type GetResponse struct {
	Data     []byte            `json:"data"`
	ETag     string            `json:"etag,omitempty"`
	Metadata map[string]string `json:"metadata"`
}

GetResponse is the request object for getting state

type GetStateOption

type GetStateOption struct {
	Consistency string `json:"consistency"` //"eventual, strong"
}

GetStateOption controls how a state store reacts to a get request

type KeyInt

type KeyInt interface {
	GetKey() string
	GetMetadata() map[string]string
}

KeyInt is an interface that allows gets of the Key and Metadata inside requests

type Metadata

type Metadata struct {
	Properties map[string]string `json:"properties"`
}

Metadata contains a state store specific set of metadata properties

type OperationType

type OperationType string

OperationType describes a CRUD operation performed against a state store

const Delete OperationType = "delete"

Delete is a delete operation

const Upsert OperationType = "upsert"

Upsert is an update or create operation

type SetRequest

type SetRequest struct {
	Key      string            `json:"key"`
	Value    interface{}       `json:"value"`
	ETag     string            `json:"etag,omitempty"`
	Metadata map[string]string `json:"metadata,omitempty"`
	Options  SetStateOption    `json:"options,omitempty"`
}

SetRequest is the object describing an upsert request

func (SetRequest) GetKey

func (r SetRequest) GetKey() string

GetKey gets the Key on a SetRequest

func (SetRequest) GetMetadata

func (r SetRequest) GetMetadata() map[string]string

GetMetadata gets the Key on a SetRequest

type SetStateOption

type SetStateOption struct {
	Concurrency string `json:"concurrency,omitempty"` //first-write, last-write
	Consistency string `json:"consistency"`           //"eventual, strong"
}

SetStateOption controls how a state store reacts to a set request

type Store

type Store interface {
	Init(metadata Metadata) error
	Delete(req *DeleteRequest) error
	BulkDelete(req []DeleteRequest) error
	Get(req *GetRequest) (*GetResponse, error)
	Set(req *SetRequest) error
	BulkSet(req []SetRequest) error
}

Store is an interface to perform operations on store

type TransactionalStateOperation

type TransactionalStateOperation struct {
	Operation OperationType `json:"operation"`
	Request   interface{}   `json:"request"`
}

TransactionalStateOperation describes operation type, key, and value for transactional operation.

type TransactionalStateRequest

type TransactionalStateRequest struct {
	Operations []TransactionalStateOperation `json:"operations"`
	Metadata   map[string]string             `json:"metadata,omitempty"`
}

TransactionalStateRequest describes a transactional operation against a state store that comprises multiple types of operations The Request field is either a DeleteRequest or SetRequest

type TransactionalStore

type TransactionalStore interface {
	Init(metadata Metadata) error
	Multi(request *TransactionalStateRequest) error
}

TransactionalStore is an interface for initialization and support multiple transactional requests

Directories

Path Synopsis
aws
azure
gcp
hashicorp
Package zookeeper is a generated GoMock package.
Package zookeeper is a generated GoMock package.

Jump to

Keyboard shortcuts

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