]> source.dussan.org Git - jgit.git/commit
Fix LockFile semantics when running on NFS 16/112016/9
authorChristian Halstrick <christian.halstrick@sap.com>
Tue, 14 Nov 2017 16:08:56 +0000 (17:08 +0100)
committerChristian Halstrick <christian.halstrick@sap.com>
Wed, 22 Nov 2017 17:15:11 +0000 (18:15 +0100)
commit10e65cb4faf943d4a2a782ceef6f0f09934b150b
treed3bb1a9c34bd017ae043b923b4a72ce476dc580d
parent218cf3403de512f564aa74f18de56c97dd7852b4
Fix LockFile semantics when running on NFS

When running on NFS there was a chance that JGits LockFile
semantic is broken because File#createNewFile() may allow
multiple clients to create the same file in parallel. This
change provides a fix which is only used when the new config
option core.supportsAtomicCreateNewFile is set to false. The
default for this option is true. This option can only be set in the
global or the system config file. The repository config file is not
taken into account in this case.

If the config option core.supportsAtomicCreateNewFile is true
then File#createNewFile() is trusted and the behaviour doesn't
change.

But if core.supportsAtomicCreateNewFile is set to false then after
successful creation of the lock file a hardlink to that lock file is
created and the attribute nlink of the lock file is checked to be 2. If
multiple clients manage to create the same lock file nlink would be
greater than 2 showing the error.

This expensive workaround is described in
 https://www.time-travellers.org/shane/papers/NFS_considered_harmful.html
section III.d) "Exclusive File Creation"

Change-Id: I3d2cc48d8eb280d5f7039eb94da37804f903be6a
org.eclipse.jgit/.settings/.api_filters
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/LockFile.java
org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java