systemd-204-7
- fix duplicate message ID bug Resolves: rhbz#974132
This commit is contained in:
parent
2cfbb4e8fb
commit
f9af8840e9
74
0001-journal-letting-interleaved-seqnums-go.patch
Normal file
74
0001-journal-letting-interleaved-seqnums-go.patch
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
From 53113dc8254cae9a27e321e539d2d876677e61b9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||||
|
Date: Fri, 7 Jun 2013 22:01:03 -0400
|
||||||
|
Subject: [PATCH] journal: letting (interleaved) seqnums go
|
||||||
|
|
||||||
|
In the following scenario:
|
||||||
|
server creates system.journal
|
||||||
|
server creates user-1000.journal
|
||||||
|
both journals share the same seqnum_id.
|
||||||
|
Then
|
||||||
|
server writes to user-1000.journal first,
|
||||||
|
and server writes to system.journal a bit later,
|
||||||
|
and everything is fine.
|
||||||
|
The server then terminates (crash, reboot, rsyslog testing,
|
||||||
|
whatever), and user-1000.journal has entries which end with
|
||||||
|
a lower seqnum than system.journal. Now
|
||||||
|
server is restarted
|
||||||
|
server opens user-1000.journal and writes entries to it...
|
||||||
|
BAM! duplicate seqnums for the same seqnum_id.
|
||||||
|
|
||||||
|
Now, we usually don't see that happen, because system.journal
|
||||||
|
is closed last, and opened first. Since usually at least one
|
||||||
|
message is written during boot and lands in the system.journal,
|
||||||
|
the seqnum is initialized from it, and is set to a number higher
|
||||||
|
than than anything found in user journals. Nevertheless, if
|
||||||
|
system.journal is corrupted and is rotated, it can happen that
|
||||||
|
an entry is written to the user journal with a seqnum that is
|
||||||
|
a duplicate with an entry found in the corrupted system.journal~.
|
||||||
|
When browsing the journal, journalctl can fall into a loop
|
||||||
|
where it tries to follow the seqnums, and tries to go the
|
||||||
|
next location by seqnum, and is transported back in time to
|
||||||
|
to the older duplicate seqnum. There is not way to find
|
||||||
|
out the maximum seqnum used in a multiple files, without
|
||||||
|
actually looking at all of them. But we don't want to do
|
||||||
|
that because it would be slow, and actually it isn't really
|
||||||
|
possible, because a file might e.g. be temporarily unaccessible.
|
||||||
|
|
||||||
|
Fix the problem by using different seqnum series for user
|
||||||
|
journals. Using the same seqnum series for rotated journals
|
||||||
|
is still fine, because we know that nothing will write
|
||||||
|
to the rotated journal anymore.
|
||||||
|
|
||||||
|
Likely related:
|
||||||
|
https://bugs.freedesktop.org/show_bug.cgi?id=64566
|
||||||
|
https://bugs.freedesktop.org/show_bug.cgi?id=59856
|
||||||
|
https://bugs.freedesktop.org/show_bug.cgi?id=64296
|
||||||
|
https://bugs.archlinux.org/task/35581
|
||||||
|
https://bugzilla.novell.com/show_bug.cgi?id=817778
|
||||||
|
|
||||||
|
Possibly related:
|
||||||
|
https://bugs.freedesktop.org/show_bug.cgi?id=64293
|
||||||
|
|
||||||
|
Conflicts:
|
||||||
|
src/journal/journald-server.c
|
||||||
|
---
|
||||||
|
src/journal/journald-server.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
|
||||||
|
index cc52b8a..cde63c8 100644
|
||||||
|
--- a/src/journal/journald-server.c
|
||||||
|
+++ b/src/journal/journald-server.c
|
||||||
|
@@ -280,7 +280,7 @@ static JournalFile* find_journal(Server *s, uid_t uid) {
|
||||||
|
journal_file_close(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
- r = journal_file_open_reliably(p, O_RDWR|O_CREAT, 0640, s->compress, s->seal, &s->system_metrics, s->mmap, s->system_journal, &f);
|
||||||
|
+ r = journal_file_open_reliably(p, O_RDWR|O_CREAT, 0640, s->compress, s->seal, &s->system_metrics, s->mmap, NULL, &f);
|
||||||
|
free(p);
|
||||||
|
|
||||||
|
if (r < 0)
|
||||||
|
--
|
||||||
|
1.8.2.1
|
||||||
|
|
@ -13,7 +13,7 @@
|
|||||||
Name: systemd
|
Name: systemd
|
||||||
Url: http://www.freedesktop.org/wiki/Software/systemd
|
Url: http://www.freedesktop.org/wiki/Software/systemd
|
||||||
Version: 204
|
Version: 204
|
||||||
Release: 6%{?gitcommit:.git%{gitcommit}}%{?dist}
|
Release: 7%{?gitcommit:.git%{gitcommit}}%{?dist}
|
||||||
# For a breakdown of the licensing, see README
|
# For a breakdown of the licensing, see README
|
||||||
License: LGPLv2+ and MIT and GPLv2+
|
License: LGPLv2+ and MIT and GPLv2+
|
||||||
Summary: A System and Service Manager
|
Summary: A System and Service Manager
|
||||||
@ -35,6 +35,7 @@ Source4: listen.conf
|
|||||||
# Prevent accidental removal of the systemd package
|
# Prevent accidental removal of the systemd package
|
||||||
Source6: yum-protect-systemd.conf
|
Source6: yum-protect-systemd.conf
|
||||||
|
|
||||||
|
Patch1: 0001-journal-letting-interleaved-seqnums-go.patch
|
||||||
# kernel-install patch for grubby, drop if grubby is obsolete
|
# kernel-install patch for grubby, drop if grubby is obsolete
|
||||||
Patch1000: kernel-install-grubby.patch
|
Patch1000: kernel-install-grubby.patch
|
||||||
|
|
||||||
@ -756,6 +757,10 @@ fi
|
|||||||
%{_libdir}/pkgconfig/gudev-1.0*
|
%{_libdir}/pkgconfig/gudev-1.0*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jun 14 2013 Harald Hoyer <harald@redhat.com> 204-7
|
||||||
|
- fix duplicate message ID bug
|
||||||
|
Resolves: rhbz#974132
|
||||||
|
|
||||||
* Thu Jun 06 2013 Harald Hoyer <harald@redhat.com> 204-6
|
* Thu Jun 06 2013 Harald Hoyer <harald@redhat.com> 204-6
|
||||||
- introduce 99-default-disable.preset
|
- introduce 99-default-disable.preset
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user