You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@crail.apache.org by pe...@apache.org on 2018/05/07 10:58:59 UTC

[1/3] incubator-crail git commit: NVMf: staging buffer cache existing entry bug

Repository: incubator-crail
Updated Branches:
  refs/heads/master 749f44206 -> bd1e23e0f


NVMf: staging buffer cache existing entry bug

A buffer might already exist at a certain remote address (resp. LBA) if
a file was deleted and a block was reassigned to a different file. Do not
throw an exception but free the buffer. If we can't free it something
went wrong as there should never be two writers writing to the same
remote address.

https://issues.apache.org/jira/projects/CRAIL/issues/CRAIL-30

Signed-off-by: Jonas Pfefferle <pe...@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/671b6355
Tree: http://git-wip-us.apache.org/repos/asf/incubator-crail/tree/671b6355
Diff: http://git-wip-us.apache.org/repos/asf/incubator-crail/diff/671b6355

Branch: refs/heads/master
Commit: 671b63554658925e78d1a8c8a11c706ffee8924d
Parents: 749f442
Author: Jonas Pfefferle <pe...@apache.org>
Authored: Wed May 2 12:53:47 2018 +0200
Committer: Jonas Pfefferle <pe...@apache.org>
Committed: Thu May 3 13:50:16 2018 +0200

----------------------------------------------------------------------
 .../crail/storage/nvmf/client/NvmfStagingBufferCache.java     | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-crail/blob/671b6355/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 e29c284..64a8857 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
@@ -145,7 +145,12 @@ public class NvmfStagingBufferCache {
 		BufferCacheEntry entry = new BufferCacheEntry(buffer);
 		BufferCacheEntry prevEntry = remoteAddressMap.putIfAbsent(alignedRemoteAddress, entry);
 		if (prevEntry != null) {
-			throw new IllegalStateException();
+			if (prevEntry.tryFree()) {
+				freeBuffers.add(prevEntry.getBuffer());
+			} else {
+				/* we can't have two writes to the same location */
+				throw new IllegalStateException();
+			}
 		}
 		return entry;
 	}


[2/3] incubator-crail git commit: NVMf: staging buffer cache clear buffer

Posted by pe...@apache.org.
NVMf: staging buffer cache clear buffer

Clear buffer position and limit when getting the buffer of the
free queue since position and limit might have been modified before.

https://issues.apache.org/jira/browse/CRAIL-31

Signed-off-by: Jonas Pfefferle <pe...@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/524ead0f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-crail/tree/524ead0f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-crail/diff/524ead0f

Branch: refs/heads/master
Commit: 524ead0f74514e0496c6ecf06a24d88ab334d6e4
Parents: 671b635
Author: Jonas Pfefferle <pe...@apache.org>
Authored: Thu May 3 13:38:00 2018 +0200
Committer: Jonas Pfefferle <pe...@apache.org>
Committed: Thu May 3 13:50:31 2018 +0200

----------------------------------------------------------------------
 .../apache/crail/storage/nvmf/client/NvmfStagingBufferCache.java    | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-crail/blob/524ead0f/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 64a8857..09d6315 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
@@ -141,6 +141,7 @@ public class NvmfStagingBufferCache {
 				allocateFreeBuffers();
 			}
 		} while (buffer == null);
+		buffer.clear();
 
 		BufferCacheEntry entry = new BufferCacheEntry(buffer);
 		BufferCacheEntry prevEntry = remoteAddressMap.putIfAbsent(alignedRemoteAddress, entry);


[3/3] incubator-crail git commit: NVMf: fix staging buffer cache get race condition

Posted by pe...@apache.org.
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 <pe...@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 <pe...@apache.org>
Authored: Mon May 7 09:16:22 2018 +0200
Committer: Jonas Pfefferle <pe...@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;
 	}