| Summary: | removexattr is not sent to all subvolumes | ||
|---|---|---|---|
| Product: | [Community] GlusterFS | Reporter: | Vikas Gorur <vikas> |
| Component: | distribute | Assignee: | Anand Avati <aavati> |
| Status: | CLOSED CURRENTRELEASE | QA Contact: | |
| Severity: | medium | Docs Contact: | |
| Priority: | high | ||
| Version: | 3.1.2 | CC: | amarts, chrisw, gluster-bugs, lakshmipathi |
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | x86_64 | ||
| OS: | All | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | Type: | --- | |
| Regression: | RTP | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
Submitted: http://patches.gluster.com/patch/6178/ DHT now sends setxattr() to all the subvolumes. This is necessary to preserve semantics for extended attributes on directories. Without this, when a volume expansion takes place, setxattr() can go to a different subvolume than previously, leading to missing attributes, etc. The same problem still affects removexattr(). Currently DHT sends it only to the hashed subvolume. So when a volume expansion happens, it is possible that although removexattr() is sent to the hashed subvolume, the xattr actually exists on some other subvolume. To the user it will appear as though removexattr() sometimes behaves like a no-op. The fix is to send removexattr() to all subvolumes of DHT. PATCH: http://patches.gluster.com/patch/6178 in master (cluster/dht: Send removexattr() to all subvolumes.) tested with 3.1.2 ,extended attrib. not removed from all backend. verified with commit-id "26cedae57d5b7cb8d50ed077ce29c92e30d6e260" -extended attrib.removed from all backends. |
Steps to reproduce for QA: - Create a distribute volume with two bricks and mount at /mnt # mkdir /mnt/dir.{1..64} # mkdir /mnt/dir.{1..64}/foo # setfattr -n trusted.test -v 42 /mnt/dir.{1..64}/foo - add-brick with 2 more bricks # ls -lR /mnt # setfattr -x trusted.test /mnt/dir.{1..64}/foo This will remove the xattr from only one of the bricks. This can be verified at the backend. # getfattr -d -m. /mnt/dir.{1..64}/foo Some of these results will be garbage instead of "42". After the patch is applied, verify from backend that the extended attributes are deleted from ALL backends.