Pure Java NFSv3 and NFSv4.1 implementation

Overview

NFS4J

Latest release

The pure java implementation of NFS server version 3, 4.0 and 4.1 including pNFS extension with nfs4.1-files and flex-files layout types.

Building from sources

To build nfs4j from source code Java11 and Maven3 are required.

To run benchmarks:

mvn verify -Pbenchmark

Implementing own NFS server

public class App {

    public static void main(String[] args) throws Exception {

        // create an instance of a filesystem to be exported
        VirtualFileSystem vfs = new ....;

        // create the RPC service which will handle NFS requests
        OncRpcSvc nfsSvc = new OncRpcSvcBuilder()
                .withPort(2049)
                .withTCP()
                .withAutoPublish()
                .withWorkerThreadIoStrategy()
                .build();

        // specify file with export entries
        ExportFile exportFile = new ExportFile(....);

        // create NFS v4.1 server
        NFSServerV41 nfs4 = new NFSServerV41.Builder()
                .withExportFile(exportFile)
                .withVfs(vfs)
                .withOperationFactory(new MDSOperationFactory())
                .build();

        // create NFS v3 and mountd servers
        NfsServerV3 nfs3 = new NfsServerV3(exportFile, vfs);
        MountServer mountd = new MountServer(exportFile, vfs);

        // register NFS servers at portmap service
        nfsSvc.register(new OncRpcProgram(100003, 4), nfs4);
        nfsSvc.register(new OncRpcProgram(100003, 3), nfs3);
        nfsSvc.register(new OncRpcProgram(100005, 3), mountd);

        // start RPC service
        nfsSvc.start();

        System.in.read();
    }
}

Use NFS4J in your project

<dependency>
    <groupId>org.dcache</groupId>
    <artifactId>nfs4j-core</artifactId>
    <version>0.19.0</version>
</dependency>

<repositories>
    <repository>
        <id>dcache-releases</id>
        <name>dCache.ORG maven repository</name>
        <url>https://download.dcache.org/nexus/repository/public/</url>
        <layout>default</layout>
    </repository>
</repositories>

IMPORTANT WARNINGS

Though NFS4J is used by the dCache and other projects in production, the public API is still unstable and subject to change (indicated by leading zero in the version number). Thus, should be considered as beta.

Please consult the API changes document when switching between version numbers. The patch level releases are not affected by API changes, of course.

License

licensed under LGPLv2 (or later)

How to contribute

NFS4J uses the linux kernel model where git is not only source repository, but also the way to track contributions and copyrights.

Each submitted patch must have a "Signed-off-by" line. Patches without this line will not be accepted.

The sign-off is a simple line at the end of the explanation for the patch, which certifies that you wrote it or otherwise have the right to pass it on as an open-source patch. The rules are pretty simple: if you can certify the below:

    Developer's Certificate of Origin 1.1

    By making a contribution to this project, I certify that:

    (a) The contribution was created in whole or in part by me and I
         have the right to submit it under the open source license
         indicated in the file; or

    (b) The contribution is based upon previous work that, to the best
        of my knowledge, is covered under an appropriate open source
        license and I have the right under that license to submit that
        work with modifications, whether created in whole or in part
        by me, under the same open source license (unless I am
        permitted to submit under a different license), as indicated
        in the file; or

    (c) The contribution was provided directly to me by some other
        person who certified (a), (b) or (c) and I have not modified
        it.

    (d) I understand and agree that this project and the contribution
        are public and that a record of the contribution (including all
        personal information I submit with it, including my sign-off) is
        maintained indefinitely and may be redistributed consistent with
        this project or the open source license(s) involved.

then you just add a line saying ( git commit -s )

Signed-off-by: Random J Developer <[email protected]>

using your real name (sorry, no pseudonyms or anonymous contributions.)

Contact Us

For help and development related discussions please contact us: dev (@) dcache (.) org

