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