chiark / gitweb /
unit: make ignoring in snapshots a per unit property, instead of a per unit type...
authorLennart Poettering <lennart@poettering.net>
Thu, 5 May 2011 08:58:55 +0000 (10:58 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 5 May 2011 08:58:55 +0000 (10:58 +0200)
man/systemd.unit.xml
src/dbus-unit.h
src/device.c
src/load-fragment.c
src/snapshot.c
src/unit.c
src/unit.h

index 65a76be3b7e16e3b6116424b926ce81ab0f00318..6ad6b4a0bee4803ad1614f72be9dcc64cb372ffa 100644 (file)
                                 <option>false</option>.</para></listitem>
                         </varlistentry>
 
+                        <varlistentry>
+                                <term><varname>IgnoreOnSnapshot=</varname></term>
+
+                                <listitem><para>Takes a boolean
+                                argument. If <option>true</option>
+                                this unit will not be included in
+                                snapshots. Defaults to
+                                <option>false</option> for device and
+                                snapshot units, <option>true</option>
+                                for the others.</para></listitem>
+                        </varlistentry>
+
                         <varlistentry>
                                 <term><varname>StopWhenUnneeded=</varname></term>
 
index a2a93235ee53d468deb7bdcf7d74f671ed884e55..df8f6ae2acaa837846a99df982962bd38f425e7e 100644 (file)
         "  <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=\"IgnoreOnSnapshot\" 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" \
         { "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", "IgnoreOnSnapshot",     bus_property_append_bool,       "b",    &u->meta.ignore_on_snapshot       }, \
         { "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                                }, \
index d507b701f138ecafe0b6e20e3e4aeda8399ed219..64b21903edd848f185f745bd5f58b94d44b23a09 100644 (file)
@@ -72,6 +72,7 @@ static void device_init(Unit *u) {
         d->meta.job_timeout = DEFAULT_TIMEOUT_USEC;
 
         d->meta.ignore_on_isolate = true;
+        d->meta.ignore_on_snapshot = true;
 }
 
 static void device_done(Unit *u) {
@@ -584,7 +585,6 @@ const UnitVTable device_vtable = {
         .suffix = ".device",
 
         .no_instances = true,
-        .no_snapshots = true,
 
         .init = device_init,
 
index 6ec5090197736d510c129a461e05cfd57821aa74..f8be4dbaa4882ef527b6eeb31cbc0687c9b2598d 100644 (file)
@@ -1878,6 +1878,7 @@ static int load_from_path(Unit *u, const char *path) {
                 { "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"    },
+                { "IgnoreOnSnapshot",       config_parse_bool,            0, &u->meta.ignore_on_snapshot,                     "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"    },
index 7cde25d4f6a57c82b5f6645aece95289a0e2b83d..9825f90521d7ff7079200da066d88d5b863a24ed 100644 (file)
@@ -32,6 +32,16 @@ static const UnitActiveState state_translation_table[_SNAPSHOT_STATE_MAX] = {
         [SNAPSHOT_ACTIVE] = UNIT_ACTIVE
 };
 
+static void snapshot_init(Unit *u) {
+        Snapshot *s = SNAPSHOT(u);
+
+        assert(s);
+        assert(s->meta.load_state == UNIT_STUB);
+
+        s->meta.ignore_on_isolate = true;
+        s->meta.ignore_on_snapshot = true;
+}
+
 static void snapshot_set_state(Snapshot *s, SnapshotState state) {
         SnapshotState old_state;
         assert(s);
@@ -228,7 +238,7 @@ int snapshot_create(Manager *m, const char *name, bool cleanup, DBusError *e, Sn
 
         HASHMAP_FOREACH_KEY(other, k, m->units, i) {
 
-                if (UNIT_VTABLE(other)->no_snapshots)
+                if (other->meta.ignore_on_snapshot)
                         continue;
 
                 if (k != other->meta.id)
@@ -275,9 +285,10 @@ const UnitVTable snapshot_vtable = {
 
         .no_alias = true,
         .no_instances = true,
-        .no_snapshots = true,
         .no_gc = true,
 
+        .init = snapshot_init,
+
         .load = snapshot_load,
         .coldplug = snapshot_coldplug,
 
index b7ff0c51fe9f40b4914da36d8513232ce40e9500..9bb4e56073ab042a9ee89641c22b3cee35c816ed 100644 (file)
@@ -667,13 +667,15 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
                         "%s\tRefuseManualStop: %s\n"
                         "%s\tDefaultDependencies: %s\n"
                         "%s\tOnFailureIsolate: %s\n"
-                        "%s\tIgnoreOnIsolate: %s\n",
+                        "%s\tIgnoreOnIsolate: %s\n"
+                        "%s\tIgnoreOnSnapshot: %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.ignore_on_isolate));
+                        prefix, yes_no(u->meta.ignore_on_isolate),
+                        prefix, yes_no(u->meta.ignore_on_snapshot));
 
                 LIST_FOREACH(by_unit, b, u->meta.cgroup_bondings)
                         fprintf(f, "%s\tControlGroup: %s:%s\n",
index 43bbe6757363ec18881d95c7db0a121d086a3a7b..717c928075589f860152f0d91ea99c773d65ddb6 100644 (file)
@@ -213,6 +213,9 @@ struct Meta {
         /* Ignore this unit when isolating */
         bool ignore_on_isolate;
 
+        /* Ignore this unit when snapshotting */
+        bool ignore_on_snapshot;
+
         /* Did the last condition check suceed? */
         bool condition_result;
 
@@ -364,9 +367,6 @@ struct UnitVTable {
         /* Instances make no sense for this type */
         bool no_instances:1;
 
-        /* Exclude this type from snapshots */
-        bool no_snapshots:1;
-
         /* Exclude from automatic gc */
         bool no_gc:1;