mirror of
https://github.com/opencontainers/runc.git
synced 2025-10-25 00:20:47 +08:00
`configs.Cgroup` contains the configuration used to create cgroups. This configuration must be saved to disk, since it's required to restore the cgroup manager that was used to create the cgroups. Add method to get cgroup configuration from cgroup Manager to allow API users save it to disk and restore a cgroup manager later. fixes #2176 Signed-off-by: Julio Montes <julio.montes@intel.com>
75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
// +build linux
|
|
|
|
package cgroups
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/opencontainers/runc/libcontainer/configs"
|
|
)
|
|
|
|
type Manager interface {
|
|
// Applies cgroup configuration to the process with the specified pid
|
|
Apply(pid int) error
|
|
|
|
// Returns the PIDs inside the cgroup set
|
|
GetPids() ([]int, error)
|
|
|
|
// Returns the PIDs inside the cgroup set & all sub-cgroups
|
|
GetAllPids() ([]int, error)
|
|
|
|
// Returns statistics for the cgroup set
|
|
GetStats() (*Stats, error)
|
|
|
|
// Toggles the freezer cgroup according with specified state
|
|
Freeze(state configs.FreezerState) error
|
|
|
|
// Destroys the cgroup set
|
|
Destroy() error
|
|
|
|
// The option func SystemdCgroups() and Cgroupfs() require following attributes:
|
|
// Paths map[string]string
|
|
// Cgroups *configs.Cgroup
|
|
// Paths maps cgroup subsystem to path at which it is mounted.
|
|
// Cgroups specifies specific cgroup settings for the various subsystems
|
|
|
|
// Returns cgroup paths to save in a state file and to be able to
|
|
// restore the object later.
|
|
GetPaths() map[string]string
|
|
|
|
// GetUnifiedPath returns the unified path when running in unified mode.
|
|
// The value corresponds to the all values of GetPaths() map.
|
|
//
|
|
// GetUnifiedPath returns error when running in hybrid mode as well as
|
|
// in legacy mode.
|
|
GetUnifiedPath() (string, error)
|
|
|
|
// Sets the cgroup as configured.
|
|
Set(container *configs.Config) error
|
|
|
|
// Gets the cgroup as configured.
|
|
GetCgroups() (*configs.Cgroup, error)
|
|
}
|
|
|
|
type NotFoundError struct {
|
|
Subsystem string
|
|
}
|
|
|
|
func (e *NotFoundError) Error() string {
|
|
return fmt.Sprintf("mountpoint for %s not found", e.Subsystem)
|
|
}
|
|
|
|
func NewNotFoundError(sub string) error {
|
|
return &NotFoundError{
|
|
Subsystem: sub,
|
|
}
|
|
}
|
|
|
|
func IsNotFound(err error) bool {
|
|
if err == nil {
|
|
return false
|
|
}
|
|
_, ok := err.(*NotFoundError)
|
|
return ok
|
|
}
|