state

package
v0.0.0-...-dfea14c Latest Latest
Warning

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

Go to latest
Published: Oct 31, 2019 License: MIT Imports: 2 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:

  • Redis
  • HashiCorp Consul
  • Etcd
  • Cassandra
  • Azure CosmosDB

Implementing a new State Store

A compliant state store needs to implement one or more interfaces: StateStore and TransactionalStateStore.

The interface for StateStore:

type StateStore 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 TransactionalStateStore:

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

Documentation

Index

Constants

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

Variables

This section is empty.

Functions

func CheckDeleteRequestOptions

func CheckDeleteRequestOptions(req *DeleteRequest) error

CheckDeleteRequestOptions checks if delete request options use supported keywords

func CheckSetRequestOptions

func CheckSetRequestOptions(req *SetRequest) error

CheckSetRequestOptions checks if set request options use supported keywords

func DeleteWithRetries

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

DeleteWithRetries handles SetRequest with retries

func SetWithRetries

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

SetWithRetries handles SetRequest with retries

Types

type DeleteRequest

type DeleteRequest struct {
	Key     string            `json:"key"`
	ETag    string            `json:"etag,omitempty"`
	Options DeleteStateOption `json:"options,omitempty"`
}

DeleteRequest is the object describing a delete state request

type DeleteStateOption

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

DeleteStateOption controls how a state store reacts to a delete request

type GetRequest

type GetRequest struct {
	Key     string         `json:"key"`
	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 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 RetryPolicy

type RetryPolicy struct {
	Interval  time.Duration `json:"interval"`
	Threshold int           `json:"threshold"`
	Pattern   string        `json:"pattern,omitempty"` //linear, exponential
}

RetryPolicy describes how retries should be handled

type SetRequest

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

SetRequest is the object describing an upsert request

type SetStateOption

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

SetStateOption controls how a state store reacts to a set request

type StateStore

type StateStore 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
}

StateStore is an interface to perform operations on store nolint:golint

type TransactionalRequest

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

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

type TransactionalStateStore

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

TransactionalStateStore is an interface for initialization and support multiple transactional requests

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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