]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: add a reverse dep for OnFailure=
authorLennart Poettering <lennart@poettering.net>
Tue, 13 Apr 2021 18:50:21 +0000 (20:50 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 25 May 2021 14:03:03 +0000 (16:03 +0200)
Let's add an implicit reverse dep OnFailureOf=. This is exposed via the
bus to make things more debuggable: you can now ask systemd for which
units a specific unit is the failure handler.

OnFailure= was the only dependency type that had no inverse, this fixes
that.

Now that deps are a bit cheaper, it should be OK to add deps that only
serve debug purposes.

man/org.freedesktop.systemd1.xml
src/basic/unit-def.c
src/basic/unit-def.h
src/core/dbus-unit.c
src/core/unit-dependency-atom.c
src/core/unit.c

index de724126405bb7d9f89f03024aae0f696528cb50..36bd7173d4c110dd4f20042fbd6f823bc7995546 100644 (file)
@@ -1630,6 +1630,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as OnFailure = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
+      readonly as OnFailureOf = ['...', ...];
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as Triggers = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as TriggeredBy = ['...', ...];
@@ -1773,6 +1775,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
 
     <!--property ConsistsOf is not documented!-->
 
+    <!--property OnFailureOf is not documented!-->
+
     <!--property ReloadPropagatedFrom is not documented!-->
 
     <!--property JoinsNamespaceOf is not documented!-->
@@ -1905,6 +1909,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
 
     <variablelist class="dbus-property" generated="True" extra-ref="OnFailure"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="OnFailureOf"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="Triggers"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="TriggeredBy"/>
index 56516203178503ab39ed92668781ee7f311766cf..fd7615de8814343492fb867734ea89f6d7d12830 100644 (file)
@@ -275,6 +275,7 @@ static const char* const unit_dependency_table[_UNIT_DEPENDENCY_MAX] = {
         [UNIT_BEFORE] = "Before",
         [UNIT_AFTER] = "After",
         [UNIT_ON_FAILURE] = "OnFailure",
+        [UNIT_ON_FAILURE_OF] = "OnFailureOf",
         [UNIT_TRIGGERS] = "Triggers",
         [UNIT_TRIGGERED_BY] = "TriggeredBy",
         [UNIT_PROPAGATES_RELOAD_TO] = "PropagatesReloadTo",
index 7d76576de10c255db95d0e497e7a96c14c70b1db..ec40bab01f06302fb5f86679885069f38adf7735 100644 (file)
@@ -229,6 +229,7 @@ typedef enum UnitDependency {
 
         /* On Failure */
         UNIT_ON_FAILURE,
+        UNIT_ON_FAILURE_OF,
 
         /* Triggers (i.e. a socket triggers a service) */
         UNIT_TRIGGERS,
index a1278dd6e9865184e880fda8a9ea74d65ad12847..6ca16262ab650b15c5a13b1b6786ca6a73da3ae0 100644 (file)
@@ -865,6 +865,7 @@ const sd_bus_vtable bus_unit_vtable[] = {
         SD_BUS_PROPERTY("Before", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("After", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("OnFailure", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("OnFailureOf", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("Triggers", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("TriggeredBy", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("PropagatesReloadTo", "as", property_get_dependencies, 0, SD_BUS_VTABLE_PROPERTY_CONST),
index cfd5acd33b47fec1deed46a6d0721c181e54cc69..c4fbfee015cd6325e1a7886b6011ca146c250857 100644 (file)
@@ -85,6 +85,7 @@ static const UnitDependencyAtom atom_map[_UNIT_DEPENDENCY_MAX] = {
          * things discoverable/debuggable as they are the inverse dependencies to some of the above. As they
          * have no effect of their own, they all map to no atoms at all, i.e. the value 0. */
         [UNIT_RELOAD_PROPAGATED_FROM] = 0,
+        [UNIT_ON_FAILURE_OF]          = 0,
 };
 
 UnitDependencyAtom unit_dependency_to_atom(UnitDependency d) {
index c94f4e75236db11d85552a7401dc6e8d344e6f43..708c725b4980ed8d6fdc8b70637046c5156685ba 100644 (file)
@@ -2871,7 +2871,8 @@ int unit_add_dependency(
                 [UNIT_CONFLICTED_BY] = UNIT_CONFLICTS,
                 [UNIT_BEFORE] = UNIT_AFTER,
                 [UNIT_AFTER] = UNIT_BEFORE,
-                [UNIT_ON_FAILURE] = _UNIT_DEPENDENCY_INVALID,
+                [UNIT_ON_FAILURE] = UNIT_ON_FAILURE_OF,
+                [UNIT_ON_FAILURE_OF] = UNIT_ON_FAILURE,
                 [UNIT_REFERENCES] = UNIT_REFERENCED_BY,
                 [UNIT_REFERENCED_BY] = UNIT_REFERENCES,
                 [UNIT_TRIGGERS] = UNIT_TRIGGERED_BY,