On 05/07/2013 02:53 PM, MORITA Kazutaka wrote:
> Here is a simple scenario where sheep can show the old data:
> 
> ==
> Epoch  Nodes
> 1      [A, B, C]           <- A, B, and C has the object X
> 2      [A, B, C, D]
> 3      [A, B, C, D, E]
> 4      [A, B, C, D, E, F]  <- The object X are copied to D, E, and F, and
>                               it is updated from X to X' at this epoch
> 5      [A, B, C, D, E]
> 6      [A, B, C, D]
> 7      [A, B, C]           <- D, E, and F have gone away at the same time at 
> epoch 4.
>                               A, B, and C still have X and recover the object
>                               to the working direcotry, but clients must see 
> X'.
> ==
> 
> Currently, sheep rollbacks to the older epoch without considering the
> consistency problem, so it can show the older data to clients.
> 
> In the initial sheepdog codes, we returned SD_RES_EIO to clients when
> we cannot guarantee that the object is the latest one.  I'm not sure
> which is the better approach now because the above example is unlikely
> to happen and returning EIO can also stop VMs.  To make sheepdog
> tolerant against rapid node changes, I have come to think that we
> should accept the consistency problem and print the error message
> instead.
>                     

Print the error message makes sense. But I don't understand the code yet.

+               case SD_RES_NO_OBJ:
+                       /*
+                        * No object means that there was no write success at
+                        * this epoch.
+                        */
+                       data_lost = false;
+                       /* fall through */

So if A, B, C all return SD_RES_NO_OBJ, you set data_lost = false, in
this case, we don't print an error, no?

Thanks,
Yuan
-- 
sheepdog mailing list
sheepdog@lists.wpkg.org
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to