Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrAlreadyCommitted is returned when attempting to commit an already // committed ChangeSet ErrAlreadyCommitted = errors.New("change list already committed") // ErrCommitInProgress is returned when attempting to commit a change set // that is already being committed ErrCommitInProgress = errors.New("commit in progress") // ErrChangeSetClosed is returned when attempting to make a change to a // closed (committed / commit in progress) ChangeSet ErrChangeSetClosed = errors.New("change set closed") // ErrUnknownVersion is returned when attempting to commit a change for // a version that doesn't exist ErrUnknownVersion = errors.New("unknown version") )
Functions ¶
This section is empty.
Types ¶
type ApplyFn ¶
An ApplyFn applies a set of changes to a configuration, resulting in a new configuration
type Manager ¶
type Manager interface {
// Change creates a new change against the latest configuration, adding it
// to the set of pending changes for that configuration
Change(change ChangeFn) error
// GetPendingChanges gets the latest uncommitted changes
GetPendingChanges() (int, proto.Message, proto.Message, error)
// Commit commits the specified ChangeSet, transforming the configuration on
// which they are based into a new configuration, and storing that new
// configuration as a next versions. Ensures that changes are applied as a
// batch, are not applied more than once, and that new changes are not
// started while a commit is underway
Commit(version int, apply ApplyFn) error
}
A Manager manages sets of changes in a version friendly manager. Changes to a given version of a configuration object are stored under <key>/_changes/<version>. Multiple changes can be added, then committed all at once. Committing transforms the configuration according to the changes, then writes the configuration back. CAS operations are used to ensure that commits are not applied more than once, and to avoid conflicts on the change object itself.
func NewManager ¶
func NewManager(opts ManagerOptions) (Manager, error)
NewManager creates a new change list Manager
type ManagerOptions ¶
type ManagerOptions interface {
// KV is the KVStore holding the configuration
SetKV(kv kv.Store) ManagerOptions
KV() kv.Store
// ConfigKey is the key holding the configuration object
SetConfigKey(key string) ManagerOptions
ConfigKey() string
// Logger is the logger to use
SetLogger(logger *zap.Logger) ManagerOptions
Logger() *zap.Logger
// ConfigType is a proto.Message defining the structure of the configuration
// object. Clones of this proto will be used to unmarshal configuration
// instances
SetConfigType(config proto.Message) ManagerOptions
ConfigType() proto.Message
// ChangesType is a proto.Message defining the structure of the changes
// object. Clones of this protol will be used to unmarshal change list
// instances.
SetChangesType(changes proto.Message) ManagerOptions
ChangesType() proto.Message
// Validate validates the options
Validate() error
}
ManagerOptions are options used in creating a new ChangeSet Manager
func NewManagerOptions ¶
func NewManagerOptions() ManagerOptions
NewManagerOptions creates an empty ManagerOptions