When a shard is deleted all the sysmeta is deleted along with it. But this is problematic as we support dealing with misplaced objects in deleted shards. Which is required. Currently, when we deal with misplaced objects in a shard broker marked as deleted we push the objects into a handoff broker and set this broker's root_path attribute from the deleted shard. Unfortunately, root_path is itself stored in sysmeta, which has been removed. So the deleted broker falls back to using its own account and container in the root_path. This in turn gets pushed to the shard responsible for the misplaced objects and because these objects are pushed by replication the root_path meta has a newer timestamp, replacing the shard's pointer to the root. As a consequence listings all still works because it's root driven, but the shard will never pull the latest shard range details from the _real_ root container during audits. This patch contains a probe test that demonstrates this issue and also fixes it by making 'X-Container-Sysmeta-Shard-Quoted-Root' and 'X-Container-Sysmeta-Shard-Root' whitelisted from being cleared on delete. Meaning a deleted shard retains it's knowledge of root so it can correctly deal with misplaced objects. Co-Authored-By: Alistair Coles <alistairncoles@gmail.com> Change-Id: I3315f349e5b965cecadc78af9e1c66c3f3bcfe83
67 KiB
67 KiB