[sheepdog] question about replica recovery failure caused by oid.tmp file
nkuzbp at foxmail.com
Sun Sep 14 18:14:28 CEST 2014
I have a problem in using sheepdog. I create a erasure coded VDI and write
some data to it. Then, I unplug disk and stop/restart one sheep in a short
time. After recovery is completed in the latest epoch, I find some replica is
lost and only the corresponding oid.tmp file exists in the data directory. I tried
to rebuild the replica using "dog vdi check", but it didn't work. I think it is
caused by oid.tmp file. I have to delete the oid.tmp file manually and then
"dog vdi check" successfully recoverd the lost replica.
In function default_create_and_write() of sheep/plain_store.c, it returns
success directly if oid.tmp file exists. I have read the comment in this function carefully,
it says gateway and recovery thread may try to write the SAME data, so it is okay
to simply return success here. To solve this problem, I want to change the code of
default_create_and_write() so that replica data will be written even oid.tmp file exists.
If oid.tmp exists, the function should overwrite it.
I am not sure if this change will work good for all scenario. Especially, I doubt whether
this change will lead to old data overwriting new data. But I haven't thought out any scenario
that will lead to old data overwriting new data. Can someone give me some advice to solve this problem?
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the sheepdog