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/04/04 09:21:04 UTC

[2/3] incubator-crail git commit: BufferCache: use new interface in buffer cache

BufferCache: use new interface in buffer cache

Use newly introduced buffer cache interface in buffer cache
implementation.

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/fa9c6af1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-crail/tree/fa9c6af1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-crail/diff/fa9c6af1

Branch: refs/heads/master
Commit: fa9c6af1acd47934c54c5ad47014c376066e68a7
Parents: efd44e7
Author: Jonas Pfefferle <pe...@apache.org>
Authored: Tue Apr 3 15:50:59 2018 +0200
Committer: Jonas Pfefferle <pe...@apache.org>
Committed: Tue Apr 3 15:59:11 2018 +0200

----------------------------------------------------------------------
 .../org/apache/crail/core/CoreDataStore.java    |  4 +-
 .../org/apache/crail/memory/BufferCache.java    | 58 ++++++++++----------
 .../apache/crail/memory/MappedBufferCache.java  | 30 +++++-----
 .../crail/storage/nvmf/NvmfBufferCache.java     |  2 +-
 .../nvmf/client/NvmfStorageEndpoint.java        |  6 +-
 5 files changed, 48 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-crail/blob/fa9c6af1/client/src/main/java/org/apache/crail/core/CoreDataStore.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/crail/core/CoreDataStore.java b/client/src/main/java/org/apache/crail/core/CoreDataStore.java
