[Gluster-devel] RFC: d_off encoding at client/protocol layer

Shyam srangana at redhat.com
Mon Jan 26 19:59:14 UTC 2015


Hi,

Some parts of this topic has been discussed in the recent past here [1]

The current mechanism of each xlator encoding the subvol in the lower or 
higher bits has its pitfalls as discussed in the threads and in this 
review, here [2]

Here is a solution design from the one of the comments posted on this by 
Avati here, [3], as in,

"One example approach (not necessarily the best): Make every xlator 
knows the total number of leaf xlators (protocol/clients), and also the 
number of all leaf xlators from each of its subvolumes. This way, the 
protocol/client xlators (alone) do the encoding, by knowing its global 
brick# and total #of bricks. The cluster xlators blindly forward the 
readdir_cbk without any further transformations of the d_offs, and also 
route the next readdir(old_doff) request to the appropriate subvolume 
based on the weighted graph (of counts of protocol/clients in the 
subtrees) till it reaches the right protocol/client to resume the 
enumeration."

So the current proposed scheme that is being worked on is as follows,
- encode the d_off with the client/protocol ID, which is generated as 
its leaf position/number
- no further encoding in any other xlator
- on receiving further readdir requests with the d_off, consult the, 
graph/or immediate children, on ID encoded in the d_off, and send the 
request down that subvol path

IOW, given a d_off and a common routine, pass the d_off with this (i.e 
current xlator) to get a subvol that the d_off belongs to. This routine 
would decode the d_off for the leaf ID as encoded in the client/protocol 
layer, and match its subvol relative to this and send that for further 
processing. (it may consult the graph or store the range of IDs that any 
subvol has w.r.t client/protocol and deliver the result appropriately).

Given the current situation of ext4 and xfs, and continuing with the ID 
encoding scheme, this seems to be the best manner of preventing multiple 
encoding of subvol stomping on each other, and also preserving (in a 
sense) further loss of bits. This scheme would also give AFR/EC the 
ability to load balance readdir requests across its subvols better, than 
have a static subvol to send to for a longer duration.

Thoughts/comments?

Shyam

[1] https://www.mail-archive.com/gluster-devel@gluster.org/msg02834.html
[2] review.gluster.org/#/c/8201/4/xlators/cluster/afr/src/afr-dir-read.c
[3] https://www.mail-archive.com/gluster-devel@gluster.org/msg02847.html


More information about the Gluster-devel mailing list