Documentation
¶
Overview ¶
Package store defines types to implement a store.
Package store defines types to implement a store.
Index ¶
Constants ¶
const ( // DefaultLimit is the default pagination limit. DefaultLimit = 20 // MaxLimit is the maximum pagination limit. MaxLimit = 200 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Adapter ¶
type Adapter interface {
SegmentReader
LinkWriter
EvidenceStore
// Returns arbitrary information about the adapter.
GetInfo(ctx context.Context) (interface{}, error)
// Adds a channel that receives events from the store.
AddStoreEventChannel(chan *Event)
// Creates a new Batch
NewBatch(ctx context.Context) (Batch, error)
}
Adapter is the minimal interface that all stores should implement. Then a store may optionally implement the KeyValueStore interface.
type Batch ¶
type Batch interface {
SegmentReader
LinkWriter
// Write definitely writes the content of the Batch
Write(ctx context.Context) error
}
Batch represents a database transaction.
type Event ¶ added in v0.2.0
type Event struct {
EventType EventType
Data interface{}
}
Event is the object stores send to notify of important events.
func NewSavedEvidences ¶ added in v0.2.0
func NewSavedEvidences() *Event
NewSavedEvidences creates a new event to notify evidences were saved.
func NewSavedLinks ¶ added in v0.2.0
NewSavedLinks creates a new event to notify links were saved.
func (*Event) AddSavedEvidence ¶ added in v0.2.0
AddSavedEvidence adds an evidence to the event. It assumes the event is a correctly initialized SavedEvidences event.
func (*Event) AddSavedLinks ¶ added in v0.2.0
AddSavedLinks adds links to the event. It assumes the event is a correctly initialized SavedLinks event.
func (*Event) UnmarshalJSON ¶ added in v0.2.0
UnmarshalJSON does custom deserialization to correctly type the Data field.
type EventType ¶ added in v0.2.0
type EventType string
EventType lets you know the kind of event received. A client should ignore events it doesn't care about or doesn't understand.
const ( // SavedLinks means that segment links were saved. SavedLinks EventType = "SavedLinks" // SavedEvidences means that segment evidences were saved. SavedEvidences = "SavedEvidences" )
type EvidenceReader ¶ added in v0.2.0
type EvidenceReader interface {
// Get the evidences for a segment.
// Can return a nil error with an empty evidence slice if
// the segment currently doesn't have evidence.
GetEvidences(ctx context.Context, linkHash *types.Bytes32) (*cs.Evidences, error)
}
EvidenceReader is the interface for reading segment evidence from a store.
type EvidenceStore ¶ added in v0.2.0
type EvidenceStore interface {
EvidenceReader
EvidenceWriter
}
EvidenceStore is the interface for storing and reading segment evidence.
type EvidenceWriter ¶ added in v0.2.0
type EvidenceWriter interface {
// Add an evidence to a segment.
AddEvidence(ctx context.Context, linkHash *types.Bytes32, evidence *cs.Evidence) error
}
EvidenceWriter is the interface for adding evidence to a segment in a store.
type KeyValueReader ¶ added in v0.2.0
KeyValueReader is the interface for reading key-value pairs.
type KeyValueStore ¶ added in v0.2.0
type KeyValueStore interface {
KeyValueReader
KeyValueWriter
}
KeyValueStore is the interface for a key-value store. Some stores will implement this interface, but not all.
type KeyValueWriter ¶ added in v0.2.0
type KeyValueWriter interface {
SetValue(ctx context.Context, key []byte, value []byte) error
DeleteValue(ctx context.Context, key []byte) ([]byte, error)
}
KeyValueWriter is the interface for writing key-value pairs.
type LinkWriter ¶ added in v0.2.0
type LinkWriter interface {
// Create the immutable part of a segment.
// The input link is expected to be valid.
// Returns the link hash or an error.
CreateLink(ctx context.Context, link *cs.Link) (*types.Bytes32, error)
}
LinkWriter is the interface for writing links to a store. Links are immutable and cannot be deleted.
type MapFilter ¶
type MapFilter struct {
Pagination `json:"pagination"`
// Process name is optionnal.
Process string `json:"process" url:"-"`
}
MapFilter contains filtering options for segments.
type Pagination ¶
type Pagination struct {
// Index of the first entry.
Offset int `json:"offset" url:"offset"`
// Maximum number of entries.
Limit int `json:"limit" url:"limit"`
}
Pagination contains pagination options.
func (*Pagination) PaginateSegments ¶
func (p *Pagination) PaginateSegments(a cs.SegmentSlice) cs.SegmentSlice
PaginateSegments paginate a list of segments
func (*Pagination) PaginateStrings ¶
func (p *Pagination) PaginateStrings(a []string) []string
PaginateStrings paginates a list of strings
type SegmentFilter ¶
type SegmentFilter struct {
Pagination `json:"pagination"`
// Map IDs the segments must have.
MapIDs []string `json:"mapIds" url:"mapIds,brackets"`
// Process name is optionnal.
Process string `json:"process" url:"-"`
// A previous link hash the segments must have.
// nil makes this attribute as optional
// empty string is to search Segments without parent
PrevLinkHash *string `json:"prevLinkHash" url:"prevLinkHash"`
// A slice of linkHashes to search Segments.
// This attribute is optional.
LinkHashes []string `json:"linkHashes" url:"linkHashes,brackets"`
// A slice of tags the segments must all contain.
Tags []string `json:"tags" url:"tags,brackets"`
}
SegmentFilter contains filtering options for segments. If PrevLinkHash is not nil, MapID is ignored because a previous link hash implies the map ID of the previous segment.
type SegmentReader ¶ added in v0.2.0
type SegmentReader interface {
// Get a segment by link hash. Returns nil if no match is found.
// Will return link and evidences (if there are some in that store).
GetSegment(ctx context.Context, linkHash *types.Bytes32) (*cs.Segment, error)
// Find segments. Returns an empty slice if there are no results.
// Will return links and evidences (if there are some).
FindSegments(ctx context.Context, filter *SegmentFilter) (cs.SegmentSlice, error)
// Get all the existing map IDs.
GetMapIDs(ctx context.Context, filter *MapFilter) ([]string, error)
}
SegmentReader is the interface for reading Segments from a store.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package storehttp is used to create an HTTP server from a store adapter.
|
Package storehttp is used to create an HTTP server from a store adapter. |
|
Package storetestcases defines test cases to test stores.
|
Package storetestcases defines test cases to test stores. |
|
Package storetesting defines helpers to test stores.
|
Package storetesting defines helpers to test stores. |