apply.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package store
  2. import (
  3. "errors"
  4. "github.com/docker/go-events"
  5. "github.com/docker/swarmkit/api"
  6. "github.com/docker/swarmkit/manager/state"
  7. )
  8. // Apply takes an item from the event stream of one Store and applies it to
  9. // a second Store.
  10. func Apply(store *MemoryStore, item events.Event) (err error) {
  11. return store.Update(func(tx Tx) error {
  12. switch v := item.(type) {
  13. case api.EventCreateTask:
  14. return CreateTask(tx, v.Task)
  15. case api.EventUpdateTask:
  16. return UpdateTask(tx, v.Task)
  17. case api.EventDeleteTask:
  18. return DeleteTask(tx, v.Task.ID)
  19. case api.EventCreateService:
  20. return CreateService(tx, v.Service)
  21. case api.EventUpdateService:
  22. return UpdateService(tx, v.Service)
  23. case api.EventDeleteService:
  24. return DeleteService(tx, v.Service.ID)
  25. case api.EventCreateNetwork:
  26. return CreateNetwork(tx, v.Network)
  27. case api.EventUpdateNetwork:
  28. return UpdateNetwork(tx, v.Network)
  29. case api.EventDeleteNetwork:
  30. return DeleteNetwork(tx, v.Network.ID)
  31. case api.EventCreateNode:
  32. return CreateNode(tx, v.Node)
  33. case api.EventUpdateNode:
  34. return UpdateNode(tx, v.Node)
  35. case api.EventDeleteNode:
  36. return DeleteNode(tx, v.Node.ID)
  37. case state.EventCommit:
  38. return nil
  39. }
  40. return errors.New("unrecognized event type")
  41. })
  42. }