Bug 1092606

Summary: Same dentry stored as a file and directory on different subvolumes when snapshots are restored
Product: [Community] GlusterFS Reporter: Raghavendra G <rgowdapp>
Component: protocolAssignee: bugs <bugs>
Status: CLOSED CURRENTRELEASE QA Contact:
Severity: medium Docs Contact:
Priority: medium    
Version: mainlineCC: atumball, bugs
Target Milestone: ---Keywords: Triaged
Target Release: ---   
Hardware: All   
OS: All   
Whiteboard:
Fixed In Version: glusterfs-4.1.4 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2018-09-18 08:30:26 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1335373    

Description Raghavendra G 2014-04-29 14:39:05 UTC
Description of problem:

There is no test case. This issue was found during design review of barrier xlator. A pure distribute volume having more than one subvolume is the setup.

It is possible in a pure distribute volume that the following sequence of FOPs could result
    in snapshots of bricks disagreeing on inode type for a file or directory.

    t1: snap b1
    t2: unlink /a
    t3: mkdir /a
    t4: snap b2

where, b1 and b2 are bricks of a pure distribute volume V.

The above sequence can happen with the current barrier xlator design, since we allow unlink FOPs
to go through to the disk and only block their acknowledgement to the application. This implies
a concurrent mkdir on the same name could succeed, since DHT doesn't serialize unlink and mkdir FOPs, unlike AFR.

The solution is to serialize operations on same entry in server.

Version-Release number of selected component (if applicable):


How reproducible:


Steps to Reproduce:
1.
2.
3.

Actual results:


Expected results:


Additional info:

Comment 1 Amar Tumballi 2018-09-18 08:30:26 UTC
The feature serialized dentry is now present in codebase.

You can enable it using 'gluster volume set $vol features.sdfs enable'.