Hi-

I led a discussion on Friday at the Linux Storage and Filesystem Summit on how 
to store {DFS, FedFS} junctions in Linux filesystems.  I'd like to summarize 
the discussion, then ask a few follow-up questions.  I apologize in advance for 
the length.

FedFS is to NFS as Microsoft DFS is to SMB/CIFS.  FedFS uses NFS referrals to 
glue together a file namespace out of separate shares, starting with a root 
share that may contain nothing but referrals.  For more on FedFS, start with 
RFC 5716.

The physical object that stores referral location target information is called 
a junction.  It can contain an actual list of locations, or it can contain the 
DN of an LDAP record where the location list is maintained.

 +  Samba uses a symlink for this purpose.  The contents of the link represent 
the location information passed out to CIFS clients.

 +  FedFS uses an extended attribute on a directory for this purpose.  The 
xattr contains XML which encodes location information passed out to NFS clients.

The reasons for this difference are simply historical.

Linux is often used as a multi-protocol file service platform, where the same 
physical data is presented to clients via both NFS and CIFS.  For this reason, 
we think there would be value in using the same physical representation for 
both NFSD and Samba so that a single junction object on our exported 
filesystems can trigger a referral for both NFS and CIFS.

Samba has been around much longer, and DFS support is actually deployed.  FedFS 
is newer and still experimental.  Thus we decided to change FedFS to use a 
symlink instead of a directory.  Samba will still use the regular contents of 
the symlink, and FedFS will store its metadata in an extended attribute 
attached to the symlink.

There was a rough consensus to prefer JSON over XML in the FedFS xattr, though 
there are still some who dislike both.  I'm open to suggestion, since we're now 
essentially replacing the existing FedFS junction format and can change it to 
anything we like.

Today FedFS junctions can contain either a location list or an LDAP DN.  One 
option for FedFS is to support only the LDAP DN junction type, and have a 
(possibly local) LDAP service available to store the location information.  The 
FedFS junction xattr would then always contain an LDAP URL.  Storing complex 
data types (a list containing pathnames, hostnames, integers, and other values) 
would then be up to LDAP.

We will have to discuss a conjunction of administrative interfaces at some 
later point.  However, we should clarify how our junction management tools 
behave now that each junction can have metadata it did not have before.

FedFS:

  nfsref add - if no symlink exists, create it (what contents should it have?)
             - add an extended attribute

  nfsref remove - remove the extended attribute, leave the symlink
                - can we remove the symlink if its contents are meaningless?


Samba:

  add - if a symlink already exists, replace its contents, preserving xattrs

  remove - if a FedFS extended attribute exists, leave the symlink (what 
contents should it have?)


The FedFS extended attribute is called "trusted.junction.nfs".  Should we 
rename it?

Note that CAP_SYS_ADMIN capabilities are required to access the xattr.  Will 
that be a problem for Samba administration tools?

-- 
Chuck Lever
chuck[dot]lever[at]oracle[dot]com





_______________________________________________
fedfs-utils-devel mailing list
[email protected]
https://oss.oracle.com/mailman/listinfo/fedfs-utils-devel

Reply via email to