github.com/hhrutter/nomad@v0.6.0-rc2.0.20170723054333-80c4b03f0705/client/driver/executor/resource_container_linux.go (about)

     1  package executor
     2  
     3  import (
     4  	"os"
     5  	"sync"
     6  
     7  	dstructs "github.com/hashicorp/nomad/client/driver/structs"
     8  	cgroupConfig "github.com/opencontainers/runc/libcontainer/configs"
     9  )
    10  
    11  // resourceContainerContext is a platform-specific struct for managing a
    12  // resource container.  In the case of Linux, this is used to control Cgroups.
    13  type resourceContainerContext struct {
    14  	groups  *cgroupConfig.Cgroup
    15  	cgPaths map[string]string
    16  	cgLock  sync.Mutex
    17  }
    18  
    19  // clientCleanup remoevs this host's Cgroup from the Nomad Client's context
    20  func clientCleanup(ic *dstructs.IsolationConfig, pid int) error {
    21  	if err := DestroyCgroup(ic.Cgroup, ic.CgroupPaths, pid); err != nil {
    22  		return err
    23  	}
    24  	return nil
    25  }
    26  
    27  // cleanup removes this host's Cgroup from within an Executor's context
    28  func (rc *resourceContainerContext) executorCleanup() error {
    29  	rc.cgLock.Lock()
    30  	defer rc.cgLock.Unlock()
    31  	if err := DestroyCgroup(rc.groups, rc.cgPaths, os.Getpid()); err != nil {
    32  		return err
    33  	}
    34  	return nil
    35  }
    36  
    37  func (rc *resourceContainerContext) getIsolationConfig() *dstructs.IsolationConfig {
    38  	return &dstructs.IsolationConfig{
    39  		Cgroup:      rc.groups,
    40  		CgroupPaths: rc.cgPaths,
    41  	}
    42  }