Hide Forgot
Consider the case where there is a simple 2-node replicate cluster on which the user has stored "user.*" extended attributes on directories. Now if two new nodes (as a replicate pair) are added and the 4-node cluster configured as distribute+replicate, the user will lose access to the attributes. This is because dht sends getxattr() only to the hashed subvolume, thus half of the calls will go to the new 2-node pair where the "user.*" attributes don't exist. The fix is that when dht self-heals the directories it should copy any "user.*" attributes it finds.
raising priority on this one.
PATCH: http://patches.gluster.com/patch/5630 in master (Fix DHT getxattr for directories)
This is only a partial fix. What happens if after the expansion the user updates the value of an existing attribute? This setxattr could go to the new subvolume, thus resulting in the same key existing on two different subvolumes with different values. Merging them would then result in that key being repeated in the result.
(In reply to comment #3) > This is only a partial fix. What happens if after the expansion the user > updates the value of an existing attribute? This setxattr could go to the new > subvolume, thus resulting in the same key existing on two different subvolumes > with different values. Merging them would then result in that key being > repeated in the result. dict_copy() merges the key without repeating in the result.
How can we be sure that the value that's left in the end is the updated value and not the old value?
This problem is solved as a side-effect of this patch: http://patches.gluster.com/patch/5150/ The patch makes dht send setxattr to ALL subvolumes. So if an existing attribute's value is updated, all subvolumes will have the same value. Hence there is no chance of the old value being returned.
A FAQ entry saying, only with 3.1.2 releases, Distribute self-heal will copy the extendend attribute.
Added the following in 3.1.3 Release Notes (Issues Resolved... section): Fixed the issue generated during self-heal of directories, or rebalance of layout happening on distributed volumes. The extended attributes are now copied/healed appropriately.