]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix mds crash when mds_max_log_events smaller.
authorJianpeng Ma <jianpeng.ma@intel.com>
Fri, 26 Jun 2015 01:51:43 +0000 (09:51 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Tue, 30 Jun 2015 08:39:40 +0000 (16:39 +0800)
If 'mds max log events' small, it met this bug:

mds/journal.cc: 155: FAILED assert(ls != this)
 ceph version 9.0.1-1117-gb0dc971
(b0dc97198a45791c8b9661d4be8e531e63202005)
 1: (ceph::__ceph_assert_fail(char const*, char const*, int, char
const*)+0x80) [0x16ef7bf]
 2: (LogSegment::try_to_expire(MDS*,
C_GatherBuilderBase<MDSInternalContextBase, MDSGather>&, int)+0x1925)
[0x15475e5]
 3: (MDLog::try_expire(LogSegment*, int)+0x66) [0x14c50a0]
 4: (MDLog::trim(int)+0xd67) [0x14c4511]
 5: (MDS::tick()+0x265) [0x1146e0b]
 6: (MDS::C_MDS_Tick::finish(int)+0x32) [0x11693b2]
 7: (Context::complete(int)+0x27) [0x11611a7]
 8: (MDSInternalContextBase::complete(int)+0x1a4) [0x14977fa]
 9: (SafeTimer::timer_thread()+0x37a) [0x16e28fa]
 10: (SafeTimerThread::entry()+0x1c) [0x16e3c56]
 11: (Thread::entry_wrapper()+0xa8) [0x16df0ee]
 12: (Thread::_entry_func(void*)+0x18) [0x16df03c]
 13: /lib64/libpthread.so.0() [0x30c9c07555]
 14: (clone()+0x6d) [0x30c9901f3d]

Check segments.size() > 1 can trim segment.

Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/mds/MDLog.cc

index cb5326bea866c153a803b501f5cc8ca9f33b810d..36af6cafb8adc2ec7685517d471bc31fcfd41454 100644 (file)
@@ -572,7 +572,7 @@ void MDLog::trim(int m)
   stop += 2.0;
 
   map<uint64_t,LogSegment*>::iterator p = segments.begin();
-  while (p != segments.end() && 
+  while (segments.size() > 1 && p != segments.end() &&
         ((max_events >= 0 &&
           num_events - expiring_events - expired_events > max_events) ||
          (max_segments >= 0 &&