new upstream release
This commit is contained in:
parent
54952b3781
commit
9d287fcbe5
@ -1,74 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,122 +0,0 @@
|
|||||||
From 87011c25d96e9fbcd8a465ba758fa037c7d08203 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Thu, 6 Jun 2013 22:28:05 -0400
|
|
||||||
Subject: [PATCH 01/13] journal: remember last direction of search and keep
|
|
||||||
offset cache
|
|
||||||
|
|
||||||
The fields in JournalFile are moved around to avoid wasting
|
|
||||||
7 bytes because of alignment.
|
|
||||||
---
|
|
||||||
TODO | 3 ---
|
|
||||||
src/journal/journal-file.h | 18 +++++++++++-------
|
|
||||||
src/journal/sd-journal.c | 11 +++++------
|
|
||||||
3 files changed, 16 insertions(+), 16 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/TODO b/TODO
|
|
||||||
index 0dd19a0..1dc585c 100644
|
|
||||||
--- a/TODO
|
|
||||||
+++ b/TODO
|
|
||||||
@@ -77,9 +77,6 @@ Features:
|
|
||||||
|
|
||||||
* investigate endianess issues of UUID vs. GUID
|
|
||||||
|
|
||||||
-* see if we can fix https://bugs.freedesktop.org/show_bug.cgi?id=63672
|
|
||||||
- without dropping the location cache entirely.
|
|
||||||
-
|
|
||||||
* dbus: when a unit failed to load (i.e. is in UNIT_ERROR state), we
|
|
||||||
should be able to safely try another attempt when the bus call LoadUnit() is invoked.
|
|
||||||
|
|
||||||
diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h
|
|
||||||
index 7b1cd42..5cc2c2d 100644
|
|
||||||
--- a/src/journal/journal-file.h
|
|
||||||
+++ b/src/journal/journal-file.h
|
|
||||||
@@ -42,10 +42,14 @@ typedef struct JournalMetrics {
|
|
||||||
uint64_t keep_free;
|
|
||||||
} JournalMetrics;
|
|
||||||
|
|
||||||
+typedef enum direction {
|
|
||||||
+ DIRECTION_UP,
|
|
||||||
+ DIRECTION_DOWN
|
|
||||||
+} direction_t;
|
|
||||||
+
|
|
||||||
typedef struct JournalFile {
|
|
||||||
int fd;
|
|
||||||
- char *path;
|
|
||||||
- struct stat last_stat;
|
|
||||||
+
|
|
||||||
mode_t mode;
|
|
||||||
|
|
||||||
int flags;
|
|
||||||
@@ -56,6 +60,11 @@ typedef struct JournalFile {
|
|
||||||
|
|
||||||
bool tail_entry_monotonic_valid;
|
|
||||||
|
|
||||||
+ direction_t last_direction;
|
|
||||||
+
|
|
||||||
+ char *path;
|
|
||||||
+ struct stat last_stat;
|
|
||||||
+
|
|
||||||
Header *header;
|
|
||||||
HashItem *data_hash_table;
|
|
||||||
HashItem *field_hash_table;
|
|
||||||
@@ -90,11 +99,6 @@ typedef struct JournalFile {
|
|
||||||
#endif
|
|
||||||
} JournalFile;
|
|
||||||
|
|
||||||
-typedef enum direction {
|
|
||||||
- DIRECTION_UP,
|
|
||||||
- DIRECTION_DOWN
|
|
||||||
-} direction_t;
|
|
||||||
-
|
|
||||||
int journal_file_open(
|
|
||||||
const char *fname,
|
|
||||||
int flags,
|
|
||||||
diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
|
|
||||||
index 3aa9ed4..4c4cc2d 100644
|
|
||||||
--- a/src/journal/sd-journal.c
|
|
||||||
+++ b/src/journal/sd-journal.c
|
|
||||||
@@ -102,7 +102,8 @@ static void init_location(Location *l, LocationType type, JournalFile *f, Object
|
|
||||||
l->seqnum_set = l->realtime_set = l->monotonic_set = l->xor_hash_set = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void set_location(sd_journal *j, LocationType type, JournalFile *f, Object *o, uint64_t offset) {
|
|
||||||
+static void set_location(sd_journal *j, LocationType type, JournalFile *f, Object *o,
|
|
||||||
+ direction_t direction, uint64_t offset) {
|
|
||||||
assert(j);
|
|
||||||
assert(type == LOCATION_DISCRETE || type == LOCATION_SEEK);
|
|
||||||
assert(f);
|
|
||||||
@@ -110,12 +111,10 @@ static void set_location(sd_journal *j, LocationType type, JournalFile *f, Objec
|
|
||||||
|
|
||||||
init_location(&j->current_location, type, f, o);
|
|
||||||
|
|
||||||
- if (j->current_file)
|
|
||||||
- j->current_file->current_offset = 0;
|
|
||||||
-
|
|
||||||
j->current_file = f;
|
|
||||||
j->current_field = 0;
|
|
||||||
|
|
||||||
+ f->last_direction = direction;
|
|
||||||
f->current_offset = offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -811,7 +810,7 @@ static int next_beyond_location(sd_journal *j, JournalFile *f, direction_t direc
|
|
||||||
assert(j);
|
|
||||||
assert(f);
|
|
||||||
|
|
||||||
- if (f->current_offset > 0) {
|
|
||||||
+ if (f->last_direction == direction && f->current_offset > 0) {
|
|
||||||
cp = f->current_offset;
|
|
||||||
|
|
||||||
r = journal_file_move_to_object(f, OBJECT_ENTRY, cp, &c);
|
|
||||||
@@ -908,7 +907,7 @@ static int real_journal_next(sd_journal *j, direction_t direction) {
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
- set_location(j, LOCATION_DISCRETE, new_file, o, new_offset);
|
|
||||||
+ set_location(j, LOCATION_DISCRETE, new_file, o, direction, new_offset);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
1.8.2.1
|
|
||||||
|
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
a07619bb19f48164fbf0761d12fd39a8 systemd-204.tar.xz
|
3afc38170371929cf6ab056bf6a52fc6 systemd-205.tar.xz
|
||||||
|
15
systemd.spec
15
systemd.spec
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
Name: systemd
|
Name: systemd
|
||||||
Url: http://www.freedesktop.org/wiki/Software/systemd
|
Url: http://www.freedesktop.org/wiki/Software/systemd
|
||||||
Version: 204
|
Version: 205
|
||||||
Release: 10%{?gitcommit:.git%{gitcommit}}%{?dist}
|
Release: 1%{?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,8 +35,6 @@ 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
|
|
||||||
Patch2: 0002-journal-remember-last-direction-of-search-and-keep-o.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
|
||||||
|
|
||||||
@ -600,6 +598,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
|||||||
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.login1.conf
|
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.login1.conf
|
||||||
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.locale1.conf
|
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.locale1.conf
|
||||||
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.timedate1.conf
|
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.timedate1.conf
|
||||||
|
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.machine1.conf
|
||||||
%config(noreplace) %{_sysconfdir}/systemd/system.conf
|
%config(noreplace) %{_sysconfdir}/systemd/system.conf
|
||||||
%config(noreplace) %{_sysconfdir}/systemd/user.conf
|
%config(noreplace) %{_sysconfdir}/systemd/user.conf
|
||||||
%config(noreplace) %{_sysconfdir}/systemd/logind.conf
|
%config(noreplace) %{_sysconfdir}/systemd/logind.conf
|
||||||
@ -609,7 +608,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
|||||||
%config(noreplace) %{_sysconfdir}/rsyslog.d/listen.conf
|
%config(noreplace) %{_sysconfdir}/rsyslog.d/listen.conf
|
||||||
%config(noreplace) %{_sysconfdir}/yum/protected.d/systemd.conf
|
%config(noreplace) %{_sysconfdir}/yum/protected.d/systemd.conf
|
||||||
%ghost %{_sysconfdir}/udev/hwdb.bin
|
%ghost %{_sysconfdir}/udev/hwdb.bin
|
||||||
%{_sysconfdir}/rpm/macros.systemd
|
%{_rpmconfigdir}/macros.d/macros.systemd
|
||||||
%{_sysconfdir}/xdg/systemd
|
%{_sysconfdir}/xdg/systemd
|
||||||
%{_sysconfdir}/rc.d/init.d/README
|
%{_sysconfdir}/rc.d/init.d/README
|
||||||
%ghost %config(noreplace) %{_sysconfdir}/hostname
|
%ghost %config(noreplace) %{_sysconfdir}/hostname
|
||||||
@ -631,6 +630,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
|||||||
%{_bindir}/loginctl
|
%{_bindir}/loginctl
|
||||||
%{_bindir}/systemd-loginctl
|
%{_bindir}/systemd-loginctl
|
||||||
%{_bindir}/journalctl
|
%{_bindir}/journalctl
|
||||||
|
%{_bindir}/machinectl
|
||||||
%{_bindir}/systemd-tmpfiles
|
%{_bindir}/systemd-tmpfiles
|
||||||
%{_bindir}/systemd-nspawn
|
%{_bindir}/systemd-nspawn
|
||||||
%{_bindir}/systemd-stdio-bridge
|
%{_bindir}/systemd-stdio-bridge
|
||||||
@ -638,6 +638,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
|||||||
%{_bindir}/systemd-cgls
|
%{_bindir}/systemd-cgls
|
||||||
%{_bindir}/systemd-cgtop
|
%{_bindir}/systemd-cgtop
|
||||||
%{_bindir}/systemd-delta
|
%{_bindir}/systemd-delta
|
||||||
|
%{_bindir}/systemd-run
|
||||||
%caps(cap_dac_override,cap_sys_ptrace=pe) %{_bindir}/systemd-detect-virt
|
%caps(cap_dac_override,cap_sys_ptrace=pe) %{_bindir}/systemd-detect-virt
|
||||||
%{_bindir}/systemd-inhibit
|
%{_bindir}/systemd-inhibit
|
||||||
%{_bindir}/hostnamectl
|
%{_bindir}/hostnamectl
|
||||||
@ -691,6 +692,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
|||||||
%{_datadir}/dbus-1/system-services/org.freedesktop.login1.service
|
%{_datadir}/dbus-1/system-services/org.freedesktop.login1.service
|
||||||
%{_datadir}/dbus-1/system-services/org.freedesktop.locale1.service
|
%{_datadir}/dbus-1/system-services/org.freedesktop.locale1.service
|
||||||
%{_datadir}/dbus-1/system-services/org.freedesktop.timedate1.service
|
%{_datadir}/dbus-1/system-services/org.freedesktop.timedate1.service
|
||||||
|
%{_datadir}/dbus-1/system-services/org.freedesktop.machine1.service
|
||||||
%{_datadir}/dbus-1/interfaces/org.freedesktop.systemd1.*.xml
|
%{_datadir}/dbus-1/interfaces/org.freedesktop.systemd1.*.xml
|
||||||
%{_datadir}/dbus-1/interfaces/org.freedesktop.hostname1.xml
|
%{_datadir}/dbus-1/interfaces/org.freedesktop.hostname1.xml
|
||||||
%{_datadir}/dbus-1/interfaces/org.freedesktop.locale1.xml
|
%{_datadir}/dbus-1/interfaces/org.freedesktop.locale1.xml
|
||||||
@ -791,6 +793,9 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
|
|||||||
%{_datadir}/systemd/gatewayd
|
%{_datadir}/systemd/gatewayd
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Jul 3 2013 Lennart Poettering <lpoetter@redhat.com> - 205-1
|
||||||
|
- New upstream release
|
||||||
|
|
||||||
* Wed Jun 26 2013 Michal Schmidt <mschmidt@redhat.com> 204-10
|
* Wed Jun 26 2013 Michal Schmidt <mschmidt@redhat.com> 204-10
|
||||||
- Split systemd-journal-gateway subpackage (#908081).
|
- Split systemd-journal-gateway subpackage (#908081).
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user