index 59c7da9..8b5e54f 100644
--- a/client/src/main/java/org/apache/crail/core/CoreDataStore.java
+++ b/client/src/main/java/org/apache/crail/core/CoreDataStore.java
@@ -479,11 +479,11 @@ public class CoreDataStore extends CrailStore {
 	}
 
 	public CrailBuffer allocateBuffer() throws IOException {
-		return this.bufferCache.getBuffer();
+		return this.bufferCache.allocateBuffer();
 	}
 
 	public void freeBuffer(CrailBuffer buffer) throws IOException {
-		this.bufferCache.putBuffer(buffer);
+		this.bufferCache.freeBuffer(buffer);
 	}
 
 	public int getFsId() {

http://git-wip-us.apache.org/repos/asf/incubator-crail/blob/fa9c6af1/client/src/main/java/org/apache/crail/memory/BufferCache.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/crail/memory/BufferCache.java b/client/src/main/java/org/apache/crail/memory/BufferCache.java
index 59f3dc9..108d75f 100644
--- a/client/src/main/java/org/apache/crail/memory/BufferCache.java
+++ b/client/src/main/java/org/apache/crail/memory/BufferCache.java
@@ -30,32 +30,34 @@ import org.apache.crail.conf.CrailConstants;
 import org.apache.crail.utils.CrailUtils;
 import org.slf4j.Logger;
 
-public abstract class BufferCache implements CrailStatistics.StatisticsProvider {
+public abstract class BufferCache implements CrailStatistics.StatisticsProvider, CrailBufferCache {
 	private static final Logger LOG = CrailUtils.getLogger();
 	private LinkedBlockingQueue<CrailBuffer> cache;
-	
+
 	private AtomicLong cacheGet;
 	private AtomicLong cachePut;
 	private AtomicLong cacheMisses;
 	private AtomicLong cacheOut;
 	private AtomicLong cacheMax;
-	
+
 	private AtomicLong cacheMissesMap;
-	private AtomicLong cacheMissesHeap;		
-	
-	public BufferCache() throws IOException{
+	private AtomicLong cacheMissesHeap;
+
+	public abstract CrailBuffer allocateRegion() throws IOException;
+
+	public BufferCache() throws IOException {
 		this.cache = new LinkedBlockingQueue<CrailBuffer>();
-		
+
 		this.cacheGet = new AtomicLong(0);
 		this.cachePut = new AtomicLong(0);
 		this.cacheMisses = new AtomicLong(0);
 		this.cacheOut = new AtomicLong(0);
 		this.cacheMax = new AtomicLong(0);
-		
+
 		this.cacheMissesMap = new AtomicLong(0);
-		this.cacheMissesHeap = new AtomicLong(0);			
+		this.cacheMissesHeap = new AtomicLong(0);
 	}
-	
+
 	@Override
 	public String providerName() {
 		return "cache/buffer";
@@ -65,7 +67,7 @@ public abstract class BufferCache implements CrailStatistics.StatisticsProvider
 	public String printStatistics() {
 		return "cacheGet " + cacheGet.get() + ", cachePut " + cachePut.get() + ", cacheMiss " + cacheMisses.get() + ", cacheSize " + cache.size() +  ", cacheMax " + cacheMax.get() + ", mapMiss " + cacheMissesMap.get() + ", mapHeap " + cacheMissesHeap.get();
 	}
-	
+
 	public void resetStatistics(){
 		this.cacheGet.set(0);
 		this.cachePut.set(0);
@@ -74,24 +76,24 @@ public abstract class BufferCache implements CrailStatistics.StatisticsProvider
 		this.cacheMax.set(0);
 		this.cacheMissesMap.set(0);
 		this.cacheMissesHeap.set(0);
-	}	
-	
+	}
+
 	public void mergeStatistics(StatisticsProvider provider){
-		
+
 	}
-	
-	public CrailBuffer getBuffer() throws IOException {
+
+	public CrailBuffer allocateBuffer() throws IOException {
 		cacheGet.incrementAndGet();
 		cacheOut.incrementAndGet();
 		cacheMax.updateAndGet(x -> Math.max(x, cacheOut.get()));
-		
+
 		CrailBuffer buffer = cache.poll();
 		if (buffer == null){
 			synchronized(this){
 				buffer = cache.poll();
 				if (buffer == null){
 					cacheMisses.incrementAndGet();
-					buffer = allocateBuffer();
+					buffer = allocateRegion();
 					if (buffer == null){
 						buffer = OffHeapBuffer.wrap(ByteBuffer.allocateDirect(CrailConstants.BUFFER_SIZE));
 						cacheMissesHeap.incrementAndGet();
@@ -100,29 +102,27 @@ public abstract class BufferCache implements CrailStatistics.StatisticsProvider
 					}
 				}
 			}
-		} 
-		
+		}
+
 		buffer.clear();
 		return buffer;
 	}
-	
-	public void putBuffer(CrailBuffer buffer) throws IOException{
+
+	public void freeBuffer(CrailBuffer buffer) throws IOException{
 		if (buffer != null){
 			cachePut.incrementAndGet();
 			cacheOut.decrementAndGet();
 			putBufferInternal(buffer);
 		}
 	}
-	
+
 	public void putBufferInternal(CrailBuffer buffer) throws IOException{
 		cache.add(buffer);
-	}	
-	
+	}
+
 	public void close(){
 		cache.clear();
 	}
-	
-	public abstract CrailBuffer allocateBuffer() throws IOException;
 
 	@SuppressWarnings("unchecked")
 	public static BufferCache createInstance(String name) throws Exception {
@@ -134,7 +134,7 @@ public abstract class BufferCache implements CrailStatistics.StatisticsProvider
 		} else {
 			throw new Exception("Cannot instantiate storage client of type " + name);
 		}
-		
-	}		
+
+	}
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-crail/blob/fa9c6af1/client/src/main/java/org/apache/crail/memory/MappedBufferCache.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/crail/memory/MappedBufferCache.java b/client/src/main/java/org/apache/crail/memory/MappedBufferCache.java
index 567e300..9e37ca2 100644
--- a/client/src/main/java/org/apache/crail/memory/MappedBufferCache.java
+++ b/client/src/main/java/org/apache/crail/memory/MappedBufferCache.java
@@ -33,23 +33,23 @@ import org.slf4j.Logger;
 
 public class MappedBufferCache extends BufferCache {
 	private static final Logger LOG = CrailUtils.getLogger();
-	
+
 	private String id;
 	private String directory;
 	private File dir;
 	private long allocationCount;
 	private long bufferCount;
-	private long currentRegion;	
-	
+	private long currentRegion;
+
 	public MappedBufferCache() throws IOException {
 		super();
-		
+
 		this.allocationCount = CrailConstants.CACHE_LIMIT / CrailConstants.REGION_SIZE;
 		long _bufferSize = (long) CrailConstants.BUFFER_SIZE;
 		this.bufferCount = CrailConstants.REGION_SIZE / _bufferSize;
 		this.currentRegion = 0;
 		LOG.info("buffer cache, allocationCount " + allocationCount + ", bufferCount " + bufferCount);
-		
+
 		if (allocationCount > 0){
 			id = "" + System.currentTimeMillis();
 			directory = CrailUtils.getCacheDirectory(id);
@@ -62,11 +62,11 @@ public class MappedBufferCache extends BufferCache {
 			}
 		}
 	}
-	
+
 	@Override
 	public void close() {
 		super.close();
-		
+
 		if (allocationCount > 0 && dir.exists()){
 			for (File child : dir.listFiles()) {
 				child.delete();
@@ -75,16 +75,12 @@ public class MappedBufferCache extends BufferCache {
 		}
 		LOG.info("mapped client cache closed");
 	}
-	
-	public CrailBuffer allocateBuffer() throws IOException{
-		return allocateRegion();
-	}
 
-	private CrailBuffer allocateRegion() throws IOException {
+	public CrailBuffer allocateRegion() throws IOException {
 		if (currentRegion >= allocationCount){
 			return null;
 		}
-		
+
 		String path = directory + "/" + currentRegion++;
 		RandomAccessFile randomFile = new RandomAccessFile(path, "rw");
 		randomFile.setLength(CrailConstants.REGION_SIZE);
@@ -96,23 +92,23 @@ public class MappedBufferCache extends BufferCache {
 		channel.close();
 
 		CrailBuffer firstBuffer = slice(mappedBuffer, 0);
-		
+
 		for (int j = 1; j < bufferCount; j++) {
 			int position = j * CrailConstants.BUFFER_SIZE;
 			CrailBuffer sliceBuffer = slice(mappedBuffer, position);
 			this.putBufferInternal(sliceBuffer);
 		}
 		mappedBuffer.clear();
-		
+
 		return firstBuffer;
 	}
-	
+
 	private CrailBuffer slice(CrailBuffer mappedBuffer, int position){
 		int limit = position + CrailConstants.BUFFER_SIZE;
 		mappedBuffer.clear();
 		mappedBuffer.position(position);
 		mappedBuffer.limit(limit);
-		CrailBuffer buffer = mappedBuffer.slice();			
+		CrailBuffer buffer = mappedBuffer.slice();
 		return buffer;
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-crail/blob/fa9c6af1/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/NvmfBufferCache.java
----------------------------------------------------------------------
diff --git a/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/NvmfBufferCache.java b/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/NvmfBufferCache.java
index f7b19d9..19142ec 100644
--- a/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/NvmfBufferCache.java
+++ b/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/NvmfBufferCache.java
@@ -52,7 +52,7 @@ public class NvmfBufferCache extends BufferCache {
 	}
 
 	@Override
-	public CrailBuffer allocateBuffer() throws IOException {
+	public CrailBuffer allocateRegion() throws IOException {
 		ByteBuffer buffer = endpointGroup.allocateBuffer(CrailConstants.BUFFER_SIZE, ALIGNMENT);
 		bufferPool.add(buffer);
 		return OffHeapBuffer.wrap(buffer);

http://git-wip-us.apache.org/repos/asf/incubator-crail/blob/fa9c6af1/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStorageEndpoint.java
----------------------------------------------------------------------
diff --git a/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStorageEndpoint.java b/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStorageEndpoint.java
index 0e04edf..b4b1054 100644
--- a/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStorageEndpoint.java
+++ b/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStorageEndpoint.java
@@ -41,7 +41,7 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.concurrent.*;
 
-public class NvmfStorageEndpoint implements StorageEndpoint { 
+public class NvmfStorageEndpoint implements StorageEndpoint {
 	private static final Logger LOG = CrailUtils.getLogger();
 
 	private final InetSocketAddress inetSocketAddress;
@@ -150,7 +150,7 @@ public class NvmfStorageEndpoint implements StorageEndpoint {
 //			LOG.info("unaligned");
 			long alignedLength = NvmfStorageUtils.alignLength(sectorSize, remoteOffset, length);
 
-			CrailBuffer stagingBuffer = cache.getBuffer();
+			CrailBuffer stagingBuffer = cache.allocateBuffer();
 			stagingBuffer.limit((int)alignedLength);
 			try {
 				switch(op) {
@@ -213,7 +213,7 @@ public class NvmfStorageEndpoint implements StorageEndpoint {
 	}
 
 	void putBuffer(CrailBuffer buffer) throws IOException {
-		cache.putBuffer(buffer);
+		cache.freeBuffer(buffer);
 	}
 
 	public void close() throws IOException, InterruptedException {