Documentation ¶
Overview ¶
The storage package provides a key/value based interface for storing Kapacitor metadata. All services wishing to store data should use this interface.
The usage patterns for this storage layer are typical create/replace/delete/get/list operations. Typically objects are serialized and stored as the value. As a result, updates to a single field of an object can incur the cost to retrieve the entire object and store it again. In most cases this is acceptable since modifications are rare and object size is small.
A BoltDB backed implementation is also provided.
Index ¶
- Constants
- Variables
- func DoListFunc(list []*KeyValue, match func(value []byte) bool, offset, limit int) []string
- func DoUpdate(o TxOperator, f func(Tx) error) error
- func DoView(o TxOperator, f func(ReadOnlyTx) error) error
- func ImpossibleTypeErr(exp interface{}, got interface{}) error
- func VersionJSONDecode(data []byte, decF func(version int, dec *json.Decoder) error) error
- func VersionJSONEncode(version int, o interface{}) ([]byte, error)
- type BinaryObject
- type Bolt
- func (b *Bolt) BeginReadOnlyTx() (ReadOnlyTx, error)
- func (b *Bolt) BeginTx() (Tx, error)
- func (b *Bolt) Delete(key string) error
- func (b *Bolt) Exists(key string) (exists bool, err error)
- func (b *Bolt) Get(key string) (kv *KeyValue, err error)
- func (b *Bolt) List(prefix string) (kvs []*KeyValue, err error)
- func (b *Bolt) Put(key string, value []byte) error
- func (b *Bolt) Update(f func(tx Tx) error) error
- func (b *Bolt) View(f func(tx ReadOnlyTx) error) error
- type Config
- type Index
- type IndexedStore
- func (s *IndexedStore) Create(o BinaryObject) error
- func (s *IndexedStore) Delete(id string) error
- func (s *IndexedStore) Get(id string) (o BinaryObject, err error)
- func (s *IndexedStore) List(index, pattern string, offset, limit int) ([]BinaryObject, error)
- func (s *IndexedStore) Put(o BinaryObject) error
- func (s *IndexedStore) Replace(o BinaryObject) error
- func (s *IndexedStore) ReverseList(index, pattern string, offset, limit int) ([]BinaryObject, error)
- type IndexedStoreConfig
- type Interface
- type KeyValue
- type MemStore
- func (s *MemStore) BeginReadOnlyTx() (ReadOnlyTx, error)
- func (s *MemStore) BeginTx() (Tx, error)
- func (s *MemStore) Delete(key string) error
- func (s *MemStore) Exists(key string) (bool, error)
- func (s *MemStore) Get(key string) (*KeyValue, error)
- func (s *MemStore) List(prefix string) ([]*KeyValue, error)
- func (s *MemStore) Put(key string, value []byte) error
- func (s *MemStore) Update(f func(tx Tx) error) error
- func (s *MemStore) View(f func(tx ReadOnlyTx) error) error
- type NewObjectF
- type ReadOnlyTx
- type ReadOperator
- type Service
- type Tx
- type TxOperator
- type ValueFunc
- type VersionWrapper
- type WriteOperator
Constants ¶
const (
DefaultIDIndex = "id"
)
Variables ¶
var ( ErrObjectExists = errors.New("object already exists") ErrNoObjectExists = errors.New("no object exists") )
var (
ErrNoKeyExists = errors.New("no key exists")
)
Common errors that can be returned
Functions ¶
func DoListFunc ¶
Return a list of values from a list of KeyValues using an offset/limit bound and a match function.
func DoUpdate ¶ added in v1.2.0
func DoUpdate(o TxOperator, f func(Tx) error) error
DoUpdate provides a complete implementation of Interface.Update for a TxOperator.
func DoView ¶ added in v1.2.0
func DoView(o TxOperator, f func(ReadOnlyTx) error) error
View manages a read only transaction.
func ImpossibleTypeErr ¶ added in v1.2.0
func ImpossibleTypeErr(exp interface{}, got interface{}) error
func VersionJSONDecode ¶ added in v1.2.0
VersionJSONDecode decodes and object that was encoded using VersionJSONEncode.
func VersionJSONEncode ¶ added in v1.2.0
VersionJSONEncode encodes an object as json wrapping it in a VersionWrapper struct.
Types ¶
type BinaryObject ¶ added in v1.2.0
type BinaryObject interface { encoding.BinaryMarshaler encoding.BinaryUnmarshaler ObjectID() string }
type Bolt ¶
type Bolt struct {
// contains filtered or unexported fields
}
Bolt implementation of Store
func (*Bolt) BeginReadOnlyTx ¶ added in v1.2.0
func (b *Bolt) BeginReadOnlyTx() (ReadOnlyTx, error)
type Config ¶
type Config struct { // Path to a boltdb database file. BoltDBPath string `toml:"boltdb"` }
type IndexedStore ¶ added in v1.2.0
type IndexedStore struct {
// contains filtered or unexported fields
}
Indexed provides basic CRUD operations and maintains indexes.
func NewIndexedStore ¶ added in v1.2.0
func NewIndexedStore(store Interface, c IndexedStoreConfig) (*IndexedStore, error)
func (*IndexedStore) Create ¶ added in v1.2.0
func (s *IndexedStore) Create(o BinaryObject) error
func (*IndexedStore) Delete ¶ added in v1.2.0
func (s *IndexedStore) Delete(id string) error
func (*IndexedStore) Get ¶ added in v1.2.0
func (s *IndexedStore) Get(id string) (o BinaryObject, err error)
func (*IndexedStore) List ¶ added in v1.2.0
func (s *IndexedStore) List(index, pattern string, offset, limit int) ([]BinaryObject, error)
List returns a list of objects that match a given pattern. If limit < 0, then no limit is enforced.
func (*IndexedStore) Put ¶ added in v1.2.0
func (s *IndexedStore) Put(o BinaryObject) error
func (*IndexedStore) Replace ¶ added in v1.2.0
func (s *IndexedStore) Replace(o BinaryObject) error
func (*IndexedStore) ReverseList ¶ added in v1.2.0
func (s *IndexedStore) ReverseList(index, pattern string, offset, limit int) ([]BinaryObject, error)
ReverseList returns a list of objects that match a given pattern, using reverse sort. If limit < 0, then no limit is enforced.
type IndexedStoreConfig ¶ added in v1.2.0
type IndexedStoreConfig struct { Prefix string DataPrefix string IndexesPrefix string NewObject NewObjectF Indexes []Index }
func DefaultIndexedStoreConfig ¶ added in v1.2.0
func DefaultIndexedStoreConfig(prefix string, newObject NewObjectF) IndexedStoreConfig
func (IndexedStoreConfig) Validate ¶ added in v1.2.0
func (c IndexedStoreConfig) Validate() error
type Interface ¶
type Interface interface { // View creates a new read only transaction and always rolls it back. View(func(ReadOnlyTx) error) error // Update creates a new read-write transaction and always rolls it back. // If the function returns a nil error the transaction is committed, otherwise the error is returned. Update(func(Tx) error) error }
Common interface for interacting with a simple Key/Value storage
type MemStore ¶ added in v1.2.0
type MemStore struct { Name string // contains filtered or unexported fields }
MemStore is an in memory only implementation of the storage.Interface. This is intend to be used for testing use cases only.
func NewMemStore ¶ added in v1.2.0
func (*MemStore) BeginReadOnlyTx ¶ added in v1.2.0
func (s *MemStore) BeginReadOnlyTx() (ReadOnlyTx, error)
type NewObjectF ¶ added in v1.2.0
type NewObjectF func() BinaryObject
type ReadOnlyTx ¶ added in v1.2.0
type ReadOnlyTx interface { ReadOperator // Rollback signals that the transaction is complete. // If the transaction was not committed, then all changes are reverted. // Rollback must always be called for every transaction. Rollback() error }
ReadOnlyTx provides an interface for performing read operations in a single transaction.
type ReadOperator ¶ added in v1.2.0
type ReadOperator interface { // Retrieve a value. Get(key string) (*KeyValue, error) // Check if a key exists> Exists(key string) (bool, error) // List all values with given prefix. List(prefix string) ([]*KeyValue, error) }
ReadOperator provides an interface for performing read operations.
type Tx ¶ added in v1.2.0
type Tx interface { ReadOnlyTx WriteOperator // Commit finalizes the transaction. // Once a transaction is committed, rolling back the transaction has no effect. Commit() error }
Tx provides an interface for performing read and write storage operations in a single transaction.
type TxOperator ¶ added in v1.2.0
type TxOperator interface { // BeginReadOnlyTx starts a new read only transaction. The transaction must be rolledback. // Leaving a transaction open can block other operations and otherwise // significantly degrade the performance of the storage backend. // A single go routine should only have one transaction open at a time. BeginReadOnlyTx() (ReadOnlyTx, error) // BeginTx starts a new transaction for reads and writes. The transaction must be committed or rolledback. // Leaving a transaction open can block other operations and otherwise // significantly degrade the performance of the storage backend. // A single go routine should only have one transaction open at a time. BeginTx() (Tx, error) }
type ValueFunc ¶ added in v1.2.0
type ValueFunc func(BinaryObject) (string, error)
type VersionWrapper ¶ added in v1.2.0
type VersionWrapper struct { Version int `json:"version"` Value *json.RawMessage `json:"value"` }
VersionWrapper wraps a structure with a version so that changes to the structure can be properly decoded.