]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journal: normalize priority of logging sources 2290/head
authorVito Caputo <vito.caputo@coreos.com>
Fri, 8 Jan 2016 20:11:44 +0000 (12:11 -0800)
committerVito Caputo <vito.caputo@coreos.com>
Fri, 8 Jan 2016 22:00:04 +0000 (14:00 -0800)
The stream event source has a priority of SD_EVENT_PRIORITY_NORMAL+5,
and stdout source +10, but the native and syslog event sources are left
at the default of 0.

As a result, any heavy native or syslog logger can cause starvation of
the other loggers.  This is trivially demonstrated by running:

 dd if=/dev/urandom bs=8k | od | systemd-cat & # native spammer
 systemd-run echo hello & # stream logger
 journalctl --follow --output=verbose --no-pager --identifier=echo &

... and wait, and wait, the "hello" never comes.

Now kill %1, "hello" arrives finally.

src/journal/journald-native.c
src/journal/journald-stream.c
src/journal/journald-syslog.c

index 371df5b37f7bedd0f3e8baae25105cb8fc633888..f80a6ebfe52d28360985da5ac89400885f0fd5d1 100644 (file)
@@ -495,5 +495,9 @@ int server_open_native_socket(Server*s) {
         if (r < 0)
                 return log_error_errno(r, "Failed to add native server fd to event loop: %m");
 
+        r = sd_event_source_set_priority(s->native_event_source, SD_EVENT_PRIORITY_NORMAL+5);
+        if (r < 0)
+                return log_error_errno(r, "Failed to adjust native event source priority: %m");
+
         return 0;
 }
index 131fcdac423aee7f7fd16bac469cfe88bd654b74..90884b69299266bb4855816e7ba95a1a72e0fb6f 100644 (file)
@@ -733,7 +733,7 @@ int server_open_stdout_socket(Server *s) {
         if (r < 0)
                 return log_error_errno(r, "Failed to add stdout server fd to event source: %m");
 
-        r = sd_event_source_set_priority(s->stdout_event_source, SD_EVENT_PRIORITY_NORMAL+10);
+        r = sd_event_source_set_priority(s->stdout_event_source, SD_EVENT_PRIORITY_NORMAL+5);
         if (r < 0)
                 return log_error_errno(r, "Failed to adjust priority of stdout server event source: %m");
 
index cfc50d889ba91a53ecf887afb904c3ecab28cd80..2f7a805f14ea92d73e59cf05de6c5f2bbe7f2fe3 100644 (file)
@@ -430,6 +430,10 @@ int server_open_syslog_socket(Server *s) {
         if (r < 0)
                 return log_error_errno(r, "Failed to add syslog server fd to event loop: %m");
 
+        r = sd_event_source_set_priority(s->syslog_event_source, SD_EVENT_PRIORITY_NORMAL+5);
+        if (r < 0)
+                return log_error_errno(r, "Failed to adjust syslog event source priority: %m");
+
         return 0;
 }