NVMf: fix staging buffer cache get race condition Fixes NVMf staging buffer cache get. Do not throw an exception if we can't free the previous buffer in the hashmap. If we can't free it it was already freed by allocateFreeBuffers.
Signed-off-by: Jonas Pfefferle <peppe...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/incubator-crail/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-crail/commit/bd1e23e0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-crail/tree/bd1e23e0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-crail/diff/bd1e23e0 Branch: refs/heads/master Commit: bd1e23e0fdb4cfafec79ea65d30edee7f55b5224 Parents: 524ead0 Author: Jonas Pfefferle <peppe...@apache.org> Authored: Mon May 7 09:16:22 2018 +0200 Committer: Jonas Pfefferle <peppe...@apache.org> Committed: Mon May 7 09:18:54 2018 +0200 ---------------------------------------------------------------------- .../crail/storage/nvmf/client/NvmfStagingBufferCache.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-crail/blob/bd1e23e0/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStagingBufferCache.java ---------------------------------------------------------------------- diff --git a/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStagingBufferCache.java b/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStagingBufferCache.java index 09d6315..709dcff 100644 --- a/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStagingBufferCache.java +++ b/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStagingBufferCache.java @@ -148,10 +148,9 @@ public class NvmfStagingBufferCache { if (prevEntry != null) { if (prevEntry.tryFree()) { freeBuffers.add(prevEntry.getBuffer()); - } else { - /* we can't have two writes to the same location */ - throw new IllegalStateException(); - } + } /*else { + we lost the race with allocateFreeBuffers which freed the buffer + }*/ } return entry; }