Blame SOURCES/0328-core-don-t-log-job-status-message-in-case-job-was-ef.patch

17b0f1
From a7ec486dede56ab2ec28132133becf11e5685884 Mon Sep 17 00:00:00 2001
17b0f1
From: Michal Sekletar <msekletar@users.noreply.github.com>
17b0f1
Date: Mon, 16 May 2016 17:24:51 +0200
17b0f1
Subject: [PATCH] core: don't log job status message in case job was
17b0f1
 effectively NOP (#3199)
17b0f1
17b0f1
We currently generate log message about unit being started even when
17b0f1
unit was started already and job didn't do anything. This is because job
17b0f1
was requested explicitly and hence became anchor job of the transaction
17b0f1
thus we could not eliminate it. That is fine but, let's not pollute
17b0f1
journal with useless log messages.
17b0f1
17b0f1
$ systemctl start systemd-resolved
17b0f1
$ systemctl start systemd-resolved
17b0f1
$ systemctl start systemd-resolved
17b0f1
17b0f1
Current state:
17b0f1
$ journalctl -u systemd-resolved | grep Started
17b0f1
17b0f1
May 05 15:31:42 rawhide systemd[1]: Started Network Name Resolution.
17b0f1
May 05 15:31:59 rawhide systemd[1]: Started Network Name Resolution.
17b0f1
May 05 15:32:01 rawhide systemd[1]: Started Network Name Resolution.
17b0f1
17b0f1
After patch applied:
17b0f1
$ journalctl -u systemd-resolved | grep Started
17b0f1
17b0f1
May 05 16:42:12 rawhide systemd[1]: Started Network Name Resolution.
17b0f1
17b0f1
Fixes #1723
17b0f1
17b0f1
Cherry-picked from: 833f92ad39beca0e954e91e5764ffc83f8d0c1cf
17b0f1
Resolves: #1280014
17b0f1
---
17b0f1
 src/core/dbus-job.c    |  2 +-
17b0f1
 src/core/job.c         | 33 ++++++++++++++++++---------------
17b0f1
 src/core/job.h         |  2 +-
17b0f1
 src/core/manager.c     |  2 +-
17b0f1
 src/core/transaction.c |  2 +-
17b0f1
 src/core/unit.c        | 12 ++++++------
17b0f1
 6 files changed, 28 insertions(+), 25 deletions(-)
17b0f1
17b0f1
diff --git a/src/core/dbus-job.c b/src/core/dbus-job.c
17b0f1
index 8b5ea2566d..7ce5d57726 100644
17b0f1
--- a/src/core/dbus-job.c
17b0f1
+++ b/src/core/dbus-job.c
17b0f1
@@ -84,7 +84,7 @@ int bus_job_method_cancel(sd_bus *bus, sd_bus_message *message, void *userdata,
17b0f1
         if (r < 0)
17b0f1
                 return r;
17b0f1
 
17b0f1
-        job_finish_and_invalidate(j, JOB_CANCELED, true);
17b0f1
+        job_finish_and_invalidate(j, JOB_CANCELED, true, false);
17b0f1
 
17b0f1
         return sd_bus_reply_method_return(message, NULL);
17b0f1
 }
17b0f1
diff --git a/src/core/job.c b/src/core/job.c
17b0f1
index 7416386a18..c2876dec18 100644
17b0f1
--- a/src/core/job.c
17b0f1
+++ b/src/core/job.c
17b0f1
@@ -190,7 +190,7 @@ Job* job_install(Job *j) {
17b0f1
 
17b0f1
         if (uj) {
17b0f1
                 if (job_type_is_conflicting(uj->type, j->type))
17b0f1
-                        job_finish_and_invalidate(uj, JOB_CANCELED, false);
17b0f1
+                        job_finish_and_invalidate(uj, JOB_CANCELED, false, false);
17b0f1
                 else {
17b0f1
                         /* not conflicting, i.e. mergeable */
17b0f1
 
17b0f1
@@ -571,19 +571,19 @@ int job_run_and_invalidate(Job *j) {
17b0f1
         j = manager_get_job(m, id);
17b0f1
         if (j) {
17b0f1
                 if (r == -EALREADY)
17b0f1
-                        r = job_finish_and_invalidate(j, JOB_DONE, true);
17b0f1
+                        r = job_finish_and_invalidate(j, JOB_DONE, true, true);
17b0f1
                 else if (r == -EBADR)
17b0f1
-                        r = job_finish_and_invalidate(j, JOB_SKIPPED, true);
17b0f1
+                        r = job_finish_and_invalidate(j, JOB_SKIPPED, true, false);
17b0f1
                 else if (r == -ENOEXEC)
17b0f1
-                        r = job_finish_and_invalidate(j, JOB_INVALID, true);
17b0f1
+                        r = job_finish_and_invalidate(j, JOB_INVALID, true, false);
17b0f1
                 else if (r == -EPROTO)
17b0f1
-                        r = job_finish_and_invalidate(j, JOB_ASSERT, true);
17b0f1
+                        r = job_finish_and_invalidate(j, JOB_ASSERT, true, false);
17b0f1
                 else if (r == -ENOTSUP)
17b0f1
-                        r = job_finish_and_invalidate(j, JOB_UNSUPPORTED, true);
17b0f1
+                        r = job_finish_and_invalidate(j, JOB_UNSUPPORTED, true, false);
17b0f1
                 else if (r == -EAGAIN)
17b0f1
                         job_set_state(j, JOB_WAITING);
17b0f1
                 else if (r < 0)
17b0f1
-                        r = job_finish_and_invalidate(j, JOB_FAILED, true);
17b0f1
+                        r = job_finish_and_invalidate(j, JOB_FAILED, true, false);
17b0f1
         }
17b0f1
 
17b0f1
         return r;
17b0f1
@@ -792,7 +792,7 @@ static void job_log_status_message(Unit *u, JobType t, JobResult result) {
17b0f1
                                 NULL);
17b0f1
 }
17b0f1
 
17b0f1
-int job_finish_and_invalidate(Job *j, JobResult result, bool recursive) {
17b0f1
+int job_finish_and_invalidate(Job *j, JobResult result, bool recursive, bool already) {
17b0f1
         Unit *u;
17b0f1
         Unit *other;
17b0f1
         JobType t;
17b0f1
@@ -810,8 +810,11 @@ int job_finish_and_invalidate(Job *j, JobResult result, bool recursive) {
17b0f1
         log_unit_debug(u->id, "Job %s/%s finished, result=%s",
17b0f1
                        u->id, job_type_to_string(t), job_result_to_string(result));
17b0f1
 
17b0f1
-        job_print_status_message(u, t, result);
17b0f1
-        job_log_status_message(u, t, result);
17b0f1
+        /* If this job did nothing to respective unit we don't log the status message */
17b0f1
+        if (!already) {
17b0f1
+                job_print_status_message(u, t, result);
17b0f1
+                job_log_status_message(u, t, result);
17b0f1
+        }
17b0f1
 
17b0f1
         job_add_to_dbus_queue(j);
17b0f1
 
17b0f1
@@ -842,20 +845,20 @@ int job_finish_and_invalidate(Job *j, JobResult result, bool recursive) {
17b0f1
                                 if (other->job &&
17b0f1
                                     (other->job->type == JOB_START ||
17b0f1
                                      other->job->type == JOB_VERIFY_ACTIVE))
17b0f1
-                                        job_finish_and_invalidate(other->job, JOB_DEPENDENCY, true);
17b0f1
+                                        job_finish_and_invalidate(other->job, JOB_DEPENDENCY, true, false);
17b0f1
 
17b0f1
                         SET_FOREACH(other, u->dependencies[UNIT_BOUND_BY], i)
17b0f1
                                 if (other->job &&
17b0f1
                                     (other->job->type == JOB_START ||
17b0f1
                                      other->job->type == JOB_VERIFY_ACTIVE))
17b0f1
-                                        job_finish_and_invalidate(other->job, JOB_DEPENDENCY, true);
17b0f1
+                                        job_finish_and_invalidate(other->job, JOB_DEPENDENCY, true, false);
17b0f1
 
17b0f1
                         SET_FOREACH(other, u->dependencies[UNIT_REQUIRED_BY_OVERRIDABLE], i)
17b0f1
                                 if (other->job &&
17b0f1
                                     !other->job->override &&
17b0f1
                                     (other->job->type == JOB_START ||
17b0f1
                                      other->job->type == JOB_VERIFY_ACTIVE))
17b0f1
-                                        job_finish_and_invalidate(other->job, JOB_DEPENDENCY, true);
17b0f1
+                                        job_finish_and_invalidate(other->job, JOB_DEPENDENCY, true, false);
17b0f1
 
17b0f1
                 } else if (t == JOB_STOP) {
17b0f1
 
17b0f1
@@ -863,7 +866,7 @@ int job_finish_and_invalidate(Job *j, JobResult result, bool recursive) {
17b0f1
                                 if (other->job &&
17b0f1
                                     (other->job->type == JOB_START ||
17b0f1
                                      other->job->type == JOB_VERIFY_ACTIVE))
17b0f1
-                                        job_finish_and_invalidate(other->job, JOB_DEPENDENCY, true);
17b0f1
+                                        job_finish_and_invalidate(other->job, JOB_DEPENDENCY, true, false);
17b0f1
                 }
17b0f1
         }
17b0f1
 
17b0f1
@@ -911,7 +914,7 @@ static int job_dispatch_timer(sd_event_source *s, uint64_t monotonic, void *user
17b0f1
         log_unit_warning(j->unit->id, "Job %s/%s timed out.", j->unit->id, job_type_to_string(j->type));
17b0f1
 
17b0f1
         u = j->unit;
17b0f1
-        job_finish_and_invalidate(j, JOB_TIMEOUT, true);
17b0f1
+        job_finish_and_invalidate(j, JOB_TIMEOUT, true, false);
17b0f1
 
17b0f1
         failure_action(u->manager, u->job_timeout_action, u->job_timeout_reboot_arg);
17b0f1
 
17b0f1
diff --git a/src/core/job.h b/src/core/job.h
17b0f1
index d967b68a3f..e4191ee775 100644
17b0f1
--- a/src/core/job.h
17b0f1
+++ b/src/core/job.h
17b0f1
@@ -220,7 +220,7 @@ void job_add_to_dbus_queue(Job *j);
17b0f1
 int job_start_timer(Job *j);
17b0f1
 
17b0f1
 int job_run_and_invalidate(Job *j);
17b0f1
-int job_finish_and_invalidate(Job *j, JobResult result, bool recursive);
17b0f1
+int job_finish_and_invalidate(Job *j, JobResult result, bool recursive, bool already);
17b0f1
 
17b0f1
 char *job_dbus_path(Job *j);
17b0f1
 
17b0f1
diff --git a/src/core/manager.c b/src/core/manager.c
17b0f1
index a1504bf17b..ee456fb790 100644
17b0f1
--- a/src/core/manager.c
17b0f1
+++ b/src/core/manager.c
17b0f1
@@ -1426,7 +1426,7 @@ void manager_clear_jobs(Manager *m) {
17b0f1
 
17b0f1
         while ((j = hashmap_first(m->jobs)))
17b0f1
                 /* No need to recurse. We're cancelling all jobs. */
17b0f1
-                job_finish_and_invalidate(j, JOB_CANCELED, false);
17b0f1
+                job_finish_and_invalidate(j, JOB_CANCELED, false, false);
17b0f1
 }
17b0f1
 
17b0f1
 static int manager_dispatch_run_queue(sd_event_source *source, void *userdata) {
17b0f1
diff --git a/src/core/transaction.c b/src/core/transaction.c
17b0f1
index b0b3d6bd60..aed64fa419 100644
17b0f1
--- a/src/core/transaction.c
17b0f1
+++ b/src/core/transaction.c
17b0f1
@@ -592,7 +592,7 @@ static int transaction_apply(Transaction *tr, Manager *m, JobMode mode) {
17b0f1
                         /* Not invalidating recursively. Avoids triggering
17b0f1
                          * OnFailure= actions of dependent jobs. Also avoids
17b0f1
                          * invalidating our iterator. */
17b0f1
-                        job_finish_and_invalidate(j, JOB_CANCELED, false);
17b0f1
+                        job_finish_and_invalidate(j, JOB_CANCELED, false, false);
17b0f1
                 }
17b0f1
         }
17b0f1
 
17b0f1
diff --git a/src/core/unit.c b/src/core/unit.c
17b0f1
index db5aa987ec..d6ead7d672 100644
17b0f1
--- a/src/core/unit.c
17b0f1
+++ b/src/core/unit.c
17b0f1
@@ -1851,12 +1851,12 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su
17b0f1
                 case JOB_VERIFY_ACTIVE:
17b0f1
 
17b0f1
                         if (UNIT_IS_ACTIVE_OR_RELOADING(ns))
17b0f1
-                                job_finish_and_invalidate(u->job, JOB_DONE, true);
17b0f1
+                                job_finish_and_invalidate(u->job, JOB_DONE, true, false);
17b0f1
                         else if (u->job->state == JOB_RUNNING && ns != UNIT_ACTIVATING) {
17b0f1
                                 unexpected = true;
17b0f1
 
17b0f1
                                 if (UNIT_IS_INACTIVE_OR_FAILED(ns))
17b0f1
-                                        job_finish_and_invalidate(u->job, ns == UNIT_FAILED ? JOB_FAILED : JOB_DONE, true);
17b0f1
+                                        job_finish_and_invalidate(u->job, ns == UNIT_FAILED ? JOB_FAILED : JOB_DONE, true, false);
17b0f1
                         }
17b0f1
 
17b0f1
                         break;
17b0f1
@@ -1866,12 +1866,12 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su
17b0f1
 
17b0f1
                         if (u->job->state == JOB_RUNNING) {
17b0f1
                                 if (ns == UNIT_ACTIVE)
17b0f1
-                                        job_finish_and_invalidate(u->job, reload_success ? JOB_DONE : JOB_FAILED, true);
17b0f1
+                                        job_finish_and_invalidate(u->job, reload_success ? JOB_DONE : JOB_FAILED, true, false);
17b0f1
                                 else if (ns != UNIT_ACTIVATING && ns != UNIT_RELOADING) {
17b0f1
                                         unexpected = true;
17b0f1
 
17b0f1
                                         if (UNIT_IS_INACTIVE_OR_FAILED(ns))
17b0f1
-                                                job_finish_and_invalidate(u->job, ns == UNIT_FAILED ? JOB_FAILED : JOB_DONE, true);
17b0f1
+                                                job_finish_and_invalidate(u->job, ns == UNIT_FAILED ? JOB_FAILED : JOB_DONE, true, false);
17b0f1
                                 }
17b0f1
                         }
17b0f1
 
17b0f1
@@ -1882,10 +1882,10 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su
17b0f1
                 case JOB_TRY_RESTART:
17b0f1
 
17b0f1
                         if (UNIT_IS_INACTIVE_OR_FAILED(ns))
17b0f1
-                                job_finish_and_invalidate(u->job, JOB_DONE, true);
17b0f1
+                                job_finish_and_invalidate(u->job, JOB_DONE, true, false);
17b0f1
                         else if (u->job->state == JOB_RUNNING && ns != UNIT_DEACTIVATING) {
17b0f1
                                 unexpected = true;
17b0f1
-                                job_finish_and_invalidate(u->job, JOB_FAILED, true);
17b0f1
+                                job_finish_and_invalidate(u->job, JOB_FAILED, true, false);
17b0f1
                         }
17b0f1
 
17b0f1
                         break;