summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHugo Arès <hugo.ares@ericsson.com>2015-04-07 11:17:06 -0400
committerMatthias Sohn <matthias.sohn@sap.com>2015-04-30 16:21:05 +0200
commitae4b72d50e84f9af7978075d4919ad4d2b1d018a (patch)
treefd1af4ef19b2736c712af8f37b372e5df9552180
parentd3a73c1407f8936cb45516da8d3a2d4dd43c6379 (diff)
downloadjgit-ae4b72d50e84f9af7978075d4919ad4d2b1d018a.tar.gz
jgit-ae4b72d50e84f9af7978075d4919ad4d2b1d018a.zip
Remove pack from list when file handle is stale
This error happens on nfs file system when you try to read a file that was deleted or replaced. When the error happens because the file was deleted, removing it from the list is the proper way to handle the error, same use case as FileNotFoundException. When the error happens because the file was replaced, removing the file from the list will cause the file to be re-read so it will get the latest version of the file. Bug: 462868 Change-Id: I368af61a6cf73706601a3e4df4ef24f0aa0465c5 Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
-rw-r--r--org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties1
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java1
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java6
3 files changed, 8 insertions, 0 deletions
diff --git a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
index 10f5339aea..6028618598 100644
--- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
+++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
@@ -394,6 +394,7 @@ packfileCorruptionDetected=Packfile corruption detected: {0}
packFileInvalid=Pack file invalid: {0}
packfileIsTruncated=Packfile {0} is truncated.
packfileIsTruncatedNoParam=Packfile is truncated.
+packHandleIsStale=Pack file {0} handle is stale, removing it from pack list
packHasUnresolvedDeltas=pack has unresolved deltas
packingCancelledDuringObjectsWriting=Packing cancelled during objects writing
packObjectCountMismatch=Pack object count mismatch: pack {0} index {1}: {2}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
index 2448bf8964..3077e18c15 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
@@ -453,6 +453,7 @@ public class JGitText extends TranslationBundle {
/***/ public String packFileInvalid;
/***/ public String packfileIsTruncated;
/***/ public String packfileIsTruncatedNoParam;
+ /***/ public String packHandleIsStale;
/***/ public String packHasUnresolvedDeltas;
/***/ public String packingCancelledDuringObjectsWriting;
/***/ public String packObjectCountMismatch;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
index 9001dc349a..796109aee2 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
@@ -114,6 +114,8 @@ public class ObjectDirectory extends FileObjectDatabase {
/** Maximum number of candidates offered as resolutions of abbreviation. */
private static final int RESOLVE_ABBREV_LIMIT = 256;
+ private static final String STALE_FILE_HANDLE_MSG = "stale file handle"; //$NON-NLS-1$
+
private final Config config;
private final File objects;
@@ -563,6 +565,10 @@ public class ObjectDirectory extends FileObjectDatabase {
} else if (e instanceof FileNotFoundException) {
warnTmpl = JGitText.get().packWasDeleted;
removePack(p);
+ } else if (e.getMessage() != null
+ && e.getMessage().toLowerCase().contains(STALE_FILE_HANDLE_MSG)) {
+ warnTmpl = JGitText.get().packHandleIsStale;
+ removePack(p);
}
if (warnTmpl != null) {
if (LOG.isDebugEnabled()) {