chiark / gitweb /
journal: immediately rotate when the journal was previously not closed properly
authorLennart Poettering <lennart@poettering.net>
Mon, 16 Jul 2012 20:51:28 +0000 (22:51 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 16 Jul 2012 22:59:03 +0000 (00:59 +0200)
src/journal/journal-file.c
src/journal/journald.c

index 9128f0d..9d8c9e6 100644 (file)
@@ -188,13 +188,15 @@ static int journal_file_verify_header(JournalFile *f) {
 
                 state = f->header->state;
 
 
                 state = f->header->state;
 
-                if (state == STATE_ONLINE)
-                        log_debug("Journal file %s is already online. Assuming unclean closing. Ignoring.", f->path);
-                        /* FIXME: immediately rotate */
-                else if (state == STATE_ARCHIVED)
+                if (state == STATE_ONLINE) {
+                        log_debug("Journal file %s is already online. Assuming unclean closing.", f->path);
+                        return -EBUSY;
+                else if (state == STATE_ARCHIVED)
                         return -ESHUTDOWN;
                         return -ESHUTDOWN;
-                else if (state != STATE_OFFLINE)
-                        log_debug("Journal file %s has unknown state %u. Ignoring.", f->path, state);
+                else if (state != STATE_OFFLINE) {
+                        log_debug("Journal file %s has unknown state %u.", f->path, state);
+                        return -EBUSY;
+                }
         }
 
         return 0;
         }
 
         return 0;
index e66bb07..8f00aef 100644 (file)
@@ -493,7 +493,9 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
                      r != -EBADMSG && /* corrupted */
                      r != -ENODATA && /* truncated */
                      r != -EHOSTDOWN && /* other machine */
                      r != -EBADMSG && /* corrupted */
                      r != -ENODATA && /* truncated */
                      r != -EHOSTDOWN && /* other machine */
-                     r != -EPROTONOSUPPORT /* unsupported feature */)) {
+                     r != -EPROTONOSUPPORT && /* unsupported feature */
+                     r != -EBUSY && /* unclean shutdown */
+                     r != -ESHUTDOWN /* already archived */)) {
                         log_error("Failed to write entry, ignoring: %s", strerror(-r));
                         return;
                 }
                         log_error("Failed to write entry, ignoring: %s", strerror(-r));
                         return;
                 }
@@ -502,6 +504,8 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
                         log_info("Allocation limit reached, rotating.");
                 else if (r == -EHOSTDOWN)
                         log_info("Journal file from other machine, rotating.");
                         log_info("Allocation limit reached, rotating.");
                 else if (r == -EHOSTDOWN)
                         log_info("Journal file from other machine, rotating.");
+                else if (r == -EBUSY)
+                        log_info("Unlcean shutdown, rotating.");
                 else
                         log_warning("Journal file corrupted, rotating.");
 
                 else
                         log_warning("Journal file corrupted, rotating.");