this fixes a failure like:
0> 2013-07-19 09:29:16.803918 7f7fb5f31780 -1 mon/OSDMonitor.cc: In
function 'virtual void OSDMonitor::update_from_paxos(bool*)' thread
7f7fb5f31780 time 2013-07-19 09:29:16.803439
mon/OSDMonitor.cc: 132: FAILED assert(latest_bl.length() != 0)
ceph version 0.61.5-15-g72c7c74 (72c7c74e1f160e6be39b6edf30bce09b770fa777)
1: (OSDMonitor::update_from_paxos(bool*)+0x16e1) [0x51d121]
2: (PaxosService::refresh(bool*)+0xe6) [0x4f2a46]
3: (Monitor::refresh_from_paxos(bool*)+0x57) [0x48f7b7]
4: (Monitor::init_paxos()+0xe5) [0x48f955]
5: (Monitor::preinit()+0x679) [0x4b1cf9]
6: (main()+0x36b0) [0x484bb0]
7: (__libc_start_main()+0xfd) [0x7f7fb408dc8d]
8: /usr/bin/ceph-mon() [0x4801e9]
NOTE: a copy of the executable, or `objdump -rdS <executable>` is needed to
interpret this.
---
src/mon/OSDMonitor.cc | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc
index 9c854cd..ab3b8ec 100644
--- a/src/mon/OSDMonitor.cc
+++ b/src/mon/OSDMonitor.cc
@@ -129,6 +129,12 @@ void OSDMonitor::update_from_paxos(bool *need_bootstrap)
if ((latest_full > 0) && (latest_full > osdmap.epoch)) {
bufferlist latest_bl;
get_version_full(latest_full, latest_bl);
+
+ if (latest_bl.length() == 0 && latest_full != 0 && get_first_committed() >
1) {
+ dout(0) << __func__ << " latest_bl.length() == 0 use first_commited
instead of latest_full" << dendl;
+ latest_full = get_first_committed();
+ get_version_full(latest_full, latest_bl);
+ }
assert(latest_bl.length() != 0);
dout(7) << __func__ << " loading latest full map e" << latest_full <<
dendl;
osdmap.decode(latest_bl);
--
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html