]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: assert segements not emtpy in get_current_segment()
authorSage Weil <sage@inktank.com>
Thu, 29 Nov 2012 05:21:15 +0000 (21:21 -0800)
committerSage Weil <sage@inktank.com>
Fri, 30 Nov 2012 01:21:52 +0000 (17:21 -0800)
Only one caller can tolerate no segments; make a new
peek_current_segment() for them.

Motivated by paranoia tracking down a crash during client unmount, but
it wasn't this.

Signed-off-by: Sage Weil <sage@inktank.com>
src/mds/MDLog.cc
src/mds/MDLog.h

index b02c1810cfc91eaa83c6f9742db68a85de45a27d..4284b6dfdf1b928eaa28992ec0c53d7d610d1ade 100644 (file)
@@ -415,7 +415,7 @@ void MDLog::_expired(LogSegment *ls)
 {
   dout(5) << "_expired segment " << ls->offset << " " << ls->num_events << " events" << dendl;
 
-  if (!capped && ls == get_current_segment()) {
+  if (!capped && ls == peek_current_segment()) {
     dout(5) << "_expired not expiring " << ls->offset << ", last one and !capped" << dendl;
   } else {
     // expired.
index 2e049e8aed407956dc220f048b449156cd03db50..9a547f0d79156d734804dc7fa2b4accef7bbad7e 100644 (file)
@@ -161,8 +161,14 @@ public:
 
   // -- segments --
   void start_new_segment(Context *onsync=0);
+
+  LogSegment *peek_current_segment() {
+    return segments.empty() ? NULL : segments.rbegin()->second;
+  }
+
   LogSegment *get_current_segment() { 
-    return segments.empty() ? 0:segments.rbegin()->second; 
+    assert(!segments.empty());
+    return segments.rbegin()->second;
   }
 
   LogSegment *get_segment(uint64_t off) {