Hi, Kevin.

Welcome!  Glad someone's getting use out of stacking.

First, your stack.  It sounds like you're stacking like this:

MDCACHE
    |
   NULL (modified)
    |
  PROXY

Correct?

The readdir() path is somewhat different than the lookup/open path.  In 
a normal lookup (say), the call comes into the protocol layer, and is 
passed to MDCACHE, and so down the stack, to the bottom FSAL, which 
creates a handle.  The handle is then passed back up the stack, each 
layer wrapping it as it goes, until MDCACHE creates it's handle and 
caches it.  Future attempts to get the metadata (getattr() calls) are 
handled directly by MDCACHE until the cache entry times out, or until an 
event causes cache invalidation on the entry.

For readdir(), however, no lookup is ever made.  The Protocol layer 
calls readdir(), which calls into MDCACHE.  MDCACHE then caches the 
*entire* directory worth of dirents for the directory (except for large 
directories, but we'll skip that for a second).  This involves calling 
readdir() down the stack starting at 0 and going until there are no more 
entries.

However, a readdir() call doesn't just create directory entries, it also 
materializes handles for each object in the directory, and passes them 
back up.  This includes attributes, which are cached at the MDCACHE 
layer as stated before.

This means that any modification of size or other attributes that you do 
on create(), lookup(), or getattr() must also be done during readdir(), 
or the full original attributes will be cached, causing the incorrect 
values to be returned until the entry times out.

Does this help?

Daniel

On 12/20/2016 02:49 PM, Kevin C. wrote:
> I'm trying to simplify migration away from a legacy non-standard NFS
> server by creating a stackable FSAL. For my tests, I’m using a slightly
> modified copy of FSAL NULL above FSAL PROXY.
>
> Reads from the legacy non-standard NFS server includes data not
> originally provided by user application writes. Writes to the legacy
> non-standard NFS server also requires insertion of data not provided by
> the user application. I am unable to change the legacy system (anytime
> soon).
>
> For all tests I’ve run, my FSAL NULL derived layer is successfully
> inserting test data.
>
> When file system operations are done in a certain order (e.g. reading
> files before listing directory contents), my FSAL NULL derived layer
> successfully removes the inserted test data from the read data stream
> presented to user applications and FSAL adjusted file sizes are shown by
> file manager GUI or "ls".
>
> If the PROXY NFS server directory contents are listed first (via "ls" or
> file manager GUI) or output via "cat //mnt/nfstst//*", it seems like the
> FSAL NULL derived layer is bypassed. The user applications receive the
> extra/unwanted data as well as the expected user application data and
> directory listings show file sizes that are NOT adjusted to subtract the
> extra/unwanted data portions from the size.
>
> I hope that someone more familiar with NFS-Ganesha's architecture can
> help identify the processing path(s) that I have failed to identify
> (i.e. adjust via the stackableFSAL) so that I can eliminate this
> operation order dependency.
>
> My original work was done on the 2.4 stable branch. The development
> process indicates all patches should be made to the current development
> branch. I've recreated these results with the 2.5 development branch. If
> your input helps me find a bug, I'll submit a fix.
>
> I’m requesting input from more experienced NFS-Ganesha developers.
> Please provide any input that helps me eliminate this processing order
> dependency.
>
> Thanks in advance,
> Kevin
>
>
>
>
> ------------------------------------------------------------------------------
> Developer Access Program for Intel Xeon Phi Processors
> Access to Intel Xeon Phi processor-based developer platforms.
> With one year of Intel Parallel Studio XE.
> Training and support from Colfax.
> Order your platform today.http://sdm.link/intel
>
>
>
> _______________________________________________
> Nfs-ganesha-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel
>


------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today.http://sdm.link/intel
_______________________________________________
Nfs-ganesha-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel

Reply via email to