summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2012-11-28 21:21:15 -0800
committerSage Weil <sage@inktank.com>2012-11-29 17:21:52 -0800
commit909b92e812c7bce70c8d5202fb2f6099f02a26eb (patch)
tree9905e8b0d1f1ed2a505137005ae4f647ea95931e
parentf0c2920e02e17d4c236c7fcfcd82d5a82c655fc7 (diff)
downloadceph-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.cc2
-rw-r--r--src/mds/MDLog.h8
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) {