Improve log if VersionedMetaData fails to update
In case of lock failure there is no hint on what commit has caused it.
This change adds ref log message (which is "commit:" + subject line
of commit message or "commit: meta data update" in case of no commit message
to the exception message.
Also extract the exception message creation to a separate method,
so that the same info is available when update fails for other reasons.
Change-Id: I5686e079853807ba88dae6d8ccf184eb81b50013
diff --git a/java/com/google/gerrit/server/git/meta/VersionedMetaData.java b/java/com/google/gerrit/server/git/meta/VersionedMetaData.java
index bcd3bea..66482a9 100644
--- a/java/com/google/gerrit/server/git/meta/VersionedMetaData.java
+++ b/java/com/google/gerrit/server/git/meta/VersionedMetaData.java
@@ -27,6 +27,7 @@
import com.google.gerrit.server.logging.TraceContext;
import com.google.gerrit.server.logging.TraceContext.TraceTimer;
import java.io.BufferedReader;
+import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
@@ -416,14 +417,7 @@
update.fireGitRefUpdatedEvent(ru);
return revision;
case LOCK_FAILURE:
- throw new LockFailureException(
- "Cannot update "
- + ru.getName()
- + " in "
- + db.getDirectory()
- + ": "
- + ru.getResult(),
- ru);
+ throw new LockFailureException(errorMsg(ru, db.getDirectory()), ru);
case FORCED:
case IO_FAILURE:
case NOT_ATTEMPTED:
@@ -434,19 +428,18 @@
case REJECTED_MISSING_OBJECT:
case REJECTED_OTHER_REASON:
default:
- throw new GitUpdateFailureException(
- "Cannot update "
- + ru.getName()
- + " in "
- + db.getDirectory()
- + ": "
- + ru.getResult(),
- ru);
+ throw new GitUpdateFailureException(errorMsg(ru, db.getDirectory()), ru);
}
}
};
}
+ private String errorMsg(RefUpdate ru, File location) {
+ return String.format(
+ "Cannot update %s in %s : %s (%s)",
+ ru.getName(), location, ru.getResult(), ru.getRefLogMessage());
+ }
+
protected DirCache readTree(RevTree tree)
throws IOException, MissingObjectException, IncorrectObjectTypeException {
DirCache dc = DirCache.newInCore();