From 1eae016846e19f4650e9d98c0e1ef2ae3d850c3f Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 18 Jun 2009 16:37:03 -0700 Subject: [PATCH] osd: make add_next_entry behave when we start at backlog split point Weaken the assertions a bit and just adjust missing appropriately. Things may not match up perfectly if the split point is a backlog entry, so just make missing what it should be a worry less about what it was. Here is the specific crash: 09.06.18 16:29:15.085353 1124096336 osd1 10 pg[1.8( v 5'4/3'2 (0'0,5'4] n=2 ec=2 les=10 10/3) r=1 lcod 0'0 stray m=1] my log = log(0'0,5'4]+backlog 3'1 (0'0) m 200.00000000/head by mds0.1:1 09.06.18 16:20:07.524996 indexed 3'2 (0'0) m 2.00000000/head by mds0.1:5 09.06.18 16:20:07.527454 indexed 5'3 (3'1) m 200.00000000/head by mds0.1:23 09.06.18 16:20:25.128842 indexed 5'4 (5'3) m 200.00000000/head by mds0.1:35 09.06.18 16:20:48.623669 indexed 09.06.18 16:29:15.085393 1124096336 osd1 10 pg[1.8( v 5'4/3'2 (0'0,5'4] n=2 ec=2 les=10 10/3) r=1 lcod 0'0 stray m=1] osd2 log = log(8'68,9'69]+backlog 3'2 (0'0) b 2.00000000/head by mds0.1:5 09.06.18 16:20:07.527454 9'69 (8'68) m 200.00000000/head by mds0.1:1114 09.06.18 16:28:08.837907 09.06.18 16:29:15.085416 1124096336 osd1 10 pg[1.8( v 5'4/3'2 (0'0,5'4] n=2 ec=2 les=10 10/3) r=1 lcod 0'0 stray m=1] merge_log log(8'68,9'69]+backlog from osd2 into log(0'0,5'4]+backlog 09.06.18 16:29:15.085456 1124096336 osd1 10 pg[1.8( v 5'4/3'2 (0'0,5'4] n=2 ec=2 les=10 10/3) r=1 (log bound mismatch, actual=[3'2,9'69] len=2) lcod 0'0 stray m=1] merge_log split point is 3'2 (0'0) b 2.00000000/head by mds0.1:5 09.06.18 16:20:07.527454 09.06.18 16:29:15.085472 1124096336 osd1 10 pg[1.8( v 5'4/3'2 (0'0,5'4] n=2 ec=2 les=10 10/3) r=1 (log bound mismatch, actual=[3'2,9'69] len=2) lcod 0'0 stray m=1] merge_log merging 3'2 (0'0) b 2.00000000/head by mds0.1:5 09.06.18 16:20:07.527454 09.06.18 16:29:15.085493 1124096336 osd1 10 pg[1.8( v 5'4/3'2 (0'0,5'4] n=2 ec=2 les=10 10/3) r=1 (log bound mismatch, actual=[3'2,9'69] len=2) lcod 0'0 stray m=2] merge_log merging 9'69 (8'68) m 200.00000000/head by mds0.1:1114 09.06.18 16:28:08.837907 osd/PG.h: In function 'void PG::Missing::add_next_event(PG::Log::Entry&)': osd/PG.h:494: FAILED assert(missing[e.soid].need == e.prior_version) --- src/osd/PG.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/osd/PG.h b/src/osd/PG.h index 6ce0a84a594f2..029576514c15b 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -491,9 +491,9 @@ public: missing[e.soid] = item(e.version, eversion_t()); // .have = nil } else if (missing.count(e.soid)) { // already missing (prior). - assert(missing[e.soid].need == e.prior_version); - rmissing.erase(e.prior_version); - missing[e.soid].need = e.version; // .have unchanged. + //assert(missing[e.soid].need == e.prior_version); + rmissing.erase(missing[e.soid].need); + missing[e.soid].need = e.version; // leave .have unchanged. } else { // not missing, we must have prior_version (if any) missing[e.soid] = item(e.version, e.prior_version); -- 2.39.5