[sheepdog] [PATCH 9/9] sheep: show error message when object may be lost
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Tue May 7 10:12:15 CEST 2013
At Tue, 07 May 2013 16:05:05 +0800,
Liu Yuan wrote:
>
> On 05/07/2013 03:43 PM, MORITA Kazutaka wrote:
> > At Tue, 07 May 2013 15:13:12 +0800,
> > Liu Yuan wrote:
> >>
> >> + 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?
> >
> > I set false to data_lost even when only one of nodes returns
> > SD_RES_NO_OBJ.
> >
> > Write requests are successful only when all the replicas are updated.
> > This means that if there is a node who returns SD_RES_NO_OBJ, we can
> > guarantee that no write requests were succeeded at the epoch and we
> > can safely use the older replicas.
> >
> > For example,
> >
> > Epoch Nodes
> > 1 [A, B, C, D] <- A, B, and C has the object X.
> > 2 [A, B, C, D, E] <- B, C, and E are in charge of X, but E doesn't recover
> > X yet.
> > 3 [A, C, D, E]
> > 4 [A, D, E] <- B and C have gone away at epoch 2
> >
> > In this case,
> >
> > - A tries to recover X from C, D, and E at epoch 3 first, but no
> > object is recovered at epoch 3. C, D, and E return SD_RES_NO_OBJ
> > and we can safely try the older epoch.
> >
> > - A tries to recover X from B, C, and E at epoch 2. A cannot connect
> > to B and C, and E returns SD_RES_NO_OBJ. In this case, no need to
> > consider that X was updated at epoch 2 because if it was updated
> > from X to X', E must have X'.
> >
> > - Now A can safely read X from A, B, or C at epoch 1.
> >
>
> So only all the nodes hold the copies are gone at some epoch, we can
> safely say that we lost the object and would return a stale one. So
> please put this conclusion directly in the comment,
>
> /*
> * No object means that there was no write success at
> * this epoch.
> */
>
> I have no idea of this comment when I first see it. And it would be
> better add a new error code such as SD_RES_STALE_OBJECT to indicate this
> case. If we can refine recover_object_from_replica() and switch case its
> reval, it would make the code more readable. Use '-1' to indicate error
> case isn't good. We should refactor do_recover_object better.
Okay, I'll do it in v2.
Thanks,
Kazutaka
More information about the sheepdog
mailing list