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;
        }

Reply via email to