diff options
author | Sage Weil <sage@inktank.com> | 2012-11-28 21:21:15 -0800 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2012-11-29 17:21:52 -0800 |
commit | 909b92e812c7bce70c8d5202fb2f6099f02a26eb (patch) | |
tree | 9905e8b0d1f1ed2a505137005ae4f647ea95931e | |
parent | f0c2920e02e17d4c236c7fcfcd82d5a82c655fc7 (diff) | |
download | ceph-909b92e812c7bce70c8d5202fb2f6099f02a26eb.tar.gz |
mds: assert segements not emtpy in get_current_segment()
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>
-rw-r--r-- | src/mds/MDLog.cc | 2 | ||||
-rw-r--r-- | src/mds/MDLog.h | 8 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index b02c1810cfc..4284b6dfdf1 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -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. diff --git a/src/mds/MDLog.h b/src/mds/MDLog.h index 2e049e8aed4..9a547f0d791 100644 --- a/src/mds/MDLog.h +++ b/src/mds/MDLog.h @@ -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) { |