76 lines
1.4 KiB
Go
76 lines
1.4 KiB
Go
// +build linux
|
|
|
|
package linux
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
|
|
"github.com/containerd/containerd/namespaces"
|
|
)
|
|
|
|
func newTaskList() *taskList {
|
|
return &taskList{
|
|
tasks: make(map[string]map[string]*Task),
|
|
}
|
|
}
|
|
|
|
type taskList struct {
|
|
mu sync.Mutex
|
|
tasks map[string]map[string]*Task
|
|
}
|
|
|
|
func (l *taskList) get(ctx context.Context, id string) (*Task, error) {
|
|
l.mu.Lock()
|
|
defer l.mu.Unlock()
|
|
namespace, err := namespaces.NamespaceRequired(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
tasks, ok := l.tasks[namespace]
|
|
if !ok {
|
|
return nil, ErrTaskNotExists
|
|
}
|
|
t, ok := tasks[id]
|
|
if !ok {
|
|
return nil, ErrTaskNotExists
|
|
}
|
|
return t, nil
|
|
}
|
|
|
|
func (l *taskList) add(ctx context.Context, t *Task) error {
|
|
namespace, err := namespaces.NamespaceRequired(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return l.addWithNamespace(namespace, t)
|
|
}
|
|
|
|
func (l *taskList) addWithNamespace(namespace string, t *Task) error {
|
|
l.mu.Lock()
|
|
defer l.mu.Unlock()
|
|
|
|
id := t.id
|
|
if _, ok := l.tasks[namespace]; !ok {
|
|
l.tasks[namespace] = make(map[string]*Task)
|
|
}
|
|
if _, ok := l.tasks[namespace][id]; ok {
|
|
return ErrTaskAlreadyExists
|
|
}
|
|
l.tasks[namespace][id] = t
|
|
return nil
|
|
}
|
|
|
|
func (l *taskList) delete(ctx context.Context, t *Task) {
|
|
l.mu.Lock()
|
|
defer l.mu.Unlock()
|
|
namespace, err := namespaces.NamespaceRequired(ctx)
|
|
if err != nil {
|
|
return
|
|
}
|
|
tasks, ok := l.tasks[namespace]
|
|
if ok {
|
|
delete(tasks, t.id)
|
|
}
|
|
}
|