command_factory.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package v2
  2. import (
  3. "time"
  4. "github.com/coreos/etcd/store"
  5. "github.com/coreos/etcd/third_party/github.com/goraft/raft"
  6. )
  7. func init() {
  8. store.RegisterCommandFactory(&CommandFactory{})
  9. }
  10. // CommandFactory provides a pluggable way to create version 2 commands.
  11. type CommandFactory struct {
  12. }
  13. // Version returns the version of this factory.
  14. func (f *CommandFactory) Version() int {
  15. return 2
  16. }
  17. // CreateUpgradeCommand is a no-op since version 2 is the first version to support store versioning.
  18. func (f *CommandFactory) CreateUpgradeCommand() raft.Command {
  19. return &raft.NOPCommand{}
  20. }
  21. // CreateSetCommand creates a version 2 command to set a key to a given value in the store.
  22. func (f *CommandFactory) CreateSetCommand(key string, dir bool, value string, expireTime time.Time) raft.Command {
  23. return &SetCommand{
  24. Key: key,
  25. Value: value,
  26. ExpireTime: expireTime,
  27. Dir: dir,
  28. }
  29. }
  30. // CreateCreateCommand creates a version 2 command to create a new key in the store.
  31. func (f *CommandFactory) CreateCreateCommand(key string, dir bool, value string, expireTime time.Time, unique bool) raft.Command {
  32. return &CreateCommand{
  33. Key: key,
  34. Value: value,
  35. ExpireTime: expireTime,
  36. Unique: unique,
  37. Dir: dir,
  38. }
  39. }
  40. // CreateUpdateCommand creates a version 2 command to update a key to a given value in the store.
  41. func (f *CommandFactory) CreateUpdateCommand(key string, value string, expireTime time.Time) raft.Command {
  42. return &UpdateCommand{
  43. Key: key,
  44. Value: value,
  45. ExpireTime: expireTime,
  46. }
  47. }
  48. // CreateDeleteCommand creates a version 2 command to delete a key from the store.
  49. func (f *CommandFactory) CreateDeleteCommand(key string, dir, recursive bool) raft.Command {
  50. return &DeleteCommand{
  51. Key: key,
  52. Recursive: recursive,
  53. Dir: dir,
  54. }
  55. }
  56. // CreateCompareAndSwapCommand creates a version 2 command to conditionally set a key in the store.
  57. func (f *CommandFactory) CreateCompareAndSwapCommand(key string, value string, prevValue string, prevIndex uint64, expireTime time.Time) raft.Command {
  58. return &CompareAndSwapCommand{
  59. Key: key,
  60. Value: value,
  61. PrevValue: prevValue,
  62. PrevIndex: prevIndex,
  63. ExpireTime: expireTime,
  64. }
  65. }
  66. // CreateCompareAndDeleteCommand creates a version 2 command to conditionally delete a key from the store.
  67. func (f *CommandFactory) CreateCompareAndDeleteCommand(key string, prevValue string, prevIndex uint64) raft.Command {
  68. return &CompareAndDeleteCommand{
  69. Key: key,
  70. PrevValue: prevValue,
  71. PrevIndex: prevIndex,
  72. }
  73. }
  74. func (f *CommandFactory) CreateSyncCommand(now time.Time) raft.Command {
  75. return &SyncCommand{
  76. Time: time.Now(),
  77. }
  78. }