Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify cgroup paths handling in v2 via unified v1/v2 API #2386

Merged
merged 1 commit into from
May 12, 2020

Commits on May 8, 2020

  1. Simplify cgroup path handing in v2 via unified API

    This unties the Gordian Knot of using GetPaths in cgroupv2 code.
    
    The problem is, the current code uses GetPaths for three kinds of things:
    
    1. Get all the paths to cgroup v1 controllers to save its state (see
       (*linuxContainer).currentState(), (*LinuxFactory).loadState()
       methods).
    
    2. Get all the paths to cgroup v1 controllers to have the setns process
        enter the proper cgroups in `(*setnsProcess).start()`.
    
    3. Get the path to a specific controller (for example,
       `m.GetPaths()["devices"]`).
    
    Now, for cgroup v2 instead of a set of per-controller paths, we have only
    one single unified path, and a dedicated function `GetUnifiedPath()` to get it.
    
    This discrepancy between v1 and v2 cgroupManager API leads to the
    following problems with the code:
    
     - multiple if/else code blocks that have to treat v1 and v2 separately;
    
     - backward-compatible GetPaths() methods in v2 controllers;
    
     -  - repeated writing of the PID into the same cgroup for v2;
    
    Overall, it's hard to write the right code with all this, and the code
    that is written is kinda hard to follow.
    
    The solution is to slightly change the API to do the 3 things outlined
    above in the same manner for v1 and v2:
    
    1. Use `GetPaths()` for state saving and setns process cgroups entering.
    
    2. Introduce and use Path(subsys string) to obtain a path to a
       subsystem. For v2, the argument is ignored and the unified path is
       returned.
    
    This commit converts all the controllers to the new API, and modifies
    all the users to use it.
    
    Signed-off-by: Kir Kolyshkin <[email protected]>
    kolyshkin committed May 8, 2020
    Configuration menu
    Copy the full SHA
    714c91e View commit details
    Browse the repository at this point in the history