The main point of PDW (as currently implemented) is to reduce the amount
of reading performed by the primary when preparing for a read-modify-write (RMW).
It was making the assumption that if any recovery was required by a
conventional RMW, then a PDW is always better. This was an incorrect assumption
as a conventional RMW performs at most K reads for any plugin which
supports PDW. As such, we tweak this logic to perform a conventional RMW
if the PDW is going to read k or more shards.
This should improve performance in some minor areas.
Signed-off-by: Alex Ainscow <aainscow@uk.ibm.com>
(cherry picked from commit
cffd10f3cc82e0aef29209e6e823b92bdb0291ce)
if (pdw_write_mode != 0) {
do_parity_delta_write = (pdw_write_mode == 2);
+ } else if (pdw_read_shards.size() >= sinfo.get_k()) {
+ // Even if recovery required for a convention RMW, PDW is not more
+ // efficient.
+ do_parity_delta_write = false;
} else if (!shard_id_set::difference(pdw_read_shards, readable_shards).empty()) {
// Some kind of reconstruct would be needed for PDW, so don't bother.
do_parity_delta_write = false;