Merge pull request #185 from thaJeztah/18.09_backport_fix_leaking_task_resources
[18.09] bump docker/swarmkit 19e791fd6dc76e8e894cbc99 (18.09 branch)
This commit is contained in:
commit
1046c63711
2 changed files with 13 additions and 15 deletions
|
@ -130,7 +130,7 @@ github.com/containerd/ttrpc 2a805f71863501300ae1976d29f0454ae003e85a
|
|||
github.com/gogo/googleapis 08a7655d27152912db7aaf4f983275eaf8d128ef
|
||||
|
||||
# cluster
|
||||
github.com/docker/swarmkit c66ed60822d3fc3bf6e17a505ee79014f449ef05 # bump_v18.09 branch
|
||||
github.com/docker/swarmkit 19e791fd6dc76e8e894cbc99b77f946b7d00ebb9 # bump_v18.09 branch
|
||||
github.com/gogo/protobuf v1.0.0
|
||||
github.com/cloudflare/cfssl 1.3.2
|
||||
github.com/fernet/fernet-go 1b2437bc582b3cfbb341ee5a29f8ef5b42912ff2
|
||||
|
|
26
vendor/github.com/docker/swarmkit/manager/controlapi/node.go
generated
vendored
26
vendor/github.com/docker/swarmkit/manager/controlapi/node.go
generated
vendored
|
@ -254,25 +254,23 @@ func (s *Server) UpdateNode(ctx context.Context, request *api.UpdateNodeRequest)
|
|||
}, nil
|
||||
}
|
||||
|
||||
func removeNodeAttachments(tx store.Tx, nodeID string) error {
|
||||
// orphan the node's attached containers. if we don't do this, the
|
||||
// network these attachments are connected to will never be removeable
|
||||
func orphanNodeTasks(tx store.Tx, nodeID string) error {
|
||||
// when a node is deleted, all of its tasks are irrecoverably removed.
|
||||
// additionally, the Dispatcher can no longer be relied on to update the
|
||||
// task status. Therefore, when the node is removed, we must additionally
|
||||
// move all of its assigned tasks to the Orphaned state, so that their
|
||||
// resources can be cleaned up.
|
||||
tasks, err := store.FindTasks(tx, store.ByNodeID(nodeID))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, task := range tasks {
|
||||
// if the task is an attachment, then we just delete it. the allocator
|
||||
// will do the heavy lifting. basically, GetAttachment will return the
|
||||
// attachment if that's the kind of runtime, or nil if it's not.
|
||||
if task.Spec.GetAttachment() != nil {
|
||||
// don't delete the task. instead, update it to `ORPHANED` so that
|
||||
// the taskreaper will clean it up.
|
||||
task.Status.State = api.TaskStateOrphaned
|
||||
if err := store.UpdateTask(tx, task); err != nil {
|
||||
return err
|
||||
}
|
||||
task.Status = api.TaskStatus{
|
||||
Timestamp: gogotypes.TimestampNow(),
|
||||
State: api.TaskStateOrphaned,
|
||||
Message: "Task belonged to a node that has been deleted",
|
||||
}
|
||||
store.UpdateTask(tx, task)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -342,7 +340,7 @@ func (s *Server) RemoveNode(ctx context.Context, request *api.RemoveNodeRequest)
|
|||
return err
|
||||
}
|
||||
|
||||
if err := removeNodeAttachments(tx, request.NodeID); err != nil {
|
||||
if err := orphanNodeTasks(tx, request.NodeID); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue