summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2011-04-14 03:55:03 +0200
committerLennart Poettering <lennart@poettering.net>2011-04-16 02:03:34 +0200
commitc8f4d7642b743c79328e10e8fb2d9b58e9f6b999 (patch)
treebb1acede258a78bbbb485dc3fe99c4b27a72916d
parentcfcab435088205b520d244e6111e33b98579181d (diff)
manager: introduce IgnoreOnIsolate flag so that we can keep systemd-logger around when isolating
-rw-r--r--man/systemd.unit.xml10
-rw-r--r--src/automount.c2
-rw-r--r--src/dbus-unit.h6
-rw-r--r--src/device.c3
-rw-r--r--src/load-fragment.c1
-rw-r--r--src/manager.c2
-rw-r--r--src/mount.c3
-rw-r--r--src/swap.c3
-rw-r--r--src/unit.c6
-rw-r--r--src/unit.h6
-rw-r--r--units/systemd-logger.socket5
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