Comments
  • Directory listing always traverse all elements

    Directory listing always traverse all elements

    I'm using nfs4j 17.3, but as far as I see the issue is present in latest version. The problem is in DirectoryStream initialization:

    1. If I use constructor with Collection, then it's transformed to TreeSet, which call "addAll" method and thus traversing all elements.
    2. If I use constructor with NavigableSet, the collection is not traversed during initialization, but it is from PseudoFS -> list method, where the set is transformed to collection and passed to new DirectoryStream instance, that converts it to TreeSet (the first option). So no matter what I use, it always come down to Collection to Set transformation, that require traversing all elements. This is problematic, as if we have folder with 10k items, I can't return them on demand, as all of them will be loaded in the memory for every listing.

    Even if I use VFSCache, every time all elements from cookie start point till the end will be processed.

    bug enhancement backport required 
    opened by aasenov 18
  • Merge lock support

    Merge lock support

    Are there any plans to merge the lock support in https://github.com/kofemann/nfs4j/tree/lock-locku to the current master. Since the recent changes in b873c76 the branch can no longer be applied to master without conflicts.

    question 
    opened by dkocher 14
  • respect the gid and uid sent in creation attributes

    respect the gid and uid sent in creation attributes

    This originates form using SimpleNfsServer in https://github.com/kofemann/simple-nfs to implement a local nfs server to test an nfs v3 client application. Our client was doing a directory creation as root, but was sending different uid and gid for the directory creation. The SimpleNfsServer ignored that and created the directory with root uid and gid. I tracked the root cause to PseudoFs ignoring the attributes received on creation. The suggested fix is prettry simple but maybe I am optimistic here and a more general solution is needed here. Let me know what you think. One thing is that I am not sure this should be allowed to all users, maybe only root, I can add that check if needed.

    opened by svenin 10
  • Running server on Windows

    Running server on Windows

    Hi,

    I'm trying to get the NFS4J server to run on Windows. I'm using the latest code from the repository, since the released version had some issues. And I'm using the LocalFileSystem implementation from the simple-nfs project. Note: I'm the using NFS3 protocol.

    My NFS client connects correctly, however it performs a number of operations, that fails on the server, most noticable wildcards *. And the request for large files.

    Wildcards When running the client, I get exceptions like this on the server.

    • can not be translated, which makes sense. java.nio.file.InvalidPathException: Illegal char <*> at index 0: *.vmx9IizqK at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182) at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153) at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77) at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92) at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229) at java.base/java.nio.file.Path.resolve(Path.java:515) at dk.ti.nfs.server.LocalFileSystem.lookup(LocalFileSystem.java:243) at org.dcache.nfs.vfs.PseudoFs.lookup(PseudoFs.java:191) at org.dcache.nfs.v3.NfsServerV3.NFSPROC3_LOOKUP_3(NfsServerV3.java:547) at org.dcache.nfs.v3.xdr.nfs3_protServerStub.dispatchOncRpcCall(nfs3_protServerStub.java:62) at org.dcache.oncrpc4j.rpc.RpcDispatcher$1.run(RpcDispatcher.java:110) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) I could easily implement a new lookup method, with wildcard support, but I'm uncertain as to how I return multiple INodes within the LOOKUP3res...

    Large file support I'm uncertain as to the problem, might be related to the problem above, might be an incorrect error message from the client. However it might also be a configuration or implementation problem with the server.

    error: Failed to clone disk: The destination file system does not support large files (12).

    Does NFS4j support large files, and if so, how do I configure this?

    Please advice

    Best regards Kjertil

    opened by kjertil 9
  • small performance improvement in nfs3.readdir*() - reuse inode stat for ...

    small performance improvement in nfs3.readdir*() - reuse inode stat for ...

    ...verifier generation saving a repeated call to fs.getAttr (and a repeated access check as a result).

    both readdir (line ~864) and readdirplus (line ~702) already have the directory stat in hand when they want to generate a verifier - so no need to get it again?

    opened by radai-rosenblatt 8
  • support parsing exports directly from a stream (at the cost of no rescans if read from stream)

    support parsing exports directly from a stream (at the cost of no rescans if read from stream)

    allow parsing the exports "file" directly from a stream.

    this is needed as a work around to something like this issue - http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7156873

    specifically, if you use onejar packaging, and try something like:

    exportFile = new ExportFile(this.getClass().getClassLoader().getResource("exports").toURI());
    

    (where "exports" is packaged inside the jar), you will get this:

    Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at com.simontuffs.onejar.Boot.run(Boot.java:340)
        at com.simontuffs.onejar.Boot.main(Boot.java:166)
    Caused by: java.nio.file.FileSystemNotFoundException
        at com.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:171)
        at com.sun.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:157)
        at java.nio.file.Paths.get(Paths.java:143)
        at org.dcache.nfs.ExportFile.parse(ExportFile.java:65)
        at org.dcache.nfs.ExportFile.<init>(ExportFile.java:54)
        at org.dcache.simplenfs.SimpleNfsServer.<init>(SimpleNfsServer.java:38)
        at org.dcache.simplenfs.App.main(App.java:23)
        ... 6 more
    

    with this commit you can do this:

    exportFile = new ExportFile(new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream("exports")))
    
    opened by radai-rosenblatt 7
  • initial implementation of nfs3 COMMIT

    initial implementation of nfs3 COMMIT

    added a commit op to VirtualFileSystem interface. for chimera commit is a nop since it should never be called (all IO is done FILE_SYNC) for PseudoFS commit is a pass-through (nfs3 rfc does not include access/permission check for commit) for VfsCache commit is also pass-through (same as write)

    opened by radai-rosenblatt 7
  • Interoperability issue with cookie handling for READDIR operation

    Interoperability issue with cookie handling for READDIR operation

    We have noticed an interoperability issue when a Linux NFS client is sending a READDIR command with a cookie value over 0.

    For example, when a cookie value of 102 is sent in the READDIR command, the nfs4j server will respond with a list of files, and the first file will have the cookie value of 102. In case of a Linux NFS server, the first file will have a cookie value of 103.

    The RFC 7530 (page 270) isn't really clear if the cookie value in the request should be included (like nfs4js) or excluded (like Linux NFS server): The arguments contain a cookie value that represents where the READDIR should start within the directory. A value of 0 (zero) or the cookie is used to start reading at the beginning of the directory. For subsequent READDIR requests, the client specifies a cookie value that is provided by the server in a previous READDIR request.

    I'm joining a NFS Wireshark capture between a Linux client and a Linux server to show the difference (check the second READDIR). nfs-readdir-linux-server.zip Another difference noted is the Linux NFS server is always setting the cookie of the last entry to the value 2147483647.

    To exclude the cookie provided in the request, this line can be changed: https://github.com/dCache/nfs4j/blob/b4af4c33051c3d150ed94cbb503730c977fee310/core/src/main/java/org/dcache/nfs/v4/OperationREADDIR.java#L105 To: startValue -= (COOKIE_OFFSET-1);

    info needed 
    opened by sraillard 6
  • nfs3 server does not correctly handle utf-8 filenames

    nfs3 server does not correctly handle utf-8 filenames

    When trying to cp files with chinese/japanese characters in them, the nfs3 server will replace anything that isn't US ASCII with ASCII 63 which is the question mark - this appears to be caused by Xdr (in this case) decoding the strings as US ASCII using Java's string constructor in xdrDecodeString with Charset.US_ASCII as the second parameter.

    If this NFS3 implementation is to follow the spec, I think it should either use UTF-8 or throw an error - as suggested by RFC 1813 section 3.2:

    1. In general, there will be characters that a server will not be able to handle as part of a filename. This set of characters will vary from server to server and from implementation to implementation. In most cases, it is the server which will control the client's view of the file system. If the server receives a filename containing characters that it can not handle, the error, NFS3ERR_EACCES, should be returned. Client implementations should be prepared to handle this side affect of heterogeneity.
    enhancement 
    opened by skoopys 6
  • RENEW operation fails when lease has expired

    RENEW operation fails when lease has expired

    [OncRpcSvc Worker(6)] WARN org.dcache.nfs.v4.NFSServerV41 - Bad client: op: RENEW : NFS4ERR_EXPIRED : lease time expired: (32209908): 00000000b8e85600dffe1002cda07f00000100000000000000006475636b2d30002f55736572732f646b6f636865722f4c6962726172792f47726f757020436f6e7461696e6572732f473639534358393458552e6475636b2f4c6962726172792f4170706c69636174696f6e20537570706f72742f6475636b2f566f6c756d65732f64726f70626f782e697465726174652e636820e2809320576562444156202848545450532900 (6307675351287857153).

    Not sure who is to blaim but when accessing with the server with the NFS client in OS X the client endlessly tries to send a RENEW operation but always gets an NFS4ERR_EXPIRED error returned when the default leas time has expired. It looks like the default lease time in NFSv4StateHandler cannot be configured.

    opened by dkocher 6
  • Failure to connect to AWS EFS mounts

    Failure to connect to AWS EFS mounts

    It looks like the client included within the project is unable to communicate with AWS's Elastic File System that supports NFSv4. Have you had any luck connecting to it? I initially got a minor version not supported error 10021, then tried using withMinorVersion(0) and was able to move onto an unsupported error when it attempts to do the exchange_id 10004. Not sure if it should be able to talk with it but the linux NFSv4 client works with it fine.

    It would be amazing if this worked as you could then use EFS from AWS Lambda.

    enhancement 
    opened by spullara 6
  • Byte-range locks of expired clients not ignored

    Byte-range locks of expired clients not ignored

    As resources allocated by expired clients are reclaimed by a periodically running cleanup thread, there are situations when a lock by a valid client denied due to conflicting lock of an expired client (pynfs test COUR2 testLockSleepLock).

    This should be fixed in AbstractLockManager#lock method by checking , that conflict lock is held by a valid client.

    bug rfc compiance 
    opened by kofemann 0
  • Can nfs4j-client automatically reclaim expired resources?

    Can nfs4j-client automatically reclaim expired resources?

    After the session expires, can the client actively reconnect? The client does not need to do any processing, the server will take the initiative to reclaim expired resources? When I used nfs4j-client to create a large number of mounts and performed related io operations, I found that some bad_sessions on the client side had failed, but the number of links displayed on the server side did not decrease. I don’t know how to recycle these expired resources.

    info needed 
    opened by hxedda 1
  • Kerberos authentication

    Kerberos authentication

    Hi,

    I'm trying to get NFS4J working with Kerberos on Ubuntu 20.04. OS native NFS server with Kerberos works fine as well as NFS4J without authentication. But with both NFS4J and Kerberos, I invariably have an access denied on the client side.

    sudo mount -t nfs -o sec=krb5 -o vers=4.1 -vvvv localhost:/ /mnt/export
    mount.nfs: timeout set for Wed May 19 11:17:42 2021
    mount.nfs: trying text-based options 'sec=krb5,vers=4.1,addr=127.0.0.1,clientaddr=127.0.0.1'
    mount.nfs: mount(2): Permission denied
    mount.nfs: access denied by server while mounting localhost:/
    

    This is my export file content: / *(sec=krb5,rw,no_root_squash)

    I also followed instructions from this link: https://dcache.org/old/manuals/Book-2.3/config/cf-nfs4-gss-fhs-comments.shtml

    And this is the debug output from the server:

    2021-05-19 11:15:11.202 [] [main] INFO  w.g.n.Daemon - Share has been attached: ShareConfig{path=., alias='/', permissions=null, globPermissions=null}
    2021-05-19 11:15:11.276 [] [main] INFO  o.d.o.p.OncRpcEmbeddedPortmap - Local portmap service v4 detected
    2021-05-19 11:15:11.279 [] [main] INFO  o.d.o.r.OncRpcSvc - Registering new program [100005:3] : org.dcache.nfs.v3.MountServer@2101b44a
    2021-05-19 11:15:11.279 [] [main] INFO  o.d.o.r.OncRpcSvc - Registering new program [100003:3] : org.dcache.nfs.v3.NfsServerV3@2cc3ad05
    2021-05-19 11:15:11.279 [] [main] INFO  o.d.o.r.OncRpcSvc - Registering new program [100003:4] : org.dcache.nfs.v4.NFSServerV41@710b18a6
    2021-05-19 11:15:11.282 [] [main] DEBUG o.d.o.p.RpcbindV4Client - portmap ping
    2021-05-19 11:15:11.283 [] [main] DEBUG o.d.o.p.RpcbindV4Client - portmap unset port: prog: 100003 vers: 3, owner: eric
    2021-05-19 11:15:11.284 [] [main] DEBUG o.d.o.p.RpcbindV4Client - portmap unset port: prog: 100003 vers: 4, owner: eric
    2021-05-19 11:15:11.285 [] [main] DEBUG o.d.o.p.RpcbindV4Client - portmap unset port: prog: 100005 vers: 3, owner: eric
    2021-05-19 11:15:11.291 [] [main] DEBUG o.d.o.p.RpcbindV4Client - portmap ping
    2021-05-19 11:15:11.293 [] [main] DEBUG o.d.o.p.RpcbindV4Client - portmap set port: prog: 100003 vers: 3, netid: tcp addr: 0:0:0:0:0:0:0:0.8.1, owner: eric
    2021-05-19 11:15:11.293 [] [main] DEBUG o.d.o.p.RpcbindV4Client - portmap set port: prog: 100003 vers: 3, netid: tcp6 addr: 0:0:0:0:0:0:0:0.8.1, owner: eric
    2021-05-19 11:15:11.294 [] [main] DEBUG o.d.o.p.RpcbindV4Client - portmap set port: prog: 100003 vers: 4, netid: tcp addr: 0:0:0:0:0:0:0:0.8.1, owner: eric
    2021-05-19 11:15:11.294 [] [main] DEBUG o.d.o.p.RpcbindV4Client - portmap set port: prog: 100003 vers: 4, netid: tcp6 addr: 0:0:0:0:0:0:0:0.8.1, owner: eric
    2021-05-19 11:15:11.295 [] [main] DEBUG o.d.o.p.RpcbindV4Client - portmap set port: prog: 100005 vers: 3, netid: tcp addr: 0:0:0:0:0:0:0:0.8.1, owner: eric
    2021-05-19 11:15:11.295 [] [main] DEBUG o.d.o.p.RpcbindV4Client - portmap set port: prog: 100005 vers: 3, netid: tcp6 addr: 0:0:0:0:0:0:0:0.8.1, owner: eric
    2021-05-19 11:15:42.772 [] [nfs4j@2049(2) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=0
    2021-05-19 11:15:42.773 [] [nfs4j@2049 (0)] DEBUG o.d.n.v.NFSServerV41 - NFS PING client: /127.0.0.1:862
    2021-05-19 11:15:42.777 [] [nfs4j@2049(3) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=0
    2021-05-19 11:15:42.778 [] [nfs4j@2049 (1)] DEBUG o.d.n.v.NFSServerV41 - NFS PING client: /127.0.0.1:44662
    2021-05-19 11:15:42.779 [] [nfs4j@2049(4) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=0
    2021-05-19 11:15:42.779 [] [nfs4j@2049 (2)] DEBUG o.d.n.v.NFSServerV41 - NFS PING client: /127.0.0.1:44664
    2021-05-19 11:15:42.781 [] [nfs4j@2049(5) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=0
    2021-05-19 11:15:42.781 [] [nfs4j@2049 (3)] DEBUG o.d.n.v.NFSServerV41 - NFS PING client: /127.0.0.1:44666
    2021-05-19 11:15:42.782 [] [nfs4j@2049(6) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=0
    2021-05-19 11:15:42.783 [] [nfs4j@2049 (4)] DEBUG o.d.n.v.NFSServerV41 - NFS PING client: /127.0.0.1:44668
    2021-05-19 11:15:42.784 [] [nfs4j@2049(7) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=0
    2021-05-19 11:15:42.785 [] [nfs4j@2049 (5)] DEBUG o.d.n.v.NFSServerV41 - NFS PING client: /127.0.0.1:44670
    2021-05-19 11:15:42.786 [] [nfs4j@2049(8) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=0
    2021-05-19 11:15:42.787 [] [nfs4j@2049 (6)] DEBUG o.d.n.v.NFSServerV41 - NFS PING client: /127.0.0.1:44672
    2021-05-19 11:15:42.788 [] [nfs4j@2049(9) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=0
    2021-05-19 11:15:42.789 [] [nfs4j@2049 (7)] DEBUG o.d.n.v.NFSServerV41 - NFS PING client: /127.0.0.1:44674
    2021-05-19 11:15:42.790 [] [nfs4j@2049(10) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=0
    2021-05-19 11:15:42.791 [] [nfs4j@2049 (8)] DEBUG o.d.n.v.NFSServerV41 - NFS PING client: /127.0.0.1:44676
    2021-05-19 11:15:42.792 [] [nfs4j@2049(2) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=1
    2021-05-19 11:15:42.794 [/127.0.0.1:862] [nfs4j@2049 (9)] DEBUG o.d.n.v.NFSServerV41 - NFS COMPOUND client: /127.0.0.1:862, tag: []
    2021-05-19 11:15:42.802 [/127.0.0.1:862] [nfs4j@2049 (9)] DEBUG o.d.n.v.OperationEXCHANGE_ID - Case 1: New Owner ID
    2021-05-19 11:15:42.803 [/127.0.0.1:862] [nfs4j@2049 (9)] DEBUG o.d.n.v.NFS4Client - New client: /127.0.0.1:862:4c696e7578204e465376342e3120736572766572@6963943046991839233:v4.1
    2021-05-19 11:15:42.806 [/127.0.0.1:862] [nfs4j@2049 (9)] DEBUG o.d.utils.Cache - Adding new cache entry: key = [6963943046991839233], value = [/127.0.0.1:862:4c696e7578204e465376342e3120736572766572@6963943046991839233:v4.1]
    2021-05-19 11:15:42.808 [/127.0.0.1:862] [nfs4j@2049 (9)] DEBUG o.d.n.v.NFSServerV41 - OP: [] status: 0
    2021-05-19 11:15:42.809 [] [nfs4j@2049(2) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=1
    2021-05-19 11:15:42.810 [/127.0.0.1:862] [nfs4j@2049 (10)] DEBUG o.d.n.v.NFSServerV41 - NFS COMPOUND client: /127.0.0.1:862, tag: []
    2021-05-19 11:15:42.811 [/127.0.0.1:862] [nfs4j@2049 (10)] DEBUG o.d.n.v.OperationEXCHANGE_ID - case 4: Replacement of Unconfirmed Record
    2021-05-19 11:15:42.811 [/127.0.0.1:862] [nfs4j@2049 (10)] DEBUG o.d.utils.Cache - Removing entry: active = [true] key = [6963943046991839233], value = [/127.0.0.1:862:4c696e7578204e465376342e3120736572766572@6963943046991839233:v4.1]
    2021-05-19 11:15:42.811 [/127.0.0.1:862] [nfs4j@2049 (10)] DEBUG o.d.n.v.NFS4Client - New client: /127.0.0.1:862:4c696e7578204e465376342e3120736572766572@6963943046991839234:v4.1
    2021-05-19 11:15:42.811 [/127.0.0.1:862] [nfs4j@2049 (10)] DEBUG o.d.utils.Cache - Adding new cache entry: key = [6963943046991839234], value = [/127.0.0.1:862:4c696e7578204e465376342e3120736572766572@6963943046991839234:v4.1]
    2021-05-19 11:15:42.811 [/127.0.0.1:862] [nfs4j@2049 (10)] DEBUG o.d.n.v.NFSServerV41 - OP: [] status: 0
    2021-05-19 11:15:42.811 [] [nfs4j@2049(2) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=1
    2021-05-19 11:15:42.812 [/127.0.0.1:862] [nfs4j@2049 (11)] DEBUG o.d.n.v.NFSServerV41 - NFS COMPOUND client: /127.0.0.1:862, tag: []
    2021-05-19 11:15:42.813 [/127.0.0.1:862] [nfs4j@2049 (11)] DEBUG o.d.utils.Cache - Cache hits for key = [6963943046991839234], value = [/127.0.0.1:862:4c696e7578204e465376342e3120736572766572@6963943046991839234:v4.1]
    2021-05-19 11:15:42.813 [/127.0.0.1:862] [nfs4j@2049 (11)] DEBUG o.d.n.v.NFS4Client - session for sequience: 1
    2021-05-19 11:15:42.814 [/127.0.0.1:862] [nfs4j@2049 (11)] DEBUG o.d.n.v.NFS4Client - set client confirmed
    2021-05-19 11:15:42.814 [/127.0.0.1:862] [nfs4j@2049 (11)] DEBUG o.d.n.v.OperationCREATE_SESSION - adding new session [/127.0.0.1:862 : 60a4e54e000000020000000000000001]
    2021-05-19 11:15:42.815 [/127.0.0.1:862] [nfs4j@2049 (11)] DEBUG o.d.n.v.NFSServerV41 - OP: [] status: 0
    2021-05-19 11:15:42.816 [] [nfs4j@2049(2) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=1
    2021-05-19 11:15:42.816 [/127.0.0.1:862] [nfs4j@2049 (12)] DEBUG o.d.n.v.NFSServerV41 - NFS COMPOUND client: /127.0.0.1:862, tag: []
    2021-05-19 11:15:42.817 [/127.0.0.1:862] [nfs4j@2049 (12)] DEBUG o.d.utils.Cache - Cache hits for key = [6963943046991839234], value = [/127.0.0.1:862:4c696e7578204e465376342e3120736572766572@6963943046991839234:v4.1]
    2021-05-19 11:15:42.818 [/127.0.0.1:862] [nfs4j@2049 (12)] DEBUG o.d.n.v.NFSServerV41 - OP: [] status: 0
    2021-05-19 11:15:42.819 [] [nfs4j@2049(11) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=0
    2021-05-19 11:15:42.819 [] [nfs4j@2049 (13)] DEBUG o.d.n.v.NFSServerV41 - NFS PING client: /127.0.0.1:44678
    2021-05-19 11:15:42.820 [] [nfs4j@2049(12) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=0
    2021-05-19 11:15:42.821 [] [nfs4j@2049 (14)] DEBUG o.d.n.v.NFSServerV41 - NFS PING client: /127.0.0.1:44680
    2021-05-19 11:15:42.854 [] [nfs4j@2049(2) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=1
    2021-05-19 11:15:42.855 [/127.0.0.1:862] [nfs4j@2049 (15)] DEBUG o.d.n.v.NFSServerV41 - NFS COMPOUND client: /127.0.0.1:862, tag: []
    2021-05-19 11:15:42.856 [/127.0.0.1:862] [nfs4j@2049 (15)] DEBUG o.d.utils.Cache - Cache hits for key = [6963943046991839234], value = [/127.0.0.1:862:4c696e7578204e465376342e3120736572766572@6963943046991839234:v4.1]
    2021-05-19 11:15:42.856 [/127.0.0.1:862] [nfs4j@2049 (15)] DEBUG o.d.n.v.NFSServerV41 - OP: [] status: 0
    2021-05-19 11:15:42.857 [] [nfs4j@2049(2) SelectorRunner] DEBUG o.d.o.r.RpcDispatcher - processing request RPCv2 call: program=100003, version=4, procedure=1
    2021-05-19 11:15:42.858 [/127.0.0.1:862] [nfs4j@2049 (16)] DEBUG o.d.n.v.NFSServerV41 - NFS COMPOUND client: /127.0.0.1:862, tag: []
    2021-05-19 11:15:42.858 [/127.0.0.1:862] [nfs4j@2049 (16)] DEBUG o.d.utils.Cache - Cache hits for key = [6963943046991839234], value = [/127.0.0.1:862:4c696e7578204e465376342e3120736572766572@6963943046991839234:v4.1]
    2021-05-19 11:15:42.859 [/127.0.0.1:862] [nfs4j@2049 (16)] DEBUG o.d.utils.Cache - Removing entry: active = [true] key = [6963943046991839234], value = [/127.0.0.1:862:4c696e7578204e465376342e3120736572766572@6963943046991839234:v4.1]
    2021-05-19 11:15:42.859 [/127.0.0.1:862] [nfs4j@2049 (16)] DEBUG o.d.n.v.NFSServerV41 - OP: [] status: 0
    

    Must be something stupid but I'm stuck on it. What could I have missed ?

    Thanks

    question 
    opened by evial 8
  • Can nfs4j library be used for NFS Client implementation for 4 and 4.1 versions on prod?

    Can nfs4j library be used for NFS Client implementation for 4 and 4.1 versions on prod?

    We want to use NFS protocol to directly connect to the NFS share for accessing the files without mounting,

    so, Can nfs4j library be used for NFS Client implementation for 4 and 4.1 versions on production??

    If can't, do we have some other alterative solutions for the same which supports version 4 and 4.1?

    question 
    opened by ajaysethi8789 1
  • seqid mismatch during CLOSE

    seqid mismatch during CLOSE

    When multiple OPEN and CLOSE operations are interleaved, it's looking like the wrong seqid is used for the test: https://github.com/dCache/nfs4j/blob/b4af4c33051c3d150ed94cbb503730c977fee310/core/src/main/java/org/dcache/nfs/v4/OperationCLOSE.java#L58

    Before this test, we added a log to check the different values: _log.info("[contextCurrentStateId = " + context.currentStateid() + " , _args.opclose.open_stateid = " + _args.opclose.open_stateid + " , nfsState.stateid() = " + nfsState.stateid() + " , stateid = " + stateid + "]");

    The seqid returned by nfsState.stateid() seems to be the one from the last OPEN operation, so the test is failing.

    Here is the capture and the log :

    2020-11-23 22:32:53.007 [minikube.mshome.net/172.24.45.130:735] [nfs4j@2049 (6)] INFO  o.d.n.v.OperationCLOSE - [contextCurrentStateId = [000000000000000000000000, seq: 0] , _args.opclose.open_stateid = [5fbc217e000000020000007a, seq: 1] , nfsState.stateid() = [5fbc217e000000020000007a, seq: 1] , stateid = [5fbc217e000000020000007a, seq: 1]]
    2020-11-23 22:32:53.010 [minikube.mshome.net/172.24.45.130:735] [nfs4j@2049 (3)] INFO  o.d.n.v.OperationCLOSE - [contextCurrentStateId = [000000000000000000000000, seq: 0] , _args.opclose.open_stateid = [5fbc217e000000020000007b, seq: 2] , nfsState.stateid() = [5fbc217e000000020000007b, seq: 3] , stateid = [5fbc217e000000020000007b, seq: 2]]
    2020-11-23 22:32:53.011 [minikube.mshome.net/172.24.45.130:735] [nfs4j@2049 (10)] INFO  o.d.n.v.OperationCLOSE - [contextCurrentStateId = [000000000000000000000000, seq: 0] , _args.opclose.open_stateid = [5fbc217e000000020000007b, seq: 5] , nfsState.stateid() = [5fbc217e000000020000007b, seq: 7] , stateid = [5fbc217e000000020000007b, seq: 5]]
    2020-11-23 22:32:53.012 [minikube.mshome.net/172.24.45.130:735] [nfs4j@2049 (12)] INFO  o.d.n.v.OperationCLOSE - [contextCurrentStateId = [000000000000000000000000, seq: 0] , _args.opclose.open_stateid = [5fbc217e000000020000007b, seq: 7] , nfsState.stateid() = [5fbc217e000000020000007b, seq: 7] , stateid = [5fbc217e000000020000007b, seq: 7]]
    2020-11-23 22:32:53.012 [minikube.mshome.net/172.24.45.130:735] [nfs4j@2049 (14)] INFO  o.d.n.v.OperationCLOSE - [contextCurrentStateId = [000000000000000000000000, seq: 0] , _args.opclose.open_stateid = [5fbc217e000000020000007b, seq: 7] , nfsState.stateid() = [5fbc217e000000020000007b, seq: 8] , stateid = [5fbc217e000000020000007b, seq: 7]]
    2020-11-23 22:32:53.013 [minikube.mshome.net/172.24.45.130:735] [nfs4j@2049 (22)] INFO  o.d.n.v.OperationCLOSE - [contextCurrentStateId = [000000000000000000000000, seq: 0] , _args.opclose.open_stateid = [5fbc217e000000020000007b, seq: 8] , nfsState.stateid() = [5fbc217e000000020000007b, seq: 8] , stateid = [5fbc217e000000020000007b, seq: 8]]
    2020-11-23 22:32:53.013 [minikube.mshome.net/172.24.45.130:735] [nfs4j@2049 (13)] INFO  o.d.n.v.OperationCLOSE - [contextCurrentStateId = [000000000000000000000000, seq: 0] , _args.opclose.open_stateid = [5fbc217e000000020000007b, seq: 8] , nfsState.stateid() = [5fbc217e000000020000007b, seq: 8] , stateid = [5fbc217e000000020000007b, seq: 8]]
    2020-11-23 22:32:53.013 [minikube.mshome.net/172.24.45.130:735] [nfs4j@2049 (13)] INFO  o.d.n.v.AbstractOperationExecutor - Lost client state: op: CLOSE : NFS4ERR_BAD_STATEID : State not known to the client: [5fbc217e000000020000007b, seq: 8]
    

    bug-nfs-multiple-open-close.zip

    In the log, you'll notice three times where the seqid isn't the one expected. And in the capture, we can see that it's the seqid of the previous OPEN. The NFS client is a Linux VM (minikube).

    info needed rfc compiance 
    opened by sraillard 3
Releases(nfs4j-0.24.0)
  • nfs4j-0.24.0(Oct 28, 2022)

    New feature release with highlights:

    • better throughput by NFSv4.1 session processing
    • dependency on Guava 31
    • API change to use java.time.xx when applicable
    • exposed open files with NFSv4.1

    Full changelog for nfs4j-0.23.0..nfs4j-0.24.0 [06cebe9e] [maven-release-plugin] prepare for next development iteration [a045ca7c] libs: migrate to hazelcast-4.1.8 [c053eb3e] util: ensure that cache entry lifetime is bigger than idle time [f6706b5f] util: use StampetLock to improve cache efficiency [49cf00cd] benchmarks: add benchmark for org.dcache.nfs.util.Cache [006b2dce] test: handle float point number format differences in DE and US [d53c02ea] benchmarks: add FileTracker related benchmark [cd924aaa] nfs42: fix NFSERR_BAD_STATEID for server side copy with locks [23aaab51] libs: use up-to-date guava-31 [146b6c28] test: handle StatTest.testToString time format differences in different locale [e3ec271a] Fix typo in error message. [bc28fdb6] The same typo also exists here. [91708e30] nfs4: expose open files known to FileTracker [42473483] nfs: use Comparator.comparing unstead of guava's Ordering [225dcf12] nfs: propagate NFS errors of server-side-copy to the client [874b8168] nfs4: update state handler to use java.time.Clock [88ecc6db] test: make ManualClock accessible to other time-based tests [8668e280] test: add test to check NFSClient lease expiration [8a97adf6] [maven-release-plugin] prepare branch 0.24 [59f76a6f] [maven-release-plugin] prepare release nfs4j-0.24.0

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.23.0(Jan 18, 2022)

    Feature release with the following highlights:

    • better nfs v4.x performance of state validation in highly concurrent environment
    • use of oncrpc-3.2.0
    • support of file creation attribute (see: https://github.com/dCache/nfs4j/blob/master/API-changes.md#023)
    • simplification of various attribute types
    • initial support for server-side-copy

    Changelog for nfs4j-0.22.0..nfs4j-0.23.0 * [b4af4c33] [maven-release-plugin] prepare for next development iteration * [ac82ca1b] nfs4: fix typo in comments * [8ede287c] nfsv4.1: resulting notification bitmap should match requests length * [6580dff5] docs: added rfc7862 (NFSv4.2) * [9c320994] nfs: remove throws from HostNameMatcher constructor * [ea6f71a3] nfs3: fix readdir entry size calculation * [44fa34cd] nfs4: improve state handler concurrency * [207eeb3a] pom: enforce https when accessing maven repos * [521abf66] nfsv41: remove unused Layouts class * [1ec8725e] nfs4-client: show layout types supported by the server * [d2ed5a55] src: fix formatting of AttributeMap * [11b19a6d] nfs4-client: CompoundBuilder#withGetdeviceinfo should accept layout type * [2056c670] nfsv3: simplify size3 object * [235e266d] nfsv3: simplify uid3, gid3 objects * [1ec32c54] nfsv3: merge NameUtils and HimeraNfsUtils into single class * [8772820c] docs: fix maven repo link in README.md * [de0a8d4c] nfsv3: remove unnecessary call of Inode#toString for logging * [b1956bee] src: don't use guava's Files#asCharSink * [91b31e05] nfsv42: initial support for intra-server copy * [4c7e1fec] nfsv42: add copy-offload notification collback to the back channel * [fde87013] nfs4: include ACE flags in toString method * [0d9f5ff4] nfs4: simplify aceflag4 acemask4 acetype4 classes * [dfd3ec8b] client: fix desired file attributes propagation on create * [3956d039] Allow virtual filesystem to check user subject. * [1e0a4bd6] libs use oncrpc-3.2.0 * [7d670d7e] vfs: expose files creation (birth) time * [55c7b2db] vfs: fix commit 7d670d7e * [b23268d4] tests: add Stat#set/getBtime test * [b12dbeb8] vfs: add javadoc to org.dcache.nfs.vfs.Stat * [67da9322] vfs: drop Stat#get/setFileId methods * [20968d28] tests: fix spelling of methods in StatTest * [55410441] nfsv42: update OperationCOPY to support async copy * [7a091bad] src: dont use guava's Sets * [4a38d558] [maven-release-plugin] prepare branch 0.23 * [899d43dc] [maven-release-plugin] prepare release nfs4j-0.23.0

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.22.2(Jan 6, 2021)

    Minor bugfix release. Highlights:

    • Fix readdir reply size for NFSv3

    Changelog for nfs4j-0.22.1..nfs4j-0.22.2 * [f3491333] [maven-release-plugin] prepare for next development iteration * [3e379c6d] nfs3: fix readdir entry size calculation * [e26619fa] [maven-release-plugin] prepare release nfs4j-0.22.2

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.21.1(Jan 6, 2021)

    Minor release. Highlight:

    • Fix readdir reply size for NFSv3

    Changelog for nfs4j-0.21.0..nfs4j-0.21.1 * [7ff6d9db] [maven-release-plugin] prepare for next development iteration * [8c6d5b8f] nfs4: minor version used by callback must by in sync with client * [6e094d73] nfs3: fix readdir entry size calculation * [348e913d] [maven-release-plugin] prepare release nfs4j-0.21.1

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.22.1(Dec 11, 2020)

    Fix compatibility with linux kernel 5.10

    Changelog for nfs4j-0.22.0..nfs4j-0.22.1 * [846af415] [maven-release-plugin] prepare for next development iteration * [f1626dc7] nfsv4.1: resulting notification bitmap should match requests length * [0f0c64fa] [maven-release-plugin] prepare release nfs4j-0.22.1

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.22.0(Oct 22, 2020)

    New major version with highlights:

    • use of oncrpc4j-3.1.0, which drops dependency on license incompatible dcache-auth
    • nfs-over-tls
    • configurable IO buffer size for flexfile layout
    • support for 'secure/insecure' export option

    Breaking change:

    the dependency on package org.dcache.auth is removed. The Pricipals and methods provided by the module should be migrated to use org.dcache.nfs.util.UnixSubjects.

    Changelog for nfs4j-0.21.0..HEAD * [8ce08c55] [maven-release-plugin] prepare for next development iteration * [8f886a8c] pom: require java11 * [fd1561c2] README: describe dependency on java11 * [40ef1501] core: remove deprecated method CompoundContextBuilder#withExportFile * [0659601a] docs: describe remove methods in 0.22 * [680e2fc4] dlm: fix object to key calculation mismatch * [483a418d] dlm: use java's own Base64 encoder instead of Guava. * [d80f41ad] vfs: use List#copyOf instead of Guava's ImmutableList * [7525e8e2] vfs-test: hard link should return the same inode * [5f2e0cd8] vfs: improve VfsCache test coverage * [0c9de0ae] vfs: fix javadoc of VfsCache#invalidateStatCache * [1bdae07d] lockmanager: use JDK's Base64 to generate String form key from bytes * [93881f13] nfs4: improve spec compliance of LOCKT operation * [417048fd] nfs4: fix client id validation of LOCKT operation * [5f38d46b] nfs4: minor version used by callback must by in sync with client * [c131ddde] nfsv41: fix race condition during multiple callbacks * [20a91599] nfs4: add javadoc to NFSv41Session constructor * [63bfae29] nfs4-client: bump readdir request size * [cd7aa48f] nfs4: process file handle in attribute map * [e977e574] nfs4: pull-out client session slot handling into a dedicated class * [e3be4fb6] nfs-client: add sendCompoundInSession * [c6ffcd94] nfs-client: make client is pseudo-unique * [311f34fe] exports: add support for secure/insecure export options * [cf8ea4a5] nfs-client: add a simple retry loop for transient errors * [aeccd6f0] nfs41: simplify try-catch-return logic * [a456ce2c] exports: fix FsExport#toString output * [ead915d9] build(deps): bump junit from 4.12 to 4.13.1 * [89b09abb] flexfiles: make rsize/wsize configurable * [c9aedca6] nfs4: use java8 stream to filter first Principal on exchange_id * [e84212e3] nfs: remote utility class to extract current user * [b1320d97] nfs4: remove NfsLoginService interface * [ed9a5783] pol: update to oncrpc4j-3.1.0

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.21.0(Jul 7, 2020)

    Major version update with highlights:

    • minimal nfsv4.2 implementation
    • BerkeleyDBClientStore can be configure through properties
    • improved performance of ACCESS call
    • improved throughput of parallel file opens

    Changelog for nfs4j-0.20.0...nfs4j-0.21.0 * [36d3e3e9] [maven-release-plugin] prepare for next development iteration * [16794760] [maven-release-plugin] prepare release nfs4j-0.20.0 * [b2fd4a1b] test: use StandardCharsets#US_ASCII instead of instantiating one * [0b38172b] vfs: add xattr access modes to the mask * [67f6c898] nfs4: fix en/decode of SETXATTR4res * [2e58ea52] nfs4: fix en/decode of REMOVEXATTR4res * [95db0e59] libs: use jline3 * [a8c0ec1b] vfs: add missing xattr related methods to ForwardingFileSystem * [ad9c203b] nfsv4-client: convert if-else chain into switch statement * [6017e812] nfsv4-client: single point to exit command loop * [b0443625] nfs4: don't expose NFSv4.2 attributes to earlier versions of the clients * [05f51790] nfs42: add auto-generated code of NFSv4.2 data types * [5a36149f] nfs42: implement minimal nfs v4.2 server * [5adb2b63] nfs4: add constructor that accepts db properties to BerkeleyDBClientStore * [3b8d58d2] nfs: make spring dependency scope provided * [59550a9c] nfs4: simplify stateid4 class * [ae9e3d48] Expose case sensitivity settings * [15d38f26] Reduce number of callbacks when checking access flags. (#89) * [90b82cb5] Extract interface for client cache to allow custom implementations. See #37 for reasons of possible other lax implementations with non expiring client leases. * [872be90c] libs: bump guava from 20.0 to 24.1.1-jre * [397b95b7] file-tracker: fix typo in comments * [d3b3cd75] nfs4: stop using deprecated guava API in tests * [c798bc1a] nfs4: use ConcurrentHashMap for open file tracking * [cdc1071b] nfs4: don't use InetAddresses.forString with catch block to validate IP address * [e1146bd1] docs: fix typo in README * [1de61da6] vfs: add IO read/write methods that accept ByteBuffer * [c37d8df2] docs: describe recent API changes * [53e8c140] docs: describe API changes * [34156a6e] src: move nfs4 client code into basic-client module * [fe51855b] nfsv4: make NO_TAG strng constant static * [f7c14ebb] [maven-release-plugin] prepare branch 0.21 * [d72de147] [maven-release-plugin] prepare release nfs4j-0.21.0

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.20.2(Apr 6, 2020)

    Minor bugfix for protocol level compliance with older clients

    Changelog for nfs4j-0.20.1...nfs4j-0.20.2 * [d8c3de42] [maven-release-plugin] prepare for next development iteration * [454fd8a8] nfs4: don't expose NFSv4.2 attributes to earlier versions of the clients * [40422dfb] [maven-release-plugin] prepare release nfs4j-0.20.2

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.20.1(Mar 20, 2020)

    Minor bug-fix to address extended attribute related issues

    Changelog for nfs4j-0.20.0...nfs4j-0.20.1 * [7ae6e80e] [maven-release-plugin] prepare for next development iteration * [431b16c9] vfs: add xattr access modes to the mask * [ee839d41] nfs4: fix en/decode of SETXATTR4res * [3ea96e00] nfs4: fix en/decode of REMOVEXATTR4res * [d8abb6de] vfs: add missing xattr related methods to ForwardingFileSystem * [19127bf7] [maven-release-plugin] prepare release nfs4j-0.20.1

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.20.0(Feb 27, 2020)

    major release with highlights:

    • xattr support
    • better control over state handler initialization
    • package rename org.dcache.utils => org.dcache.nfs.utils

    Full change log with 0.19.0:

    • [dbf89f36] [maven-release-plugin] prepare for next development iteration
    • [efeaa868] docs: describe how to use custom statistics module
    • [63249596] docs: point to latest release
    • [8aed1f0f] pom: enforce utf-8 encoding
    • [0d385e48] nfs4: initialize newly created state ids with sequence zero
    • [56387f78] pom: add profile to sign artifacts
    • [df1a80fe] README.md: add latest release badge
    • [93698a96] test: fix invalid attribute name in DummyFs#setattr
    • [5af45c19] test: fix unix mode to Set conversion
    • [52d1fdfd] test: enforce default file permission for DummyVFS
    • [fa8ebf93] docs: add rfc8276.txt
    • [2b803c0d] nfs: define error codes defined in rfc8276 (xattr)
    • [1c80fb61] vfs: introduce get/set/list/removeXattr methods
    • [6eaebcd9] nfs4: add initial support support_xattr attribute
    • [03c7147c] nfs4: add xattr related operation stubs
    • [eedb5e65] nfsv4: sort constants defined in nfs4_prot.java
    • [5b41bd7b] vfs: invalidate stat cache on setxattr and removexattr
    • [a1f08100] nfs: add initial implementation of xattr support
    • [7b3f4d13] unit: fix NPE in SETXATTR test
    • [36724e81] mountd: fix client address type mismatch on unmount
    • [88180c95] flexfiles: remove Serializable marker from autogenerated classes
    • [7e7bee6b] pom: filter out naming related Spotbugs issues
    • [dfbb6721] src: rename org.dcache.utils => org.dcache.nfs.utils
    • [20e67354] nfs4: don't access constant via instance reference.
    • [06151918] nfs4: make extended NFSv4StateHandler constructor public
    • [540ec29b] mount: add missing message placeholder in log a statement
    • [248c8779] nfs4: update NFSv4StateHandler to store lease time as seconds
    • [1cf016b0] nfs4: getattr should return lease time configured on state handler
    • [5fbece3b] nfs: simplify stream usage
    • [3d66ffff] [maven-release-plugin] prepare branch 0.20
    • [16794760] [maven-release-plugin] prepare release nfs4j-0.20.0
    • [7ae6e80e] [maven-release-plugin] prepare for next development iteration
    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.19.1(Jul 30, 2019)

    Minor bugfix release.

    Changelog for nfs4j-0.19.0..nfs4j-0.19.1 * [641a85ca] [maven-release-plugin] prepare for next development iteration * [0ccc600c] nfs4: initialize newly created state ids with sequence zero * [70342b51] pom: add profile to sign artifacts * [734e0e92] [maven-release-plugin] prepare release nfs4j-0.19.1

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.19.0(Jul 17, 2019)

    New major release with API enhancement. The highlights:

    • device manager new API
    • interface for non file based export tables
    • improved code coverage
    • removed built-in request statistics

    Changelog for nfs4j-0.18.0..nfs4j-0.19.0 * [d5b8694a] [maven-release-plugin] prepare for next development iteration * [20f598a4] README: point to the latest release * [7c7714d5] nfs4: check for invalid attribute prior VERIFY/NFERIVY * [0a436290] nlm: add throughput test for lock manager * [9a8f6451] nfs: fix export entry ordering * [904714e2] nfs: introduce export table interface * [7a075965] nfs: add hashCode and equals to FsExport and InerAddressMatcher * [d541ec64] nfsv41: LayoutDriver#acceptLayoutReturnData should accept compound context * [5712ae66] benchmarks: add benchmark for ip address matcher * [ad1afddc] nfs4: fix export table initialization in NFSServerV41#Builder * [59edb797] libs: use mockito-core 2.28 * [13656bd8] libs: use hamcrest 2.1 * [3156e5f7] nfsv4: add test for readdir behind last cookie * [69f39ae0] nfs4: add LAYOUTSTATS and LAYOUTERROR operations stubs * [99c0c66d] test: use jimfs-based file system implementation * [45656e91] test: add pseudofs test to ensure ownership inheritance * [e2a9e086] pseudofs: fix directory listing with non zero cookie * [c66e099d] vfs: add unit test for validate PseudoFS * [43a3c017] test: improve test coverage of PseudoFs * [ce23357d] vfs: fix typo in Inode#isPseudoInode method name * [04a869d2] Modified V3 server to use new export interface * [143ed0ec] Modified MountServer to use new export interface * [33b8f44b] Removed unused imports * [77058175] spring: add NFSServerV41Factory#setExportTable method * [096b49fe] nfs4: introduce AbstractRequestExecutor * [0bad4dde] nfs4.1: do not use string concatenation to build log entry * [afe84fe4] nfs4.1: re-factor NFSv41DeviceManager interface to accept raw XDR args * [2da8614f] spring: match setter method name to the argument type * [5df7ed9a] pom: enable spotbugs plugin * [1a383866] nfs41: introduce NFSv41DeviceManager#layoutCommit method * [9d9a9300] nfs-client: send layoutcommit if required * [c37b7168] test: add OperationLAYOUTCOMMITTest * [e358afcb] tests: fix file system object type in DummyVFS * [78c1d752] test: improve open operation test coverage * [704bc6cd] test: improve layoutcommit test coverage * [9e42f6ec] nfs4: fix javadoc of AbstractNFSv4Operation * [cb0eaf97] nfsv41: simplify io_info4 - use long instead of uint64_t * [603c5fc5] pnfs: add layoutStats and layoutError methods to device manager * [0fc77645] doc: fix markdown formatting * [3cf53552] docs: add API-changes file to describe migration path * [7a1603e5] [maven-release-plugin] prepare branch 0.19 * [1f1f04f3] [maven-release-plugin] prepare release nfs4j-0.19.0

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.18.2(Apr 1, 2019)

    Minor bugfix of export entry ordering

    Changelog for nfs4j-0.18.1..nfs4j-0.18.2 * [1ac2d258] [maven-release-plugin] prepare for next development iteration * [2cb66ff9] nfs: fix export entry ordering * [eaa0c38f] [maven-release-plugin] prepare release nfs4j-0.18.2

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.17.11(Apr 1, 2019)

    Minor bugfix release of export entry ordering

    Changelog for nfs4j-0.17.10..nfs4j-0.17.11 * [a6e3d801] [maven-release-plugin] prepare for next development iteration * [cea96d55] nfs: fix export entry ordering * [6a21c53c] [maven-release-plugin] prepare release nfs4j-0.17.11

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.18.1(Feb 8, 2019)

    Minor fix to keep pynfs test suite happy

    Changelog for nfs4j-0.18.0..nfs4j-0.18.1 * [638910f3] [maven-release-plugin] prepare for next development iteration * [3ad8698e] nfs4: check for invalid attribute prior VERIFY/NFERIVY * [b89a2006] [maven-release-plugin] prepare release nfs4j-0.18.1

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.18.0(Feb 7, 2019)

    Release highlights:

    • client record store interface
    • BerkeleyDB-based client record store
    • improved NFSv4.0 compatibility
    • mound compatibility improvements under windows

    Changelog for nfs4j-0.17.0..nfs4j-0.18.0 * [cde77908] [maven-release-plugin] prepare for next development iteration * [f8de2eeb] nfs: fix write in embedded client * [3c7164a1] nfsv4: fix regression in read of non-pnfs files * [6c295d64] nfs: add v4.2 operation numbers * [51f6fe9d] nfs: add error codes defined in nfsv4.2 (rfc7862) * [baf8dbff] README: point to latest release * [d40d475b] nfs: fix ABBA dead lock during dead client cleanup * [6834b8a7] nfs: introduce NFS4Client#getOwnerId * [7aee3bc6] nfs4: update READDIR to return error attribute if requested * [74b0c0d1] test: refactor READDIR unit test to reduce code duplication * [2fed2ea7] nfs4: change method hasGracePeriodExpired to isGracePeriod * [4442c284] src: update reference to flex file layout rfc * [0af699f4] libs: update to oncrpc-3.0.2 * [fd55c0aa] pseudofs: ignore owner change to the same value * [8989a699] dlm: configure hazelcast to listen only in localhost during tests * [7c93dbab] vfs: do not traverse all elements when building directory listing * [5458aa72] src: use java.util.function.Predicate instead of guava * [7fc7a590] libs: use oncrpc4j-3.0.3 * [863bd661] nfs41: fix condition when NFS4ERR_GRACE returned on OPEN * [5ee64bd2] nfs4: junit: shutdown state handler after each test * [4613de23] nfs41: introduce ClientRecoveryStore interface * [d16767fa] nfs41: add ClientStore#reclaimComplete method * [786f0703] nfs41: introduce CacheElement#peekObject method * [cc674c2f] nfs41: do not run dead client cleanup thread inside client cache * [254ee606] src: re-arrange code to have constructors before methods * [fc4422e2] nfsv41: close client store after all other activities are stopped * [608bd98d] nfs41: remove client record from recovery store for expired clients * [0b56a30a] flexfiles: add missing layout flags * [8060aa5c] flexfiles: do not hard code layout flags * [aaf7d2fd] nfs41: add BerkeleyDB-based client record store * [9d1d4fb3] nfs4: ensure that SETATTR4res always has attribute bitmap * [9ed3f897] pom: enable jacoco code coverage * [205bd730] nfs4: do not initialize attrsset in OperationSETATTR * [4391f3e6] utils: update Cache#cleanUp to use Clock#millis * [39df04cb] nfs41: update ClientRecoveryStore to extend java.io.Closeable * [6dc4032c] nfs41: add device delete notification * [91763cdf] nfs4: NFSv4StateHandler#shutdown should declare to throw IOException * [2d7026d9] nfs41: fix layoutget usage with current stateid * [031c5687] nfs4: do not expect reclaim from v4.0 clients * [07d040b7] nfs4: use open-owner clientid if to identify nfs client * [613f6482] nfs: remove exception declaration from constructor * [e9e94086] test: update NfsTestUtils#execute to process full compound * [6b164eaf] nfs4: check for offset+length overflow by LOCKU * [07446f05] nfs4: op CLOSE/WRITE should update lease time only for v4.0 clients * [949db498] nfs4: drop log level for expired/bad client/session/state * [ed1f97a3] nfs4: remove dead code * [1ec62068] test: add client lease update tests on operation READ/WRITE * [2a43633a] test: add tests for current/saved filehandle/stateid * [c4e1219f] test: improve test coverage of NFSv4StateHandler * [7f9589c3] nfs4: set response committed value properly in op COMMIT based on VFS WriteResult return value * [985b50e2] nlm: improve concurrency of simple lock manager * [92e12da3] test: improve test coverage of lock manager * [805c7b46] nlm: use ConcurrentHashMap to store the locks * [0d12f456] Fixed inability to mount on Windows * [f6dc55dc] Removed extra semicolons * [6cc92478] Testing alternative method * [c7bb4a6d] Use Path instead of File to trim relative paths * [5cd20d8e] [maven-release-plugin] prepare branch 0.18 * [48ab71a8] [maven-release-plugin] prepare release nfs4j-0.18.0

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.17.10(Jan 22, 2019)

  • nfs4j-0.17.9(Jan 22, 2019)

    Highlights:

    • improve concurrency of simple lock manager

    Changelog for nfs4j-0.17.8..nfs4j-0.17.9 * [a7107007] [maven-release-plugin] prepare for next development iteration * [4e588c62] nlm: improve concurrency of simple lock manager * [46a67cd1] nlm: use ConcurrentHashMap to store the locks * [cb6bcb0e] [maven-release-plugin] prepare release nfs4j-0.17.9

    Source code(tar.gz)
    Source code(zip)
  • nfs4j-0.17.8(Jan 22, 2019)

    Highlights:

    • current state id support for layoutget

    Changelog for nfs4j-0.17.7..nfs4j-0.17.8 * [8d349333] [maven-release-plugin] prepare for next development iteration * [2dde7fd4] nfs41: add device delete notification * [cac5cf5b] nfs41: fix layoutget usage with current stateid * [0fa114c9] [maven-release-plugin] prepare release nfs4j-0.17.8

    Source code(tar.gz)
    Source code(zip)
Owner
dCache Project
dCache Project
An Open-Source repository 🌎 that contains all the Data Structures and Algorithms concepts and their implementation, programming questions and Interview questions

An Open-Source repository ?? that contains all the Data Structures and Algorithms concepts and their implementation, programming questions and Interview questions. The main aim of this repository is to help students who are learning Data Structures and Algorithms or preparing for an interview.

Aritra Das 19 Dec 29, 2022
Java implementation of Beacon Chain for Ethereum 2.0, and its Backend API and full Infrastructure.

hailong Implementation of the Ethereum 2.0 Beacon Chain. Based on the (evolving) specification. Build Instructions Install Prerequisites 1) Java 11 Ub

我是高天才! 14 Feb 6, 2022
Curated Collection of all Low level design Questions and implementation asked in major Tech companies , Get yourself prepared for the LLD round and ace the interview.

Low level Design / Machine Coding Question Collections What is Machine Coding Round ? Machine Coding Round has become very popular interview round in

Kumaran gowthaman 619 Dec 31, 2022
Daily mail subscription implementation using Java Spring-boot and Quartz Scheduler

Daily Mail Subscription Service POC Implemented using Java Spring-boot and Quartz Scheduler Working Application Exposing 3 endpoints /subscription/cre

null 16 Jun 3, 2022
Search API with spelling correction using ngram-index algorithm: implementation using Java Spring-boot and MySQL ngram full text search index

Search API to handle Spelling-Corrections Based on N-gram index algorithm: using MySQL Ngram Full-Text Parser Sample Screen-Recording Screen.Recording

Hardik Singh Behl 5 Dec 4, 2021
The Java implementation of "A Survey of Trajectory Distance Measures and Performance Evaluation". VLDBJ 2020

A Survey of Trajectory Distance Measures and Performance Evaluation The Java implementation of the following paper: Han Su, Shuncheng Liu, Bolong Zhen

Shuncheng Liu 99 Oct 19, 2022
JSON Web Token implementation for Java according to RFC 7519. Easily create, parse and validate JSON Web Tokens using a fluent API.

JWT-Java JSON Web Token library for Java according to RFC 7519. Table of Contents What are JSON Web Tokens? Header Payload Signature Features Supporte

Bastiaan Jansen 6 Jul 10, 2022
Realtime Data Processing and Search Engine Implementation.

Mutad The name Mutad is a reverse spelling of datum. Overview An implementation of a real-time data platform/search engine based on various technology

Shingo OKAWA 14 Aug 4, 2022
A minimal WHIP implementation for the Raspberry Pi. It sends Mic and Camera to a WHIP endpoint

whipi A minimal WHIP implementation for the Raspberry Pi. It sends Camera Mic to a WHIP endpoint. Requires a Raspberry Pi with a PiCam and Java 11. It

|pipe| 12 Oct 27, 2022
A visual implementation of OSHI, to view information about the system and hardware.

MooInfo A visual implementation of OSHI, to view information about the system and hardware. Such as OS, processes, memory, CPU, disks, devices, sensor

周波 104 Jan 6, 2023
Implementation of Greedy Particle Swarm Optimization, HSGA and Hybrid(GA+PSO) for the purpose of Task Scheduling in cloud computing environment using CloudSim

Implementation of Greedy Particle Swarm Optimization, HSGA and Hybrid(GA+PSO) for the purpose of Task Scheduling in cloud computing environment using CloudSim

Yash Jain 5 Dec 18, 2022
An implementation of a sample E-Commerce app in k8s. This online retail marketplace app uses Spring Boot, React, and YugabyteDB.

An implementation of a sample E-Commerce app in k8s. This online retail marketplace app uses Spring Boot, React, and YugabyteDB.

yugabyte 1 Oct 27, 2022
Simple and extensible storage service implementation with optional encryption.

Simple and extensible storage service implementation with optional encryption. About Hole Hole is a simple data storage made with a soul for those who

d1s utils 3 Aug 13, 2022
Hashids algorithm v1.0.0 implementation in Java

Hashids.java A small Java class to generate YouTube-like hashes from one or many numbers. Ported from javascript hashids.js by Ivan Akimov What is it?

YoMo 944 Dec 29, 2022
Implementation of mustache.js for Java

Mustache.java Mustache.java is not designed to allow untrusted parties to provide templates. It may be possible to lock it down to provide that safely

Sam Pullara 1.8k Jan 1, 2023
This repository contains CQRS implementation in Java

CQRS Design Pattern Java This repository contains CQRS implementation in Java. I've written this code-base step by step on Medium that is my Turkish c

Yusuf Yılmaz 14 Oct 25, 2022
SimpleIcons4J is a Java implementation of the simple-icons JavaScript library

SimpleIcons4J SimpleIcons4J is a Java implementation of the simple-icons JavaScript library and is inspired by simpleicons.org. This library currently

Hyesung Lee 3 Apr 9, 2022
This program is a simple machine learning implementation in Java for detecting skin pixels.

Skin Detector ?? ?? Detects human skin from images This program is a simple machine learning implementation in Java for detecting skin pixels. How to

Tasmia Zerin 1 Jan 21, 2022
This project illustrates TDD & Clean Architecture implementation in Java

Banking Kata - Java Overview This project illustrates TDD & Clean Architecture implementation in Java, showing the Use Case Driven Development Approac

Valentina Cupać 191 Dec 28, 2022