This moves the shim's API and protos out of the containerd services package and into the linux runtime package. This is because the shim is an implementation detail of the linux runtime that we have and it is not a containerd user facing api. Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
		
			
				
	
	
		
			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.containerID
 | 
						|
	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.containerID)
 | 
						|
	}
 | 
						|
}
 |