mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
80 lines
2.2 KiB
Go
80 lines
2.2 KiB
Go
package v2
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/coreos/etcd/store"
|
|
"github.com/coreos/raft"
|
|
)
|
|
|
|
func init() {
|
|
store.RegisterCommandFactory(&CommandFactory{})
|
|
}
|
|
|
|
// CommandFactory provides a pluggable way to create version 2 commands.
|
|
type CommandFactory struct {
|
|
}
|
|
|
|
// Version returns the version of this factory.
|
|
func (f *CommandFactory) Version() int {
|
|
return 2
|
|
}
|
|
|
|
// CreateUpgradeCommand is a no-op since version 2 is the first version to support store versioning.
|
|
func (f *CommandFactory) CreateUpgradeCommand() raft.Command {
|
|
return &raft.NOPCommand{}
|
|
}
|
|
|
|
// CreateSetCommand creates a version 2 command to set a key to a given value in the store.
|
|
func (f *CommandFactory) CreateSetCommand(key string, value string, expireTime time.Time) raft.Command {
|
|
return &SetCommand{
|
|
Key: key,
|
|
Value: value,
|
|
ExpireTime: expireTime,
|
|
}
|
|
}
|
|
|
|
// CreateCreateCommand creates a version 2 command to create a new key in the store.
|
|
func (f *CommandFactory) CreateCreateCommand(key string, value string, expireTime time.Time, unique bool) raft.Command {
|
|
return &CreateCommand{
|
|
Key: key,
|
|
Value: value,
|
|
ExpireTime: expireTime,
|
|
Unique: unique,
|
|
}
|
|
}
|
|
|
|
// CreateUpdateCommand creates a version 2 command to update a key to a given value in the store.
|
|
func (f *CommandFactory) CreateUpdateCommand(key string, value string, expireTime time.Time) raft.Command {
|
|
return &UpdateCommand{
|
|
Key: key,
|
|
Value: value,
|
|
ExpireTime: expireTime,
|
|
}
|
|
}
|
|
|
|
// CreateDeleteCommand creates a version 2 command to delete a key from the store.
|
|
func (f *CommandFactory) CreateDeleteCommand(key string, recursive bool) raft.Command {
|
|
return &DeleteCommand{
|
|
Key: key,
|
|
Recursive: recursive,
|
|
}
|
|
}
|
|
|
|
// CreateCompareAndSwapCommand creates a version 2 command to conditionally set a key in the store.
|
|
func (f *CommandFactory) CreateCompareAndSwapCommand(key string, value string, prevValue string, prevIndex uint64, expireTime time.Time) raft.Command {
|
|
return &CompareAndSwapCommand{
|
|
Key: key,
|
|
Value: value,
|
|
PrevValue: prevValue,
|
|
PrevIndex: prevIndex,
|
|
ExpireTime: expireTime,
|
|
}
|
|
}
|
|
|
|
func (f *CommandFactory) CreateSyncCommand(now time.Time) raft.Command {
|
|
return &SyncCommand{
|
|
Time: time.Now(),
|
|
}
|
|
}
|