diff --git a/modules/dcache/src/main/java/org/dcache/pool/repository/v5/ReadHandleImpl.java b/modules/dcache/src/main/java/org/dcache/pool/repository/v5/ReadHandleImpl.java index 4a518beba02..cc1b8eb8cf0 100644 --- a/modules/dcache/src/main/java/org/dcache/pool/repository/v5/ReadHandleImpl.java +++ b/modules/dcache/src/main/java/org/dcache/pool/repository/v5/ReadHandleImpl.java @@ -44,6 +44,7 @@ class ReadHandleImpl implements ReplicaDescriptor { private final Set _openOptions; private FileAttributes _fileAttributes; private boolean _open; + private Exception _closedBy; ReadHandleImpl(PnfsHandler pnfs, ReplicaRecord entry, FileAttributes fileAttributes, boolean isInternalActivity) { @@ -63,10 +64,11 @@ class ReadHandleImpl implements ReplicaDescriptor { @Override public synchronized void close() throws IllegalStateException { if (!_open) { - throw new IllegalStateException("Handle is closed"); + throw new IllegalStateException("Handle is closed", _closedBy); } _entry.decrementLinkCount(); _open = false; + _closedBy = new Exception("Previous, successful close."); } @Override diff --git a/modules/dcache/src/main/java/org/dcache/pool/repository/v5/WriteHandleImpl.java b/modules/dcache/src/main/java/org/dcache/pool/repository/v5/WriteHandleImpl.java index be77fddb2c2..7a469db06ca 100644 --- a/modules/dcache/src/main/java/org/dcache/pool/repository/v5/WriteHandleImpl.java +++ b/modules/dcache/src/main/java/org/dcache/pool/repository/v5/WriteHandleImpl.java @@ -118,6 +118,7 @@ enum HandleState { private Long _atime; private boolean hasChannelBeenCreated; + private Exception _closedBy; WriteHandleImpl(ReplicaRepository repository, Allocator allocator, @@ -358,7 +359,7 @@ public synchronized void close() throws IllegalStateException { switch (_state) { case CLOSED: - throw new IllegalStateException("Handle is closed"); + throw new IllegalStateException("Handle is closed", _closedBy); case OPEN: fail(); @@ -369,6 +370,7 @@ public synchronized void close() setState(HandleState.CLOSED); break; } + _closedBy = new Exception("Previous, successful close."); } /**