mirror of https://github.com/docker/docs.git
80 lines
1.4 KiB
Go
80 lines
1.4 KiB
Go
package mesos
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/docker/swarm/cluster"
|
|
"github.com/docker/swarm/cluster/mesos/task"
|
|
"github.com/mesos/mesos-go/mesosproto"
|
|
)
|
|
|
|
type agent struct {
|
|
sync.RWMutex
|
|
|
|
id string
|
|
offers map[string]*mesosproto.Offer
|
|
tasks map[string]*task.Task
|
|
engine *cluster.Engine
|
|
}
|
|
|
|
func newAgent(sid string, e *cluster.Engine) *agent {
|
|
return &agent{
|
|
id: sid,
|
|
offers: make(map[string]*mesosproto.Offer),
|
|
tasks: make(map[string]*task.Task),
|
|
engine: e,
|
|
}
|
|
}
|
|
|
|
func (s *agent) addOffer(offer *mesosproto.Offer) {
|
|
s.Lock()
|
|
s.offers[offer.Id.GetValue()] = offer
|
|
s.Unlock()
|
|
}
|
|
|
|
func (s *agent) addTask(task *task.Task) {
|
|
s.Lock()
|
|
s.tasks[task.TaskInfo.TaskId.GetValue()] = task
|
|
s.Unlock()
|
|
}
|
|
|
|
func (s *agent) removeOffer(offerID string) bool {
|
|
s.Lock()
|
|
defer s.Unlock()
|
|
found := false
|
|
_, found = s.offers[offerID]
|
|
if found {
|
|
delete(s.offers, offerID)
|
|
}
|
|
return found
|
|
}
|
|
|
|
func (s *agent) removeTask(taskID string) bool {
|
|
s.Lock()
|
|
defer s.Unlock()
|
|
found := false
|
|
_, found = s.tasks[taskID]
|
|
if found {
|
|
delete(s.tasks, taskID)
|
|
}
|
|
return found
|
|
}
|
|
|
|
func (s *agent) empty() bool {
|
|
s.RLock()
|
|
defer s.RUnlock()
|
|
return len(s.offers) == 0 && len(s.tasks) == 0
|
|
}
|
|
|
|
func (s *agent) getOffers() map[string]*mesosproto.Offer {
|
|
s.RLock()
|
|
defer s.RUnlock()
|
|
return s.offers
|
|
}
|
|
|
|
func (s *agent) getTasks() map[string]*task.Task {
|
|
s.RLock()
|
|
defer s.RUnlock()
|
|
return s.tasks
|
|
}
|