diff options
author | Lennart Poettering <lennart@poettering.net> | 2011-04-14 03:55:03 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2011-04-16 02:03:34 +0200 |
commit | c8f4d7642b743c79328e10e8fb2d9b58e9f6b999 (patch) | |
tree | bb1acede258a78bbbb485dc3fe99c4b27a72916d | |
parent | cfcab435088205b520d244e6111e33b98579181d (diff) |
manager: introduce IgnoreOnIsolate flag so that we can keep systemd-logger around when isolating
-rw-r--r-- | man/systemd.unit.xml | 10 | ||||
-rw-r--r-- | src/automount.c | 2 | ||||
-rw-r--r-- | src/dbus-unit.h | 6 | ||||
-rw-r--r-- | src/device.c | 3 | ||||
-rw-r--r-- | src/load-fragment.c | 1 | ||||
-rw-r--r-- | src/manager.c | 2 | ||||
-rw-r--r-- | src/mount.c | 3 | ||||
-rw-r--r-- | src/swap.c | 3 | ||||
-rw-r--r-- | src/unit.c | 6 | ||||
-rw-r--r-- | src/unit.h | 6 | ||||
-rw-r--r-- | units/systemd-logger.socket | 5 |
11 files changed, 37 insertions, 10 deletions
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml index 0fc2fbe730..65a76be3b7 100644 --- a/man/systemd.unit.xml +++ b/man/systemd.unit.xml @@ -461,6 +461,16 @@ </varlistentry> <varlistentry> + <term><varname>IgnoreOnIsolate=</varname></term> + + <listitem><para>Takes a boolean + argument. If <option>true</option> + this unit will not be stopped when + isolating another unit. Defaults to + <option>false</option>.</para></listitem> + </varlistentry> + + <varlistentry> <term><varname>StopWhenUnneeded=</varname></term> <listitem><para>Takes a boolean diff --git a/src/automount.c b/src/automount.c index f6f83d43b6..33c962e0c0 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 b9f0895525..b578ff98aa 100644 --- a/src/dbus-unit.h +++ b/src/dbus-unit.h @@ -93,15 +93,18 @@ " <property name=\"ActiveExitTimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \ " <property name=\"InactiveEnterTimestamp\" type=\"t\" access=\"read\"/>\n" \ " <property name=\"InactiveEnterTimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \ - " <property name=\"CanReload\" type=\"b\" access=\"read\"/>\n" \ " <property name=\"CanStart\" type=\"b\" access=\"read\"/>\n" \ " <property name=\"CanStop\" type=\"b\" access=\"read\"/>\n" \ + " <property name=\"CanReload\" type=\"b\" access=\"read\"/>\n" \ " <property name=\"CanIsolate\" type=\"b\" access=\"read\"/>\n" \ " <property name=\"Job\" type=\"(uo)\" access=\"read\"/>\n" \ " <property name=\"StopWhenUnneeded\" type=\"b\" access=\"read\"/>\n" \ " <property name=\"RefuseManualStart\" type=\"b\" access=\"read\"/>\n" \ " <property name=\"RefuseManualStop\" type=\"b\" access=\"read\"/>\n" \ + " <property name=\"AllowIsolate\" type=\"b\" access=\"read\"/>\n" \ " <property name=\"DefaultDependencies\" type=\"b\" access=\"read\"/>\n" \ + " <property name=\"OnFailureIsolate\" type=\"b\" access=\"read\"/>\n" \ + " <property name=\"IgnoreOnIsolate\" type=\"b\" access=\"read\"/>\n" \ " <property name=\"DefaultControlGroup\" type=\"s\" access=\"read\"/>\n" \ " <property name=\"ControlGroup\" type=\"as\" access=\"read\"/>\n" \ " <property name=\"NeedDaemonReload\" type=\"b\" access=\"read\"/>\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 41c96cef03..d507b701f1 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 3440d9158f..a7e16ca1b9 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 e723a1e4ef..dfd33b08f4 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 d7a300e796..2b19f497f3 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 c32f60810c..ef001a98bf 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 f50477f878..d7405b92ed 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 2c5cacd9e3..43bbe67573 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 8debd0987d..7178cc8246 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 |