]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
log: do not discard recent after dumping it
authorSage Weil <sage@redhat.com>
Fri, 15 Jun 2018 20:57:40 +0000 (15:57 -0500)
committerDan Mick <dan.mick@redhat.com>
Mon, 15 Oct 2018 23:35:11 +0000 (16:35 -0700)
We want to call dump_recent multiple times without discarding those
log events.  Just iterate the list; don't discard it!

Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 76802af0f8ee2d1a4d9b8b4fee23b9fdfbdf1304)

src/log/Log.cc

index 9240751dd1228b1989ee45d05010cde42a3d737e..018060711fe70c3bfadb3a6745aea2a86d51d9bd 100644 (file)
@@ -298,8 +298,31 @@ void Log::flush()
 
 void Log::_flush(EntryQueue *t, EntryQueue *requeue, bool crash)
 {
-  Entry *e;
-  while ((e = t->dequeue()) != NULL) {
+  Entry *e = nullptr;
+  long len = 0;
+  if (crash) {
+    len = t->m_len;
+  }
+  if (!requeue) {
+    e = t->m_head;
+    if (!e) {
+      return;
+    }
+  }
+  while (true) {
+    if (requeue) {
+      e = t->dequeue();
+      if (!e) {
+       break;
+      }
+      requeue->enqueue(e);
+    } else {
+      e = e->m_next;
+      if (!e) {
+       break;
+      }
+    }
+
     unsigned sub = e->m_subsys;
 
     bool should_log = crash || m_subs->get_log_level(sub) >= e->m_prio;
@@ -323,8 +346,9 @@ void Log::_flush(EntryQueue *t, EntryQueue *requeue, bool crash)
         buf = buf0;
       }
 
-      if (crash)
+      if (crash) {
        buflen += snprintf(buf, buf_size, "%6d> ", -t->m_len);
+      }
       buflen += append_time(e->m_stamp, buf + buflen, buf_size - buflen);
       buflen += snprintf(buf + buflen, buf_size-buflen, " %lx %2d ",
                        (unsigned long)e->m_thread, e->m_prio);
@@ -361,7 +385,6 @@ void Log::_flush(EntryQueue *t, EntryQueue *requeue, bool crash)
       m_graylog->log_entry(e);
     }
 
-    requeue->enqueue(e);
   }
 }
 
@@ -401,9 +424,8 @@ void Log::dump_recent()
   pthread_mutex_unlock(&m_queue_mutex);
   _flush(&t, &m_recent, false);
 
-  EntryQueue old;
   _log_message("--- begin dump of recent events ---", true);
-  _flush(&m_recent, &old, true);
+  _flush(&m_recent, nullptr, true);
 
   char buf[4096];
   _log_message("--- logging levels ---", true);