ceph/ceph — pull request #1603 by liewegas (2014-04-04 20:57:20+00:00)
Title: osd/ReplicatedPG: do not hit_set_persist while potentially backfilling hit_set_*

The hit_set transactions may include both a modify of the new hit_set and
deletion of an old one, spanning the backfill boundary, and we may end up
sending a backfill target a blank transaction that does not correctly remove
the old object. Later it will notice the stray object and throw an
assertion.

Fix this by skipping hit_set_persist() if any of the backfill targets are
still working on the very first hash value in the PG (which is where all of
the hit_set objects live). This is coarse but simple.

Another solution would be to send separate ops for the trim/deletion and new
hit_set update, but that is a bit more complex and a bit more runtime
overhead (twice the messages).

Fixes: #7983 Signed-off-by: Sage Weil