From 8a91daae8208a7ee41d36a8c8ffdcb402e9ff653 Mon Sep 17 00:00:00 2001 From: Jianpeng Ma Date: Fri, 26 Jun 2015 09:51:43 +0800 Subject: [PATCH] mds: fix mds crash when mds_max_log_events smaller. 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&, 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 --- src/mds/MDLog.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index cb5326bea866c..36af6cafb8adc 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -572,7 +572,7 @@ void MDLog::trim(int m) stop += 2.0; map::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 && -- 2.39.5