Implement nice level for process running in Docker, adjust testcases to use a different state directory
This commit is contained in:
parent
af529514cf
commit
5384e7bb51
|
@ -21,9 +21,6 @@
|
||||||
, postInstall
|
, postInstall
|
||||||
}:
|
}:
|
||||||
|
|
||||||
# TODO:
|
|
||||||
# nice unsupported
|
|
||||||
|
|
||||||
let
|
let
|
||||||
util = import ../util {
|
util = import ../util {
|
||||||
inherit lib;
|
inherit lib;
|
||||||
|
@ -62,7 +59,7 @@ let
|
||||||
executable = foregroundProcess;
|
executable = foregroundProcess;
|
||||||
user = _user;
|
user = _user;
|
||||||
initialize = _initialize;
|
initialize = _initialize;
|
||||||
inherit name runtimeDir stdenv;
|
inherit name runtimeDir stdenv nice;
|
||||||
} // lib.optionalAttrs (instanceName != null) {
|
} // lib.optionalAttrs (instanceName != null) {
|
||||||
inherit instanceName;
|
inherit instanceName;
|
||||||
} // lib.optionalAttrs (pidFile != null) {
|
} // lib.optionalAttrs (pidFile != null) {
|
||||||
|
@ -77,7 +74,7 @@ let
|
||||||
executable = daemon;
|
executable = daemon;
|
||||||
user = _user;
|
user = _user;
|
||||||
initialize = _initialize;
|
initialize = _initialize;
|
||||||
inherit name runtimeDir stdenv;
|
inherit name runtimeDir stdenv nice;
|
||||||
} // lib.optionalAttrs (instanceName != null) {
|
} // lib.optionalAttrs (instanceName != null) {
|
||||||
inherit instanceName;
|
inherit instanceName;
|
||||||
} // lib.optionalAttrs (pidFile != null) {
|
} // lib.optionalAttrs (pidFile != null) {
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
, instanceName ? null
|
, instanceName ? null
|
||||||
, pidFile ? (if instanceName == null then null else "${runtimeDir}/${instanceName}.pid")
|
, pidFile ? (if instanceName == null then null else "${runtimeDir}/${instanceName}.pid")
|
||||||
, user ? null
|
, user ? null
|
||||||
|
, nice ? null
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
@ -43,7 +44,7 @@ writeTextFile {
|
||||||
trap _interrupt SIGINT
|
trap _interrupt SIGINT
|
||||||
|
|
||||||
# Start process in the background as a daemon
|
# Start process in the background as a daemon
|
||||||
${lib.optionalString (user != null) "${chainload-user}/bin/nixproc-chainload-user ${user}"} ${executable} "$@"
|
${lib.optionalString (user != null) "${chainload-user}/bin/nixproc-chainload-user ${user} "}${lib.optionalString (nice != null) "nice -n ${nice} "}${executable} "$@"
|
||||||
|
|
||||||
# Wait for the PID file to become available. Useful to work with daemons that don't behave well enough.
|
# Wait for the PID file to become available. Useful to work with daemons that don't behave well enough.
|
||||||
count=1 # Start with 1, because 0 returns a non-zero exit status when incrementing it
|
count=1 # Start with 1, because 0 returns a non-zero exit status when incrementing it
|
||||||
|
@ -80,7 +81,7 @@ writeTextFile {
|
||||||
blocker_pid=$!
|
blocker_pid=$!
|
||||||
wait $blocker_pid
|
wait $blocker_pid
|
||||||
'' else ''
|
'' else ''
|
||||||
exec ${lib.optionalString (user != null) "${chainload-user}/bin/nixproc-chainload-user ${user} "}"${executable}" "$@"
|
exec ${lib.optionalString (user != null) "${chainload-user}/bin/nixproc-chainload-user ${user} "}${lib.optionalString (nice != null) "nice -n ${nice} "}"${executable}" "$@"
|
||||||
''}
|
''}
|
||||||
'';
|
'';
|
||||||
executable = true;
|
executable = true;
|
||||||
|
|
|
@ -3,8 +3,11 @@
|
||||||
with import "${nixpkgs}/nixos/lib/testing-python.nix" { system = builtins.currentSystem; };
|
with import "${nixpkgs}/nixos/lib/testing-python.nix" { system = builtins.currentSystem; };
|
||||||
|
|
||||||
let
|
let
|
||||||
|
stateDir = "/dockervar";
|
||||||
|
|
||||||
dockerProcessEnv = import ../nixproc/backends/systemd/build-systemd-env.nix {
|
dockerProcessEnv = import ../nixproc/backends/systemd/build-systemd-env.nix {
|
||||||
exprFile = ./processes-docker.nix;
|
exprFile = ./processes-docker.nix;
|
||||||
|
inherit stateDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
processesEnvForeground = import ../nixproc/backends/docker/build-docker-env.nix {
|
processesEnvForeground = import ../nixproc/backends/docker/build-docker-env.nix {
|
||||||
|
@ -12,6 +15,7 @@ let
|
||||||
extraParams = {
|
extraParams = {
|
||||||
webappMode = "foreground";
|
webappMode = "foreground";
|
||||||
};
|
};
|
||||||
|
inherit stateDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
processesEnvDaemon = import ../nixproc/backends/docker/build-docker-env.nix {
|
processesEnvDaemon = import ../nixproc/backends/docker/build-docker-env.nix {
|
||||||
|
@ -19,23 +23,28 @@ let
|
||||||
extraParams = {
|
extraParams = {
|
||||||
webappMode = "daemon";
|
webappMode = "daemon";
|
||||||
};
|
};
|
||||||
|
inherit stateDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
processesEnvAuto = import ../nixproc/backends/docker/build-docker-env.nix {
|
processesEnvAuto = import ../nixproc/backends/docker/build-docker-env.nix {
|
||||||
exprFile = ../examples/webapps-agnostic/processes.nix;
|
exprFile = ../examples/webapps-agnostic/processes.nix;
|
||||||
|
inherit stateDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
processesEnvAdvanced = import ../nixproc/backends/docker/build-docker-env.nix {
|
processesEnvAdvanced = import ../nixproc/backends/docker/build-docker-env.nix {
|
||||||
exprFile = ../examples/webapps-agnostic/processes-advanced.nix;
|
exprFile = ../examples/webapps-agnostic/processes-advanced.nix;
|
||||||
|
inherit stateDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
processesEnvUnprivileged = import ../nixproc/backends/docker/build-docker-env.nix {
|
processesEnvUnprivileged = import ../nixproc/backends/docker/build-docker-env.nix {
|
||||||
exprFile = ../examples/webapps-agnostic/processes.nix;
|
exprFile = ../examples/webapps-agnostic/processes.nix;
|
||||||
forceDisableUserChange = true;
|
forceDisableUserChange = true;
|
||||||
|
inherit stateDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
processesEnvEmpty = import ../nixproc/backends/docker/build-docker-env.nix {
|
processesEnvEmpty = import ../nixproc/backends/docker/build-docker-env.nix {
|
||||||
exprFile = null;
|
exprFile = null;
|
||||||
|
inherit stateDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
tools = import ../tools {};
|
tools = import ../tools {};
|
||||||
|
@ -111,7 +120,7 @@ makeTest {
|
||||||
# Deploy the system with foreground webapp processes
|
# Deploy the system with foreground webapp processes
|
||||||
|
|
||||||
machine.succeed(
|
machine.succeed(
|
||||||
'${env} nixproc-docker-switch ${nix-processmgmt}/examples/webapps-agnostic/processes.nix --extra-params \'{ "webappMode" = "foreground"; }\'${""}'
|
'${env} nixproc-docker-switch ${nix-processmgmt}/examples/webapps-agnostic/processes.nix --state-dir ${stateDir} --extra-params \'{ "webappMode" = "foreground"; }\'${""}'
|
||||||
)
|
)
|
||||||
|
|
||||||
machine.succeed("sleep 10")
|
machine.succeed("sleep 10")
|
||||||
|
@ -124,7 +133,7 @@ makeTest {
|
||||||
# Deploy the system with daemon webapp processes
|
# Deploy the system with daemon webapp processes
|
||||||
|
|
||||||
machine.succeed(
|
machine.succeed(
|
||||||
'${env} nixproc-docker-switch ${nix-processmgmt}/examples/webapps-agnostic/processes.nix --extra-params \'{ "webappMode" = "daemon"; }\'${""}'
|
'${env} nixproc-docker-switch ${nix-processmgmt}/examples/webapps-agnostic/processes.nix --state-dir ${stateDir} --extra-params \'{ "webappMode" = "daemon"; }\'${""}'
|
||||||
)
|
)
|
||||||
|
|
||||||
machine.succeed("sleep 10")
|
machine.succeed("sleep 10")
|
||||||
|
@ -137,7 +146,7 @@ makeTest {
|
||||||
# Deploy the entire system in auto mode. Should result in foreground webapp processes
|
# Deploy the entire system in auto mode. Should result in foreground webapp processes
|
||||||
|
|
||||||
machine.succeed(
|
machine.succeed(
|
||||||
"${env} nixproc-docker-switch ${nix-processmgmt}/examples/webapps-agnostic/processes.nix"
|
"${env} nixproc-docker-switch ${nix-processmgmt}/examples/webapps-agnostic/processes.nix --state-dir ${stateDir}"
|
||||||
)
|
)
|
||||||
|
|
||||||
machine.succeed("sleep 10")
|
machine.succeed("sleep 10")
|
||||||
|
@ -150,7 +159,7 @@ makeTest {
|
||||||
# Deploy the advanced example with multiple instances and see if it works
|
# Deploy the advanced example with multiple instances and see if it works
|
||||||
|
|
||||||
machine.succeed(
|
machine.succeed(
|
||||||
"${env} nixproc-docker-switch ${nix-processmgmt}/examples/webapps-agnostic/processes-advanced.nix"
|
"${env} nixproc-docker-switch ${nix-processmgmt}/examples/webapps-agnostic/processes-advanced.nix --state-dir ${stateDir}"
|
||||||
)
|
)
|
||||||
|
|
||||||
machine.succeed("sleep 40")
|
machine.succeed("sleep 40")
|
||||||
|
@ -161,7 +170,7 @@ makeTest {
|
||||||
# Deploy an instance without changing user privileges
|
# Deploy an instance without changing user privileges
|
||||||
|
|
||||||
machine.succeed(
|
machine.succeed(
|
||||||
"${env} nixproc-docker-switch ${nix-processmgmt}/examples/webapps-agnostic/processes.nix --force-disable-user-change"
|
"${env} nixproc-docker-switch ${nix-processmgmt}/examples/webapps-agnostic/processes.nix --state-dir ${stateDir} --force-disable-user-change"
|
||||||
)
|
)
|
||||||
|
|
||||||
machine.succeed("sleep 10")
|
machine.succeed("sleep 10")
|
||||||
|
|
Loading…
Reference in New Issue