From: Lennart Poettering Date: Thu, 14 Apr 2011 01:55:03 +0000 (+0200) Subject: manager: introduce IgnoreOnIsolate flag so that we can keep systemd-logger around... X-Git-Tag: v25~45 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c8f4d7642b743c79328e10e8fb2d9b58e9f6b999;p=systemd manager: introduce IgnoreOnIsolate flag so that we can keep systemd-logger around when isolating --- diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml index 0fc2fbe7..65a76be3 100644 --- a/man/systemd.unit.xml +++ b/man/systemd.unit.xml @@ -460,6 +460,16 @@ . + + IgnoreOnIsolate= + + Takes a boolean + argument. If + this unit will not be stopped when + isolating another unit. Defaults to + . + + StopWhenUnneeded= diff --git a/src/automount.c b/src/automount.c index f6f83d43..33c962e0 100644 --- a/src/automount.c +++ b/src/automount.c @@ -58,6 +58,8 @@ static void automount_init(Unit *u) { a->pipe_watch.type = WATCH_INVALID; a->directory_mode = 0755; + + a->meta.ignore_on_isolate = true; } static void repeat_unmout(const char *path) { diff --git a/src/dbus-unit.h b/src/dbus-unit.h index b9f08955..b578ff98 100644 --- a/src/dbus-unit.h +++ b/src/dbus-unit.h @@ -93,15 +93,18 @@ " \n" \ " \n" \ " \n" \ - " \n" \ " \n" \ " \n" \ + " \n" \ " \n" \ " \n" \ " \n" \ " \n" \ " \n" \ + " \n" \ " \n" \ + " \n" \ + " \n" \ " \n" \ " \n" \ " \n" \ @@ -158,6 +161,7 @@ { "org.freedesktop.systemd1.Unit", "AllowIsolate", bus_property_append_bool, "b", &u->meta.allow_isolate }, \ { "org.freedesktop.systemd1.Unit", "DefaultDependencies", bus_property_append_bool, "b", &u->meta.default_dependencies }, \ { "org.freedesktop.systemd1.Unit", "OnFailureIsolate", bus_property_append_bool, "b", &u->meta.on_failure_isolate }, \ + { "org.freedesktop.systemd1.Unit", "IgnoreOnIsolate", bus_property_append_bool, "b", &u->meta.ignore_on_isolate }, \ { "org.freedesktop.systemd1.Unit", "DefaultControlGroup", bus_unit_append_default_cgroup, "s", u }, \ { "org.freedesktop.systemd1.Unit", "ControlGroup", bus_unit_append_cgroups, "as", u }, \ { "org.freedesktop.systemd1.Unit", "NeedDaemonReload", bus_unit_append_need_daemon_reload, "b", u }, \ diff --git a/src/device.c b/src/device.c index 41c96cef..d507b701 100644 --- a/src/device.c +++ b/src/device.c @@ -70,6 +70,8 @@ static void device_init(Unit *u) { * happen for the other units since their operations time out * anyway. */ d->meta.job_timeout = DEFAULT_TIMEOUT_USEC; + + d->meta.ignore_on_isolate = true; } static void device_done(Unit *u) { @@ -583,7 +585,6 @@ const UnitVTable device_vtable = { .no_instances = true, .no_snapshots = true, - .no_isolate = true, .init = device_init, diff --git a/src/load-fragment.c b/src/load-fragment.c index 3440d915..a7e16ca1 100644 --- a/src/load-fragment.c +++ b/src/load-fragment.c @@ -1861,6 +1861,7 @@ static int load_from_path(Unit *u, const char *path) { { "AllowIsolate", config_parse_bool, 0, &u->meta.allow_isolate, "Unit" }, { "DefaultDependencies", config_parse_bool, 0, &u->meta.default_dependencies, "Unit" }, { "OnFailureIsolate", config_parse_bool, 0, &u->meta.on_failure_isolate, "Unit" }, + { "IgnoreOnIsolate", config_parse_bool, 0, &u->meta.ignore_on_isolate, "Unit" }, { "JobTimeoutSec", config_parse_usec, 0, &u->meta.job_timeout, "Unit" }, { "ConditionPathExists", config_parse_condition_path, CONDITION_PATH_EXISTS, u, "Unit" }, { "ConditionPathIsDirectory", config_parse_condition_path, CONDITION_PATH_IS_DIRECTORY, u, "Unit" }, diff --git a/src/manager.c b/src/manager.c index e723a1e4..dfd33b08 100644 --- a/src/manager.c +++ b/src/manager.c @@ -1619,7 +1619,7 @@ static int transaction_add_isolate_jobs(Manager *m) { if (u->meta.id != k) continue; - if (UNIT_VTABLE(u)->no_isolate) + if (u->meta.ignore_on_isolate) continue; /* No need to stop inactive jobs */ diff --git a/src/mount.c b/src/mount.c index d7a300e7..2b19f497 100644 --- a/src/mount.c +++ b/src/mount.c @@ -80,6 +80,8 @@ static void mount_init(Unit *u) { m->timer_watch.type = WATCH_INVALID; m->control_command_id = _MOUNT_EXEC_COMMAND_INVALID; + + m->meta.ignore_on_isolate = true; } static void mount_unwatch_control_pid(Mount *m) { @@ -1763,7 +1765,6 @@ const UnitVTable mount_vtable = { .no_alias = true, .no_instances = true, - .no_isolate = true, .show_status = true, .init = mount_init, diff --git a/src/swap.c b/src/swap.c index c32f6081..ef001a98 100644 --- a/src/swap.c +++ b/src/swap.c @@ -90,6 +90,8 @@ static void swap_unset_proc_swaps(Swap *s) { s->timer_watch.type = WATCH_INVALID; s->control_command_id = _MOUNT_EXEC_COMMAND_INVALID; + + s->meta.ignore_on_isolate = true; } static void swap_unwatch_control_pid(Swap *s) { @@ -1339,7 +1341,6 @@ const UnitVTable swap_vtable = { .no_alias = true, .no_instances = true, - .no_isolate = true, .show_status = true, .init = swap_init, diff --git a/src/unit.c b/src/unit.c index f50477f8..d7405b92 100644 --- a/src/unit.c +++ b/src/unit.c @@ -664,12 +664,14 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) { "%s\tRefuseManualStart: %s\n" "%s\tRefuseManualStop: %s\n" "%s\tDefaultDependencies: %s\n" - "%s\tOnFailureIsolate: %s\n", + "%s\tOnFailureIsolate: %s\n" + "%s\tIgnoreOnIsolate: %s\n", prefix, yes_no(u->meta.stop_when_unneeded), prefix, yes_no(u->meta.refuse_manual_start), prefix, yes_no(u->meta.refuse_manual_stop), prefix, yes_no(u->meta.default_dependencies), - prefix, yes_no(u->meta.on_failure_isolate)); + prefix, yes_no(u->meta.on_failure_isolate), + prefix, yes_no(u->meta.ignore_on_isolate)); LIST_FOREACH(by_unit, b, u->meta.cgroup_bondings) fprintf(f, "%s\tControlGroup: %s:%s\n", diff --git a/src/unit.h b/src/unit.h index 2c5cacd9..43bbe675 100644 --- a/src/unit.h +++ b/src/unit.h @@ -210,6 +210,9 @@ struct Meta { /* Isolate OnFailure unit */ bool on_failure_isolate; + /* Ignore this unit when isolating */ + bool ignore_on_isolate; + /* Did the last condition check suceed? */ bool condition_result; @@ -367,9 +370,6 @@ struct UnitVTable { /* Exclude from automatic gc */ bool no_gc:1; - /* Exclude from stopping on isolation requests */ - bool no_isolate:1; - /* Show status updates on the console */ bool show_status:1; }; diff --git a/units/systemd-logger.socket b/units/systemd-logger.socket index 8debd098..7178cc82 100644 --- a/units/systemd-logger.socket +++ b/units/systemd-logger.socket @@ -12,5 +12,10 @@ Description=Stdio Syslog Bridge Socket DefaultDependencies=no Before=sockets.target +# Mount and swap units need this. If this socket unit is removed by an +# isolate request the mount and and swap units would be removed too, +# hence let's exclude this from isolate requests. +IgnoreOnIsolate=yes + [Socket] ListenStream=/run/systemd/logger