Documentation ¶
Overview ¶
Package storage exposes the policy engine's storage layer.
Index ¶
- Constants
- Variables
- func IsIndexingNotSupported(err error) bool
- func IsInvalidPatch(err error) bool
- func IsInvalidTransaction(err error) bool
- func IsNotFound(err error) bool
- func ReadOne(ctx context.Context, store Store, path Path) (interface{}, error)
- func WriteOne(ctx context.Context, store Store, op PatchOp, path Path, value interface{}) error
- type DataEvent
- type Error
- type Index
- type IndexIterator
- type Indexing
- type IndexingNotSupported
- type PatchOp
- type Path
- type Policy
- type PolicyEvent
- type PolicyNotSupported
- func (PolicyNotSupported) DeletePolicy(context.Context, Transaction, string) error
- func (PolicyNotSupported) GetPolicy(context.Context, Transaction, string) ([]byte, error)
- func (PolicyNotSupported) ListPolicies(context.Context, Transaction) ([]string, error)
- func (PolicyNotSupported) UpsertPolicy(context.Context, Transaction, string, []byte) error
- type Store
- type Transaction
- type TransactionParams
- type Trigger
- type TriggerConfig
- type TriggerEvent
- type TriggerHandle
- type TriggersNotSupported
- type WritesNotSupported
Constants ¶
const ( // InternalErr indicates an unknown, internal error has occurred. InternalErr = "storage_internal_error" // NotFoundErr indicates the path used in the storage operation does not // locate a document. NotFoundErr = "storage_not_found_error" // InvalidPatchErr indicates an invalid patch/write was issued. The patch // was rejected. InvalidPatchErr = "storage_invalid_patch_error" // InvalidTransactionErr indicates an invalid operation was performed // inside of the transaction. InvalidTransactionErr = "storage_invalid_txn_error" // TriggersNotSupportedErr indicates the caller attempted to register a // trigger against a store that does not support them. TriggersNotSupportedErr = "storage_triggers_not_supported_error" // WritesNotSupportedErr indicate the caller attempted to perform a write // against a store that does not support them. WritesNotSupportedErr = "storage_writes_not_supported_error" // PolicyNotSupportedErr indicate the caller attempted to perform a policy // management operation against a store that does not support them. PolicyNotSupportedErr = "storage_policy_not_supported_error" // IndexingNotSupportedErr indicate the caller attempted to perform an // indexing operation against a store that does not support them. IndexingNotSupportedErr = "storage_indexing_not_supported_error" )
const ( AddOp PatchOp = iota RemoveOp = iota ReplaceOp = iota )
Patch supports add, remove, and replace operations.
Variables ¶
var WriteParams = TransactionParams{ Write: true, }
WriteParams specifies the TransactionParams for a write transaction.
Functions ¶
func IsIndexingNotSupported ¶ added in v0.5.0
IsIndexingNotSupported returns true if this error is a IndexingNotSupportedErr.
func IsInvalidPatch ¶ added in v0.2.0
IsInvalidPatch returns true if this error is a InvalidPatchErr.
func IsInvalidTransaction ¶ added in v0.5.0
IsInvalidTransaction returns true if this error is a InvalidTransactionErr.
func IsNotFound ¶
IsNotFound returns true if this error is a NotFoundErr.
func ReadOne ¶ added in v0.5.3
ReadOne is a convenience function to read a single value from the provided Store. It will create a new Transaction to perform the read with, and clean up after itself should an error occur.
Types ¶
type Index ¶
type Index interface {
Lookup(ctx context.Context, txn Transaction, value interface{}, iter IndexIterator) error
}
Index defines the interface for searching a pre-built index.
type IndexIterator ¶ added in v0.5.0
IndexIterator defines the interface for iterating over index results.
type IndexingNotSupported ¶ added in v0.5.0
type IndexingNotSupported struct{}
IndexingNotSupported provides default implementations of the Indexing interface which may be used if the backend does not support indexing.
func (IndexingNotSupported) Build ¶ added in v0.5.0
func (IndexingNotSupported) Build(context.Context, Transaction, ast.Ref) (Index, error)
Build always returns an error indicating indexing is not supported.
type Path ¶ added in v0.3.0
type Path []string
Path refers to a document in storage.
func MustParsePath ¶ added in v0.3.0
MustParsePath returns a new Path for s. If s cannot be parsed, this function will panic. This is mostly for test purposes.
func NewPathForRef ¶ added in v0.3.0
NewPathForRef returns a new path for the given ref.
func (Path) Compare ¶ added in v0.3.0
Compare performs lexigraphical comparison on p and other and returns -1 if p is less than other, 0 if p is equal to other, or 1 if p is greater than other.
type Policy ¶ added in v0.5.0
type Policy interface { ListPolicies(context.Context, Transaction) ([]string, error) GetPolicy(context.Context, Transaction, string) ([]byte, error) UpsertPolicy(context.Context, Transaction, string, []byte) error DeletePolicy(context.Context, Transaction, string) error }
Policy defines the interface for policy module storage.
type PolicyEvent ¶ added in v0.5.3
PolicyEvent describes a change to a policy.
type PolicyNotSupported ¶ added in v0.5.0
type PolicyNotSupported struct{}
PolicyNotSupported provides a default implementation of the policy interface which may be used if the backend does not support policy storage.
func (PolicyNotSupported) DeletePolicy ¶ added in v0.5.0
func (PolicyNotSupported) DeletePolicy(context.Context, Transaction, string) error
DeletePolicy always returns a PolicyNotSupportedErr.
func (PolicyNotSupported) GetPolicy ¶ added in v0.5.0
func (PolicyNotSupported) GetPolicy(context.Context, Transaction, string) ([]byte, error)
GetPolicy always returns a PolicyNotSupportedErr.
func (PolicyNotSupported) ListPolicies ¶ added in v0.5.0
func (PolicyNotSupported) ListPolicies(context.Context, Transaction) ([]string, error)
ListPolicies always returns a PolicyNotSupportedErr.
func (PolicyNotSupported) UpsertPolicy ¶ added in v0.5.0
func (PolicyNotSupported) UpsertPolicy(context.Context, Transaction, string, []byte) error
UpsertPolicy always returns a PolicyNotSupportedErr.
type Store ¶ added in v0.2.0
type Store interface { Trigger Policy Indexing // NewTransaction is called create a new transaction in the store. NewTransaction(ctx context.Context, params ...TransactionParams) (Transaction, error) // Read is called to fetch a document referred to by path. Read(ctx context.Context, txn Transaction, path Path) (interface{}, error) // Write is called to modify a document referred to by path. Write(ctx context.Context, txn Transaction, op PatchOp, path Path, value interface{}) error // Commit is called to finish the transaction. If Commit returns an error, the // transaction must be automatically aborted by the Store implementation. Commit(ctx context.Context, txn Transaction) error // Abort is called to cancel the transaction. Abort(ctx context.Context, txn Transaction) }
Store defines the interface for the storage layer's backend.
type Transaction ¶ added in v0.2.0
type Transaction interface {
ID() uint64
}
Transaction defines the interface that identifies a consistent snapshot over the policy engine's storage layer.
func NewTransactionOrDie ¶ added in v0.2.0
func NewTransactionOrDie(ctx context.Context, store Store, params ...TransactionParams) Transaction
NewTransactionOrDie is a helper function to create a new transaction. If the storage layer cannot create a new transaction, this function will panic. This function should only be used for tests.
type TransactionParams ¶ added in v0.3.0
type TransactionParams struct { // Write indicates if this transaction will perform any write operations. Write bool }
TransactionParams describes a new transaction.
type Trigger ¶ added in v0.2.0
type Trigger interface {
Register(ctx context.Context, txn Transaction, config TriggerConfig) (TriggerHandle, error)
}
Trigger defines the interface that stores implement to register for change notifications when the store is changed.
type TriggerConfig ¶ added in v0.2.0
type TriggerConfig struct { // OnCommit is invoked when a transaction is succesfully committed. The // callback is invoked with a handle to the write transaction that // successfully committed before other clients see the changes. OnCommit func(ctx context.Context, txn Transaction, event TriggerEvent) }
TriggerConfig contains the trigger registration configuration.
type TriggerEvent ¶ added in v0.5.0
type TriggerEvent struct { Policy []PolicyEvent Data []DataEvent }
TriggerEvent describes the changes that caused the trigger to be invoked.
func (TriggerEvent) DataChanged ¶ added in v0.5.0
func (e TriggerEvent) DataChanged() bool
DataChanged returns true if the trigger was caused by a data change.
func (TriggerEvent) IsZero ¶ added in v0.5.0
func (e TriggerEvent) IsZero() bool
IsZero returns true if the TriggerEvent indicates no changes occurred. This function is primarily for test purposes.
func (TriggerEvent) PolicyChanged ¶ added in v0.5.0
func (e TriggerEvent) PolicyChanged() bool
PolicyChanged returns true if the trigger was caused by a policy change.
type TriggerHandle ¶ added in v0.5.3
type TriggerHandle interface {
Unregister(ctx context.Context, txn Transaction)
}
TriggerHandle defines the interface that can be used to unregister triggers that have been registered on a Store.
type TriggersNotSupported ¶ added in v0.2.0
type TriggersNotSupported struct{}
TriggersNotSupported provides default implementations of the Trigger interface which may be used if the backend does not support triggers.
func (TriggersNotSupported) Register ¶ added in v0.2.0
func (TriggersNotSupported) Register(context.Context, Transaction, TriggerConfig) (TriggerHandle, error)
Register always returns an error indicating triggers are not supported.
type WritesNotSupported ¶ added in v0.2.0
type WritesNotSupported struct{}
WritesNotSupported provides a default implementation of the write interface which may be used if the backend does not support writes.
func (WritesNotSupported) Write ¶ added in v0.2.0
func (WritesNotSupported) Write(ctx context.Context, txn Transaction, op PatchOp, path Path, value interface{}) error