]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commit
FileStore::_do_copy_range: tolerate short reads on replay
authorSamuel Just <sjust@redhat.com>
Tue, 8 Nov 2016 20:22:06 +0000 (12:22 -0800)
committerSamuel Just <sjust@redhat.com>
Thu, 17 Nov 2016 18:40:16 +0000 (10:40 -0800)
commit9499cdcd87ddac4a91abffe401baddb91f8a11d5
tree0d8e81db56daff46c4ad02c49ff26458db5fa3b9
parentbcb5a0da211816b4fbdd4b90c76b1ea284177306
FileStore::_do_copy_range: tolerate short reads on replay

Consider a sequence like:

0. foo object size is 15
1. clone_range foo -> foo.0 5~5
2. write foo 5~5
3. clone_range foo -> foo.1 10~5
4. write 10~5 foo
5. rename foo -> foo.1
6. remove foo.0
7. remove foo.1
8. remove foo.2

If this sequence is interupted after 8 and replayed from 1, by the time
it gets to 3 the object will only have size 10 and no replay guard
(since 1 was skipped and 2 recreated the object with size 10 resulting
in a short read.  This should only happen if the replay guard is
missing, which should only happen if the object gets deleted later
in the sequence.

Signed-off-by: Samuel Just <sjust@redhat.com>
src/os/filestore/FileStore.cc