core: do not return 'skipped' when Condition*= fail with StartUnitWithFlags()
authorLuca Boccassi <bluca@debian.org>
Tue, 8 Mar 2022 22:13:37 +0000 (22:13 +0000)
committerLuca Boccassi <luca.boccassi@gmail.com>
Thu, 10 Mar 2022 20:40:50 +0000 (20:40 +0000)
Backward incompatible change to avoid returning 'skipped' if a condition causes
a job activation to be skipped when using StartUnitWithFlags().
Job results are broadcasted, so it is theoretically possible that existing
software could get confused if they see this result.

Replaces https://github.com/systemd/systemd/pull/22369

(cherry picked from commit ee3ae55e7537c716530b293c91f3fb9ae22a8049)

man/org.freedesktop.systemd1.xml
src/core/dbus-unit.c
src/core/dbus-unit.h

index 6781f8df51ff0277b87ade64f49f1c3ddfcbce1a..8211e421924d60283a033666832746c6238bc8a5 100644 (file)
@@ -1193,10 +1193,7 @@ node /org/freedesktop/systemd1 {
 
       <para><function>StartUnitWithFlags()</function> is similar to <function>StartUnit()</function> but
       allows the caller to pass an extra <varname>flags</varname> parameter, which does not support any
-      flags for now, and is reserved for future extensions. The new method also changes the behaviour
-      of the <varname>JobRemoved</varname> signal and make it return <literal>skipped</literal> in case
-      the unit activation job is skipped because a <varname>Condition*=</varname> is not satisfied.
-      With the <varname>StartUnit</varname> method, <literal>done</literal> would be returned instead.</para>
+      flags for now, and is reserved for future extensions.</para>
 
       <para><function>StopUnit()</function> is similar to <function>StartUnit()</function> but stops the
       specified unit rather than starting it. Note that the <literal>isolate</literal> mode is invalid for this
index 1128c42ad94028c14a6787beaf009b04b3c828ba..a7aac798c66191eb2533688f5c4eb486cdf57ad9 100644 (file)
@@ -417,10 +417,6 @@ int bus_unit_method_start_generic(
                         return sd_bus_reply_method_errorf(message, SD_BUS_ERROR_INVALID_ARGS,
                                                           "Invalid 'flags' parameter '%" PRIu64 "'",
                                                           input_flags);
-
-                /* The new method unconditionally uses the new behaviour of returning 'skip' when
-                 * a job is skipped. */
-                job_flags |= BUS_UNIT_QUEUE_RETURN_SKIP_ON_CONDITION_FAIL;
         }
 
         r = bus_verify_manage_units_async_full(
index ccb379cee5501fa023b8ab455b54e9c76ca9a5ba..ab7787ce46618861ed14634386956db159e14879 100644 (file)
@@ -31,7 +31,7 @@ int bus_unit_method_thaw(sd_bus_message *message, void *userdata, sd_bus_error *
 typedef enum BusUnitQueueFlags {
         BUS_UNIT_QUEUE_RELOAD_IF_POSSIBLE            = 1 << 0,
         BUS_UNIT_QUEUE_VERBOSE_REPLY                 = 1 << 1,
-        BUS_UNIT_QUEUE_RETURN_SKIP_ON_CONDITION_FAIL = 1 << 2,
+        BUS_UNIT_QUEUE_RETURN_SKIP_ON_CONDITION_FAIL = 1 << 2, // FIXME: currently not used, will be changed soon
 } BusUnitQueueFlags;
 
 int bus_unit_queue_job_one(