osd: Twiddle should create a full sized vector for optimized EC
The twiddle function in OSD is designed to force a PG to select new OSDs
in a similar mechanism to the "repeer" CLI command. To be compatible with
Fast EC, it must return a vector which the size of the acting set. However,
it returns a smaller vector. This can cause the OSD to panic in
pgtemp_undo_primaryfirst.
The twiddle function is used in one place and is only called when a PG goes
into a "pending" state. This only happens when the system hits the maximum
PGs per OSD (see OSD::maybe_wait_for_max_pg). As a result it is hard to hit,
however it was seen on a large test system when testing this scenario.
The fix is similar to the repeer fix put in place to fix tracker 73897. See
commit
a3cc500a543d1c2fb9e1d55c144e0a041e3d1f80 for details.
In this case, we restrict the change to just Fast EC, so as to reduce the
testing requirement of the change, which is very hard to hit.
Signed-off-by: Alex Ainscow <aainscow@uk.ibm.com>
(cherry picked from commit
646d49a08fbd278539c1f9ca9cd7702bf7a3e26a)