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  }