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