Log if Repository.useCnt becomes negative
We observe in Gerrit 2.12 that useCnt can become negative in rare cases. Log this to help finding the bug. Change-Id: Ie91c7f9d190a5d7cf4733d4bf84124d119ca20f7 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
parent
7ffe547da7
commit
ceaadf8f98
|
@ -185,6 +185,7 @@ corruptObjectTruncatedInMode=truncated in mode
|
|||
corruptObjectTruncatedInName=truncated in name
|
||||
corruptObjectTruncatedInObjectId=truncated in object id
|
||||
corruptObjectZeroId=entry points to null SHA-1
|
||||
corruptUseCnt=close() called when useCnt is already zero
|
||||
couldNotCheckOutBecauseOfConflicts=Could not check out because of conflicts
|
||||
couldNotDeleteLockFileShouldNotHappen=Could not delete lock file. Should not happen
|
||||
couldNotDeleteTemporaryIndexFileShouldNotHappen=Could not delete temporary index file. Should not happen
|
||||
|
|
|
@ -245,6 +245,7 @@ public static JGitText get() {
|
|||
/***/ public String corruptObjectTruncatedInObjectId;
|
||||
/***/ public String corruptObjectZeroId;
|
||||
/***/ public String corruptPack;
|
||||
/***/ public String corruptUseCnt;
|
||||
/***/ public String couldNotCheckOutBecauseOfConflicts;
|
||||
/***/ public String couldNotDeleteLockFileShouldNotHappen;
|
||||
/***/ public String couldNotDeleteTemporaryIndexFileShouldNotHappen;
|
||||
|
|
|
@ -94,6 +94,8 @@
|
|||
import org.eclipse.jgit.util.RawParseUtils;
|
||||
import org.eclipse.jgit.util.SystemReader;
|
||||
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Represents a Git repository.
|
||||
|
@ -104,6 +106,8 @@
|
|||
* This class is thread-safe.
|
||||
*/
|
||||
public abstract class Repository implements AutoCloseable {
|
||||
private static Logger LOG = LoggerFactory.getLogger(Repository.class);
|
||||
|
||||
private static final ListenerList globalListeners = new ListenerList();
|
||||
|
||||
/** @return the global listener list observing all events in this JVM. */
|
||||
|
@ -866,12 +870,24 @@ public void incrementOpen() {
|
|||
|
||||
/** Decrement the use count, and maybe close resources. */
|
||||
public void close() {
|
||||
if (useCnt.decrementAndGet() == 0) {
|
||||
int newCount = useCnt.decrementAndGet();
|
||||
if (newCount == 0) {
|
||||
if (RepositoryCache.isCached(this)) {
|
||||
closedAt.set(System.currentTimeMillis());
|
||||
} else {
|
||||
doClose();
|
||||
}
|
||||
} else if (newCount == -1) {
|
||||
// should not happen, only log when useCnt became negative to
|
||||
// minimize number of log entries
|
||||
LOG.warn(JGitText.get().corruptUseCnt);
|
||||
if (LOG.isDebugEnabled()) {
|
||||
IllegalStateException e = new IllegalStateException();
|
||||
LOG.debug("", e); //$NON-NLS-1$
|
||||
}
|
||||
if (RepositoryCache.isCached(this)) {
|
||||
closedAt.set(System.currentTimeMillis());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue