Bug #41190
closedosd: pg stuck in waitactingchange when new acting set doesn't change
0%
Description
In pg GetLog state,when process choose_acting, if want not equal acting, it will request pg_temp from mon,and then post an event NeedActingChange.
before transit to WaitActingchange, pg state will exit from getlog->peering->primary,and then enter Started/Primary/Peering/WaitActingChange.
but in exit Primary state,pg->want_acting will be cleared,So when in WaitActingChange wait AdvMap evt,the empty want_acting will lead pg cycle in this state.
thus, pg state will be out of this state until new acting is not equal now and restart peering.
Problem Description:
epoch 90: want_acting is[9, 8, 3], pg acting is[9 8],it would request a pg_temp [9,8,3] from mon. and it would post an NeedActingChange event.
epoch 91: osd.3 is down in osdmap;now the new acting will be [9,8].but when in state WaitActingChange resolve ActMap, in the log,pg->want_acting is empty,
it will stuck in this state until pg's acting set different from now.
Files