At Mon, 22 Aug 2011 19:13:41 -0400, Vivek Chaurasiya wrote: > > Hi all, > > While reading the documentation of SD at > https://github.com/collie/sheepdog/wiki/Sheepdog-Design > > >>retrying I/O requests > > >>Sheepdog stores all node membership histories. We call the version number > of the histories ''epoch'' (See also the 'Object Recovery' section). When > the gateway forwards I/O >>requests to the target node and the latest epoch > number doesn't match between the gateway and the target node, the I/O > requests fail and *the gateway retries the requests until >>the epoch > numbers match.* This is necessary to keep a strong consistency of replicated > objects. > > 1. Does this algorithm is on the lines of 'Paxos consensus protocol' ? No. What I meant here is that we can avoid the possibility to read the old data. If the gateway read data from a wrong target based on the old node membership info, the data may be no longer valid. To avoid this problem, the sheep daemon checks the version of a node membership (epoch) every time when it communicates with the other nodes. > > 2. When gateway retries, do we make sure that is doesn't contact the same > target node it did before ? Unfortunately, no. The gateway will simply try again as soon as possible, and it can happen to connect the same node based on the old epoch. Thanks, Kazutaka |