package orchestrator import ( "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/log" "github.com/docker/swarmkit/manager/state/store" "golang.org/x/net/context" ) // IsReplicatedService checks if a service is a replicated service. func IsReplicatedService(service *api.Service) bool { // service nil validation is required as there are scenarios // where service is removed from store if service == nil { return false } _, ok := service.Spec.GetMode().(*api.ServiceSpec_Replicated) return ok } // IsGlobalService checks if the service is a global service. func IsGlobalService(service *api.Service) bool { if service == nil { return false } _, ok := service.Spec.GetMode().(*api.ServiceSpec_Global) return ok } // DeleteServiceTasks deletes the tasks associated with a service. func DeleteServiceTasks(ctx context.Context, s *store.MemoryStore, service *api.Service) { var ( tasks []*api.Task err error ) s.View(func(tx store.ReadTx) { tasks, err = store.FindTasks(tx, store.ByServiceID(service.ID)) }) if err != nil { log.G(ctx).WithError(err).Errorf("failed to list tasks") return } err = s.Batch(func(batch *store.Batch) error { for _, t := range tasks { err := batch.Update(func(tx store.Tx) error { if err := store.DeleteTask(tx, t.ID); err != nil { log.G(ctx).WithError(err).Errorf("failed to delete task") } return nil }) if err != nil { return err } } return nil }) if err != nil { log.G(ctx).WithError(err).Errorf("task search transaction failed") } }