service.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package orchestrator
  2. import (
  3. "github.com/docker/swarmkit/api"
  4. "github.com/docker/swarmkit/log"
  5. "github.com/docker/swarmkit/manager/state/store"
  6. "golang.org/x/net/context"
  7. )
  8. // IsReplicatedService checks if a service is a replicated service.
  9. func IsReplicatedService(service *api.Service) bool {
  10. // service nil validation is required as there are scenarios
  11. // where service is removed from store
  12. if service == nil {
  13. return false
  14. }
  15. _, ok := service.Spec.GetMode().(*api.ServiceSpec_Replicated)
  16. return ok
  17. }
  18. // IsGlobalService checks if the service is a global service.
  19. func IsGlobalService(service *api.Service) bool {
  20. if service == nil {
  21. return false
  22. }
  23. _, ok := service.Spec.GetMode().(*api.ServiceSpec_Global)
  24. return ok
  25. }
  26. // DeleteServiceTasks deletes the tasks associated with a service.
  27. func DeleteServiceTasks(ctx context.Context, s *store.MemoryStore, service *api.Service) {
  28. var (
  29. tasks []*api.Task
  30. err error
  31. )
  32. s.View(func(tx store.ReadTx) {
  33. tasks, err = store.FindTasks(tx, store.ByServiceID(service.ID))
  34. })
  35. if err != nil {
  36. log.G(ctx).WithError(err).Errorf("failed to list tasks")
  37. return
  38. }
  39. err = s.Batch(func(batch *store.Batch) error {
  40. for _, t := range tasks {
  41. err := batch.Update(func(tx store.Tx) error {
  42. if err := store.DeleteTask(tx, t.ID); err != nil {
  43. log.G(ctx).WithError(err).Errorf("failed to delete task")
  44. }
  45. return nil
  46. })
  47. if err != nil {
  48. return err
  49. }
  50. }
  51. return nil
  52. })
  53. if err != nil {
  54. log.G(ctx).WithError(err).Errorf("task search transaction failed")
  55. }
  56. }