Documentation ¶
Overview ¶
Package storage implements services to persist data. The storage collection bundles storage instances to pass them around more easily.
Index ¶
Constants ¶
const ( // KindMemory is the kind to be used to create a memory storage services. KindMemory = "memory" // KindRedis is the kind to be used to create a collection of redis storage // services. KindRedis = "redis" )
Variables ¶
This section is empty.
Functions ¶
func IsInvalidConfig ¶
IsInvalidConfig asserts invalidConfigError.
func IsInvalidExecution ¶
IsInvalidExecution combines IsInvalidExecution error matchers of all storage implementations. IsInvalidExecution should thus be used for error handling wherever a storage service is used.
func IsNotFound ¶
IsNotFound combines IsNotFound error matchers of all storage implementations. IsNotFound should thus be used for error handling wherever a storage service is used.
Types ¶
type Backoff ¶
type Backoff interface { // NextBackOff provides the duration expected to wait before retrying an // action. time.Duration = -1 indicates that no more retry should be // attempted. NextBackOff() time.Duration // Reset sets the backoff back to its initial state. Reset() }
Backoff represents the object managing backoff algorithms to retry actions.
type Collection ¶
type Collection struct { // Public. List []Service Configuration Service Connection Service Event Service Feature Service General Service Index Service Instrumentor Service Peer Service // contains filtered or unexported fields }
Collection is the object bundling all storages.
func NewCollection ¶
func NewCollection(config CollectionConfig) (*Collection, error)
NewCollection creates a new configured storage Collection.
func (*Collection) Boot ¶
func (c *Collection) Boot()
func (*Collection) Shutdown ¶
func (c *Collection) Shutdown()
type CollectionConfig ¶
type CollectionConfig struct { // Dependencies. BackoffFactory func() redis.Backoff InstrumentorCollection *instrumentor.Collection LoggerService logger.Service // Settings. Kind string Redis *Redis }
CollectionConfig represents the configuration used to create a new storage collection.
func DefaultCollectionConfig ¶
func DefaultCollectionConfig() CollectionConfig
DefaultCollectionConfig provides a default configuration to create a new storage collection by best effort.
type Redis ¶
type Redis struct { Configuration RedisConfig Connection RedisConfig Event RedisConfig Feature RedisConfig General RedisConfig Index RedisConfig Instrumentor RedisConfig Peer RedisConfig }
Redis is a config bundle of redis configs.
type RedisConfig ¶
RedisConfig is the config applied to each redis instance. This is not relevant in case the memory kind is used.
type Service ¶
type Service interface { // Boot initializes and starts the whole storage like booting a machine. The // call to Boot blocks until the storage is completely initialized, so you // might want to call it in a separate goroutine. Boot() // Exists checks whether a given key exists. The existence check does not rely // on a specific data structure type. Exists(key string) (bool, error) // ExistsInScoredSet checks whether a given element exists within the scored // set identified by the given key. ExistsInScoredSet(key, element string) (bool, error) // Get returns data associated with key. This is a simple key-value // relationship. Get(key string) (string, error) // GetAllFromList returns all elements from the list under key. This method // has an enormous time complexity. GetAllFromList should therefore never be // used against bigger lists, where a big list is characterized by a length // above 100. GetAllFromList(key string) ([]string, error) // GetAllFromSet returns all elements from the set under key. GetAllFromSet(key string) ([]string, error) // GetElementsByScore looks up all elements associated with the given score. // To limit the number of returned elements, maxElements ca be used. Note // that the list has this scheme. // // element1,element2,... // GetElementsByScore(key string, score float64, maxElements int) ([]string, error) // GetHighestScoredElements searches a list that is ordered by their // element's score, and returns the elements and their corresponding scores, // where the highest scored element is the first in the returned list. Note // that the list has this scheme. // // element1,score1,element2,score2,... // // Note that the resulting list will have the length of maxElements*2, // because the list contains the elements and their scores. // // TODO check for highest score and return truley random element if highest // score is 0 GetHighestScoredElements(key string, maxElements int) ([]string, error) // GetRandom returns a random key which was formerly stored within the // underlying storage. GetRandom() (string, error) // GetRandomFromSet returns a random element which was formerly stored within // the set identified by the given key. GetRandomFromSet(key string) (string, error) // GetRandomFromScoredSet returns a random element which was formerly stored // within the scored set identified by the given key. GetRandomFromScoredSet(key string) (string, error) // GetScoreOfElement returns the score of the element within the scored set // identified by the given key. In case there does no element exist, // GetScoreOfElement returns a not found error. GetScoreOfElement(key, element string) (float64, error) // GetStringMap returns the hash map stored under the given key. GetStringMap(key string) (map[string]string, error) // Increment increments the floating point number stored under key by the // given value n. Increment(key string, n float64) (float64, error) // IncrementScoredElement increments the floating point number stored under // element within the scored set identified by key by the given value n. IncrementScoredElement(key, element string, n float64) (float64, error) // LengthOfList returns the number of elements within the list given by key. LengthOfList(key string) (int, error) // LengthOfScoredSet returns the number of elements within the scored set // given by key. LengthOfScoredSet(key string) (int, error) // PopFromList returns the next element from the list identified by the given // key. Note that a list is an ordered sequence of arbitrary elements. // PushToList and PopFromList are operating according to a "first in, first // out" primitive. If the requested list is empty, PopFromList blocks // infinitely until an element is added to the list. Returned elements will // also be removed from the specified list. PopFromList(key string) (string, error) // PushToList adds the given element to the list identified by the given key. // Note that a list is an ordered sequence of arbitrary elements. PushToList // and PopFromList are operating according to a "first in, first out" // primitive. PushToList(key string, element string) error // PushToSet adds the given element to the set identified by the given key. // Note that a set is an unordered collection of distinct elements. PushToSet(key string, element string) error // Remove deletes the given key. Remove(key string) error // RemoveFromList removes the given element from the list identified by the // given key. RemoveFromList(key string, element string) error // RemoveFromSet removes the given element from the set identified by the // given key. RemoveFromSet(key string, element string) error // RemoveScoredElement removes the given element from the scored set under // key. RemoveScoredElement(key string, element string) error // Set stores the given key value pair. Once persisted, value can be // retrieved using Get. Set(key string, value string) error // SetElementByScore persists the given element in the weighted list // identified by key with respect to the given score. SetElementByScore(key, element string, score float64) error // SetStringMap stores the given stringMap under the given key. SetStringMap(key string, stringMap map[string]string) error // Shutdown ends all processes of the storage like shutting down a machine. // The call to Shutdown blocks until the storage is completely shut down, so // you might want to call it in a separate goroutine. Shutdown() // TrimEndOfList cuts the tail of the list identified by the given key to // ensure that there are not more elements within the list than defined by // maxElements. TrimEndOfList(key string, maxElements int) error // WalkSet scans the set given by key and executes the callback for each found // element. // // The walk is throttled. That means some amount of elements are fetched at // once from the storage. After all fetched elements are iterated, the next // batch of elements is fetched to continue the next iteration, until the // given set is walked completely. The given closer can be used to end the // walk immediately. WalkSet(key string, closer <-chan struct{}, cb func(element string) error) error // WalkKeys scans the key space with respect to the given glob and executes // the callback for each found key. // // The walk is throttled. That means some amount of keys are fetched at once // from the storage. After all fetched keys are iterated, the next batch of // keys is fetched to continue the next iteration, until the whole key space // is walked completely. The given closer can be used to end the walk // immediately. WalkKeys(glob string, closer <-chan struct{}, cb func(key string) error) error // WalkScoredSet scans the scored set given by key and executes the callback // for each found element. Note that the walk might ignores the score order. // // The walk is throttled. That means some amount of elements are fetched at // once from the storage. After all fetched elements are iterated, the next // batch of elements is fetched to continue the next iteration, until the // given set is walked completely. The given closer can be used to end the // walk immediately. WalkScoredSet(key string, closer <-chan struct{}, cb func(element string, score float64) error) error }
Service represents a persistency management object. Different storages may be provided by a storage collection. Within a receiver function the usage of the feature storage may look like this.
func (s *service) Foo() error { rk, err := s.Storage.Feature.GetRandom() ... }
// TODO document operations against data structures
keys lists scored sets sets strings
TODO fix the naming
good GetAllFromList bad Get (better GetValueFromKey)