Documentation ¶
Overview ¶
Package kvstore abstracts KVstore access and provides a high level API to atomically manage cluster wide resources
Index ¶
- Constants
- Variables
- func Close()
- func CreateIfExists(condKey, key string, value []byte, lease bool) error
- func CreateOnly(ctx context.Context, key string, value []byte, lease bool) (bool, error)
- func Decode(in string) ([]byte, error)
- func Delete(key string) error
- func DeletePrefix(prefix string) error
- func EnableTracing()
- func Encode(in []byte) string
- func EtcdDummyAddress() string
- func Get(key string) ([]byte, error)
- func GetPrefix(ctx context.Context, prefix string) (k string, v []byte, err error)
- func Hint(err error) error
- func IsEtcdOperator(selectedBackend string, opts map[string]string, k8sNamespace string) bool
- func Set(key string, value []byte) error
- func Setup(selectedBackend string, opts map[string]string, goOpts *ExtraOptions) error
- func SetupDummy(dummyBackend string)
- func Trace(format string, err error, fields logrus.Fields, a ...interface{})
- func Update(ctx context.Context, key string, value []byte, lease bool) error
- func UpdateIfDifferent(ctx context.Context, key string, value []byte, lease bool) (bool, error)
- type BackendOperations
- type Capabilities
- type EventChan
- type EventType
- type ExtraOptions
- type KeyValueEvent
- type KeyValuePairs
- type Lock
- type Watcher
Constants ¶
const ( // EtcdBackendName is the backend name fo etcd EtcdBackendName = "etcd" EtcdOptionConfig = "etcd.config" // EtcdRateLimitOption specifies maximum kv operations per second EtcdRateLimitOption = "etcd.qps" )
Variables ¶
var ( // LeaseTTL is the time-to-live ofthe lease LeaseTTL = 15 * time.Minute // 15 minutes // KeepAliveInterval is the interval in which the lease is being // renewed. This must be set to a value lesser than the LeaseTTL KeepAliveInterval = 5 * time.Minute // RetryInterval is the interval in which retries occur in the case of // errors in communication with the KVstore. This should be set to a // small value to account for temporary errors while communicating with // the KVstore. RetryInterval = 1 * time.Minute )
var ( // Debugging can be enabled at compile with: // -ldflags "-X "github.com/cilium/cilium/pkg/kvstore".Debug=true" Debug string )
Functions ¶
func CreateIfExists ¶ added in v1.5.0
CreateIfExists creates a key with the value only if key condKey exists
func CreateOnly ¶ added in v1.5.0
CreateOnly atomically creates a key or fails if it already exists
func Decode ¶ added in v1.5.0
Decode decodes a key previously encoded back into the original binary slice
func DeletePrefix ¶ added in v1.5.0
DeletePrefix deletes all keys matching a prefix
func Encode ¶ added in v1.5.0
Encode encodes a binary slice into a character set that the backend supports
func EtcdDummyAddress ¶ added in v1.5.0
func EtcdDummyAddress() string
func GetPrefix ¶ added in v1.5.0
GetPrefix returns the first key which matches the prefix and its value.
func IsEtcdOperator ¶ added in v1.5.0
IsEtcdOperator returns true if the configuration is setting up an etcd-operator and false otherwise.
func Setup ¶ added in v0.10.0
func Setup(selectedBackend string, opts map[string]string, goOpts *ExtraOptions) error
Setup sets up the key-value store specified in kvStore and configures it with the options provided in opts
func SetupDummy ¶ added in v0.10.0
func SetupDummy(dummyBackend string)
SetupDummy sets up kvstore for tests
Types ¶
type BackendOperations ¶ added in v1.5.0
type BackendOperations interface { // Connected returns a channel which is closed whenever the kvstore client // is connected to the kvstore server. (Only implemented for etcd) Connected() <-chan struct{} // Disconnected returns a channel which is closed whenever the kvstore // client is not connected to the kvstore server. (Only implemented for etcd) Disconnected() <-chan struct{} // Status returns the status of the kvstore client including an // eventual error Status() (string, error) // LockPath locks the provided path LockPath(ctx context.Context, path string) (kvLocker, error) // Get returns value of key Get(key string) ([]byte, error) // GetPrefix returns the first key which matches the prefix and its value GetPrefix(ctx context.Context, prefix string) (string, []byte, error) // Set sets value of key Set(key string, value []byte) error // Delete deletes a key Delete(key string) error DeletePrefix(path string) error // Update atomically creates a key or fails if it already exists Update(ctx context.Context, key string, value []byte, lease bool) error // UpdateIfDifferent updates a key if the value is different UpdateIfDifferent(ctx context.Context, key string, value []byte, lease bool) (bool, error) // CreateOnly atomically creates a key or fails if it already exists CreateOnly(ctx context.Context, key string, value []byte, lease bool) (bool, error) // CreateIfExists creates a key with the value only if key condKey exists CreateIfExists(condKey, key string, value []byte, lease bool) error // ListPrefix returns a list of keys matching the prefix ListPrefix(prefix string) (KeyValuePairs, error) // Watch starts watching for changes in a prefix. If list is true, the // current keys matching the prefix will be listed and reported as new // keys first. Watch(w *Watcher) // Close closes the kvstore client Close() // GetCapabilities returns the capabilities of the backend GetCapabilities() Capabilities // Encodes a binary slice into a character set that the backend // supports Encode(in []byte) string // Decodes a key previously encoded back into the original binary slice Decode(in string) ([]byte, error) // ListAndWatch creates a new watcher which will watch the specified // prefix for changes. Before doing this, it will list the current keys // matching the prefix and report them as new keys. Name can be set to // anything and is used for logging messages. The Events channel is // created with the specified sizes. Upon every change observed, a // KeyValueEvent will be sent to the Events channel ListAndWatch(name, prefix string, chanSize int) *Watcher }
BackendOperations are the individual kvstore operations that each backend must implement. Direct use of this interface is possible but will bypass the tracing layer.
func Client ¶ added in v0.10.0
func Client() BackendOperations
Client returns the global kvstore client or nil if the client is not configured yet
func NewClient ¶ added in v1.5.0
func NewClient(selectedBackend string, opts map[string]string, options *ExtraOptions) (BackendOperations, chan error)
NewClient returns a new kvstore client based on the configuration
type Capabilities ¶ added in v1.5.0
type Capabilities uint32
Capabilities is a bitmask to indicate the capabilities of a backend
const ( // CapabilityCreateIfExists is true if CreateIfExists is functional CapabilityCreateIfExists Capabilities = 1 << 0 // CapabilityDeleteOnZeroCount is true if DeleteOnZeroCount is functional CapabilityDeleteOnZeroCount Capabilities = 1 << 1 // BaseKeyPrefix is the base prefix that should be used for all keys BaseKeyPrefix = "cilium" )
func GetCapabilities ¶ added in v1.5.0
func GetCapabilities() Capabilities
GetCapabilities returns the capabilities of the backend
type EventChan ¶ added in v1.5.0
type EventChan chan KeyValueEvent
EventChan is a channel to receive events on
type EventType ¶ added in v1.5.0
type EventType int
EventType defines the type of watch event that occurred
const ( // EventTypeCreate represents a newly created key EventTypeCreate EventType = iota // EventTypeModify represents a modified key EventTypeModify // EventTypeDelete represents a deleted key EventTypeDelete //EventTypeListDone signals that the initial list operation has completed EventTypeListDone )
type ExtraOptions ¶ added in v1.5.0
type ExtraOptions struct { DialOption []grpc.DialOption // ClusterSizeDependantInterval defines the function to calculate // intervals based on cluster size ClusterSizeDependantInterval func(baseInterval time.Duration) time.Duration }
ExtraOptions represents any options that can not be represented in a textual format and need to be set programmatically.
func (*ExtraOptions) StatusCheckInterval ¶ added in v1.5.0
func (e *ExtraOptions) StatusCheckInterval(allConnected bool) time.Duration
StatusCheckInterval returns the interval of status checks depending on the cluster size and the current connectivity state
nodes OK Failing 1 20s 3s 4 45s 7s 8 1m05s 11s 32 1m45s 18s 128 2m25s 24s 512 3m07s 32s 2048 3m46s 38s 8192 4m30s 45s
type KeyValueEvent ¶ added in v1.5.0
type KeyValueEvent struct { // Typ is the type of event { EventTypeCreate | EventTypeModify | EventTypeDelete | EventTypeListDone } Typ EventType // Key is the kvstore key that changed Key string // Value is the kvstore value associated with the key Value []byte }
KeyValueEvent is a change event for a Key/Value pair
type KeyValuePairs ¶ added in v1.5.0
KeyValuePairs is a map of key=value pairs
func ListPrefix ¶ added in v1.5.0
func ListPrefix(prefix string) (KeyValuePairs, error)
ListPrefix returns the list of keys matching the prefix
type Lock ¶ added in v1.5.0
type Lock struct {
// contains filtered or unexported fields
}
Lock is a lock return by LockPath
func LockPath ¶ added in v1.5.0
LockPath locks the specified path. The key for the lock is not the path provided itself but the path with a suffix of ".lock" appended. The lock returned also contains a patch specific local Mutex which will be held.
It is required to call Unlock() on the returned Lock to unlock
type Watcher ¶ added in v1.5.0
type Watcher struct { // Events is the channel to which change notifications will be sent to Events EventChan // contains filtered or unexported fields }
Watcher represents a KVstore watcher
func ListAndWatch ¶ added in v1.5.0
ListAndWatch creates a new watcher which will watch the specified prefix for changes. Before doing this, it will list the current keys matching the prefix and report them as new keys. Name can be set to anything and is used for logging messages. The Events channel is created with the specified sizes. Upon every change observed, a KeyValueEvent will be sent to the Events channel
Returns a watcher structure plus a channel that is closed when the initial list operation has been completed
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package allocator provides a kvstore based ID allocator
|
Package allocator provides a kvstore based ID allocator |
Package store implements a shared store backed by a kvstore or similar with the following properties: * A single type is used to represent all keys * Any number of collaborators can join the store.
|
Package store implements a shared store backed by a kvstore or similar with the following properties: * A single type is used to represent all keys * Any number of collaborators can join the store. |