store.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package raftd
  2. import (
  3. "path"
  4. "errors"
  5. "encoding/json"
  6. )
  7. type Store struct {
  8. Nodes map[string]string `json:"nodes"`
  9. }
  10. func createStore() *Store{
  11. s := new(Store)
  12. s.Nodes = make(map[string]string)
  13. return s
  14. }
  15. // set the key to value, return the old value if the key exists
  16. func (s *Store) Set(key string, value string) (string, bool) {
  17. key = path.Clean(key)
  18. oldValue, ok := s.Nodes[key]
  19. if ok {
  20. s.Nodes[key] = value
  21. return oldValue, true
  22. } else {
  23. s.Nodes[key] = value
  24. return "", false
  25. }
  26. }
  27. // get the node of the key
  28. func (s *Store) Get(key string) (string, error) {
  29. key = path.Clean(key)
  30. value, ok := s.Nodes[key]
  31. if ok {
  32. return value, nil
  33. } else {
  34. return "", errors.New("Key does not exist")
  35. }
  36. }
  37. // delete the key, return the old value if the key exists
  38. func (s *Store) Delete(key string) (string, error) {
  39. key = path.Clean(key)
  40. oldValue, ok := s.Nodes[key]
  41. if ok {
  42. delete(s.Nodes, key)
  43. return oldValue, nil
  44. } else {
  45. return "", errors.New("Key does not exist")
  46. }
  47. }
  48. func (s *Store) Save() ([]byte, error) {
  49. b, err := json.Marshal(s)
  50. if err != nil {
  51. return nil, err
  52. }
  53. return b, nil
  54. }
  55. func (s *Store) Recovery(state []byte) error {
  56. err := json.Unmarshal(state, s)
  57. return err
  58. }