Author: olamy
Date: Thu Oct 13 10:17:00 2011
New Revision: 1182758
URL: http://svn.apache.org/viewvc?rev=1182758&view=rev
Log:
arff missed again svn add: time to lunch break :-)
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/Cache.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Every.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Expires.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/For.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Heap.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/In.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Memory.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Monitor.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Ram.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Sizing.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Space.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManager.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBuffer.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/DummyPojo.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/Format.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/DummyPojoSerializer.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffSerializerV1.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffWithLinkedBufferSerializer.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/Serializer.java
(with props)
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/StandardSerializer.java
(with props)
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/Cache.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/Cache.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/Cache.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/Cache.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,225 @@
+package org.apache.directmemory.cache;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.directmemory.measures.Every;
+import org.apache.directmemory.measures.Ram;
+import org.apache.directmemory.memory.MemoryManager;
+import org.apache.directmemory.memory.OffHeapMemoryBuffer;
+import org.apache.directmemory.memory.Pointer;
+import org.apache.directmemory.misc.Format;
+import org.apache.directmemory.serialization.ProtoStuffSerializerV1;
+import org.apache.directmemory.serialization.Serializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.MapMaker;
+
+public class Cache {
+
+ private static Logger logger =
LoggerFactory.getLogger(MemoryManager.class);
+ private static ConcurrentMap<String, Pointer> map;
+
+ public static int DEFAULT_CONCURRENCY_LEVEL = 4;
+ public static int DEFAULT_INITIAL_CAPACITY = 100000;
+
+ public static Serializer serializer = new ProtoStuffSerializerV1();
+
+ private Cache() {
+ // not instantiable
+ }
+
+
+ private final static Timer timer = new Timer();
+
+ public static void scheduleDisposalEvery(long l) {
+ timer.schedule(new TimerTask() {
+ public void run() {
+ logger.info("begin scheduled disposal");
+ collectExpired();
+ collectLFU();
+ logger.info("scheduled disposal complete");
+ }
+ }, l);
+ logger.info("disposal scheduled every " + l + " milliseconds");
+ }
+
+ public static void init(int numberOfBuffers, int size, int
initialCapacity, int concurrencyLevel) {
+ map = new MapMaker()
+ .concurrencyLevel(concurrencyLevel)
+ .initialCapacity(initialCapacity)
+ .makeMap();
+
+ logger.info("*** initializing
*******************************\r\n" + Format.logo());
+ logger.info("************************************************");
+ MemoryManager.init(numberOfBuffers, size);
+ logger.info("initialized");
+ logger.info(Format.it("number of buffer(s): \t%1d with %2s
each", numberOfBuffers, Ram.inMb(size)));
+ logger.info(Format.it("initial capacity: \t%1d",
initialCapacity));
+ logger.info(Format.it("concurrency level: \t%1d",
concurrencyLevel));
+ scheduleDisposalEvery(Every.seconds(10));
+ }
+
+ public static void init(int numberOfBuffers, int size) {
+ init(numberOfBuffers, size, DEFAULT_INITIAL_CAPACITY,
DEFAULT_CONCURRENCY_LEVEL);
+ }
+
+ public static Pointer putByteArray(String key, byte[] payload, int
expiresIn) {
+ Pointer ptr = MemoryManager.store(payload, expiresIn);
+ map.put(key, ptr);
+ return ptr;
+ }
+
+ public static Pointer putByteArray(String key, byte[] payload) {
+ return putByteArray(key, payload, 0);
+ }
+
+ public static Pointer put(String key, Object object) {
+ return put(key, object, 0);
+ }
+
+ public static Pointer put(String key, Object object, int expiresIn) {
+ try {
+ byte[] payload = serializer.serialize(object,
object.getClass());
+ Pointer ptr = putByteArray(key, payload);
+ ptr.clazz = object.getClass();
+ return ptr;
+ } catch (IOException e) {
+ logger.error(e.getMessage());
+ return null;
+ }
+ }
+
+ public static Pointer updateByteArray(String key, byte[] payload) {
+ Pointer p = map.get(key);
+ p = MemoryManager.update(p, payload);
+ return p;
+ }
+
+ public static Pointer update(String key, Object object) {
+ Pointer p = map.get(key);
+ try {
+ p = MemoryManager.update(p,
serializer.serialize(object, object.getClass()));
+ p.clazz = object.getClass();
+ return p;
+ } catch (IOException e) {
+ logger.error(e.getMessage());
+ return null;
+ }
+ }
+
+ public static byte[] retrieveByteArray(String key) {
+ Pointer ptr = getPointer(key);
+ if (ptr == null) return null;
+ if (ptr.expired() || ptr.free) {
+ map.remove(key);
+ if (!ptr.free) {
+ MemoryManager.free(ptr);
+ }
+ return null;
+ } else {
+ return MemoryManager.retrieve(ptr);
+ }
+ }
+
+ public static Object retrieve(String key) {
+ Pointer ptr = getPointer(key);
+ if (ptr == null) return null;
+ if (ptr.expired() || ptr.free) {
+ map.remove(key);
+ if (!ptr.free) {
+ MemoryManager.free(ptr);
+ }
+ return null;
+ } else {
+ try {
+ return
serializer.deserialize(MemoryManager.retrieve(ptr),ptr.clazz);
+ } catch (EOFException e) {
+ logger.error(e.getMessage());
+ } catch (IOException e) {
+ logger.error(e.getMessage());
+ } catch (ClassNotFoundException e) {
+ logger.error(e.getMessage());
+ } catch (InstantiationException e) {
+ logger.error(e.getMessage());
+ } catch (IllegalAccessException e) {
+ logger.error(e.getMessage());
+ }
+ }
+ return null;
+ }
+
+ public static Pointer getPointer(String key) {
+ return map.get(key);
+ }
+
+ public static void free(String key) {
+ Pointer p = map.remove(key);
+ if (p != null) {
+ MemoryManager.free(p);
+ }
+ }
+
+ public static void free(Pointer pointer) {
+ MemoryManager.free(pointer);
+ }
+
+ public static void collectExpired() {
+ MemoryManager.collectExpired();
+ // still have to look for orphan (storing references to freed
pointers) map entries
+ }
+
+ public static void collectLFU() {
+ MemoryManager.collectLFU();
+ // can possibly clear one whole buffer if it's too fragmented -
investigate
+ }
+
+ public static void collectAll() {
+ Thread thread = new Thread(){
+ public void run(){
+ logger.info("begin disposal");
+ collectExpired();
+ collectLFU();
+ logger.info("disposal complete");
+ }
+ };
+ thread.start();
+ }
+
+
+ public static void clear() {
+ map.clear();
+ MemoryManager.clear();
+ logger.info("Cache cleared");
+ }
+
+ public static long entries() {
+ return map.size();
+ }
+
+ private static void dump(OffHeapMemoryBuffer mem) {
+ logger.info(Format.it("off-heap - buffer: \t%1d",
mem.bufferNumber));
+ logger.info(Format.it("off-heap - allocated: \t%1s",
Ram.inMb(mem.capacity())));
+ logger.info(Format.it("off-heap - used: \t%1s",
Ram.inMb(mem.used())));
+ logger.info(Format.it("heap - max: \t%1s",
Ram.inMb(Runtime.getRuntime().maxMemory())));
+ logger.info(Format.it("heap - allocated: \t%1s",
Ram.inMb(Runtime.getRuntime().totalMemory())));
+ logger.info(Format.it("heap - free : \t%1s",
Ram.inMb(Runtime.getRuntime().freeMemory())));
+ logger.info("************************************************");
+ }
+
+ public static void dump() {
+ if (!logger.isInfoEnabled())
+ return;
+
+ logger.info("*** DirectMemory statistics ********************");
+
+ for (OffHeapMemoryBuffer mem : MemoryManager.buffers) {
+ dump(mem);
+ }
+ }
+
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/Cache.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/Cache.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Every.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Every.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Every.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Every.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,9 @@
+package org.apache.directmemory.measures;
+
+public class Every extends In {
+
+ public Every(double measure) {
+ super(measure);
+ }
+
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Every.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Every.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Expires.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Expires.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Expires.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Expires.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,15 @@
+package org.apache.directmemory.measures;
+
+public class Expires extends In {
+
+ public Expires(double measure) {
+ super(measure);
+ }
+
+ public static In in(double measure) {
+ return new In(measure);
+ }
+ public static long never() {
+ return -1L;
+ }
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Expires.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Expires.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/For.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/For.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/For.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/For.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,9 @@
+package org.apache.directmemory.measures;
+
+public class For extends In {
+
+ public For(double measure) {
+ super(measure);
+ }
+
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/For.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/For.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Heap.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Heap.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Heap.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Heap.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,5 @@
+package org.apache.directmemory.measures;
+
+public class Heap extends Sizing {
+
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Heap.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Heap.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/In.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/In.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/In.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/In.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,48 @@
+package org.apache.directmemory.measures;
+
+public class In {
+ private double measure;
+
+ public In(double measure) {
+ this.measure = measure;
+ }
+
+ public long seconds() {
+ return seconds(measure);
+ }
+
+ public long minutes() {
+ return minutes(measure);
+ }
+
+ public long hours() {
+ return hours(measure);
+ }
+
+ public long days() {
+ return days(measure);
+ }
+
+ public static long seconds(double seconds) {
+ return (long)seconds * 1000;
+ }
+ public static long minutes(double minutes) {
+ return (long)seconds(minutes * 60);
+ }
+ public static long hours(double hours) {
+ return (long)minutes(hours * 60);
+ }
+ public static long days(double days) {
+ return (long)hours(days * 24);
+ }
+
+ public static In just(double measure) {
+ return new In(measure);
+ }
+ public static In exactly(double measure) {
+ return new In(measure);
+ }
+ public static In only(double measure) {
+ return new In(measure);
+ }
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/In.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/In.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Memory.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Memory.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Memory.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Memory.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,5 @@
+package org.apache.directmemory.measures;
+
+public class Memory extends Sizing {
+
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Memory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Memory.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Monitor.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Monitor.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Monitor.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Monitor.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,75 @@
+package org.apache.directmemory.measures;
+
+import java.text.DecimalFormat;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.apache.directmemory.misc.Format;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Monitor {
+ private AtomicLong hits = new AtomicLong(0);
+ private long totalTime = 0;
+ private long min = -1;
+ private long max = -1;
+ public String name;
+
+ private static Logger logger = LoggerFactory.getLogger(Monitor.class);
+ public static Map<String, Monitor> monitors = new HashMap<String,
Monitor>();
+
+ public static Monitor get(String key) {
+ Monitor mon = monitors.get(key);
+ if (mon == null) {
+ mon = new Monitor(key);
+ monitors.put(key, mon);
+ }
+ return mon;
+ }
+
+ public Monitor(String name) {
+ this.name = name;
+ }
+
+ public long start() {
+ return System.nanoTime();
+ }
+ public long stop(long begunAt) {
+ hits.incrementAndGet();
+ final long lastAccessed = System.nanoTime();
+ final long elapsed = lastAccessed - begunAt;
+ totalTime+=elapsed;
+ if (elapsed > max && hits.get() > 0) max = elapsed;
+ if (elapsed < min && hits.get() > 0) min = elapsed;
+ return elapsed;
+ }
+ public long hits() {
+ return hits.get();
+ }
+ public long totalTime() {
+ return totalTime;
+ }
+ public long average() {
+ return totalTime/hits.get();
+ }
+ public String toString() {
+ return Format.it("%1$s hits: %2$d, avg: %3$s ms, tot: %4$s
seconds",
+ name,
+ hits.get(),
+ new
DecimalFormat("####.###").format((double)average()/1000000),
+ new
DecimalFormat("####.###").format((double)totalTime/1000000000)
+ );
+ }
+
+ public static void dump(String prefix) {
+ for (Monitor monitor : Monitor.monitors.values()) {
+ if (monitor.name.startsWith(prefix))
+ logger.info(monitor.toString());
+ }
+ }
+
+ public static void dump() {
+ dump("");
+ }
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Monitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Monitor.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Ram.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Ram.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Ram.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Ram.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,5 @@
+package org.apache.directmemory.measures;
+
+public class Ram extends Sizing {
+
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Ram.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Ram.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Sizing.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Sizing.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Sizing.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Sizing.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,29 @@
+package org.apache.directmemory.measures;
+
+import java.util.Formatter;
+
+public class Sizing {
+ public static int Gb(double giga) {
+ return (int)giga * 1024 * 1024 * 1024;
+ }
+
+ public static int Mb(double mega) {
+ return (int)mega * 1024 * 1024;
+ }
+
+ public static int Kb(double kilo) {
+ return (int)kilo * 1024;
+ }
+ public static int unlimited() {
+ return -1;
+ }
+ public static String inKb(long bytes) {
+ return new Formatter().format("%(,.1fKb",
(double)bytes/1024).toString();
+ }
+ public static String inMb(long bytes) {
+ return new Formatter().format("%(,.1fMb",
(double)bytes/1024/1024).toString();
+ }
+ public static String inGb(long bytes) {
+ return new Formatter().format("%(,.1fKb",
(double)bytes/1024/1024/1024).toString();
+ }
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Sizing.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Sizing.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Space.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Space.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Space.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Space.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,5 @@
+package org.apache.directmemory.measures;
+
+public class Space extends Sizing {
+
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Space.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/measures/Space.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManager.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManager.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManager.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManager.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,97 @@
+package org.apache.directmemory.memory;
+
+import java.util.List;
+import java.util.Vector;
+
+import org.apache.directmemory.measures.Ram;
+import org.apache.directmemory.misc.Format;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MemoryManager {
+ private static Logger logger =
LoggerFactory.getLogger(MemoryManager.class);
+ public static List<OffHeapMemoryBuffer> buffers = new
Vector<OffHeapMemoryBuffer>();
+ public static OffHeapMemoryBuffer activeBuffer = null;
+
+ private MemoryManager() {
+ //static class
+ }
+
+ public static void init(int numberOfBuffers, int size) {
+ for (int i = 0; i < numberOfBuffers; i++) {
+ buffers.add(OffHeapMemoryBuffer.createNew(size, i));
+ }
+ activeBuffer = buffers.get(0);
+ logger.info(Format.it("MemoryManager initialized - %d buffers,
%s each", numberOfBuffers, Ram.inMb(size)));
+ }
+
+ public static Pointer store(byte[] payload, int expiresIn) {
+ Pointer p = activeBuffer.store(payload, expiresIn);
+ if (p == null) {
+ if (activeBuffer.bufferNumber+1 == buffers.size()) {
+ return null;
+ } else {
+ // try next buffer
+ activeBuffer =
buffers.get(activeBuffer.bufferNumber+1);
+ p = activeBuffer.store(payload, expiresIn);
+ }
+ }
+ return p;
+ }
+
+ public static Pointer store(byte[] payload) {
+ return store(payload, 0);
+ }
+
+ public static Pointer update(Pointer pointer, byte[] payload) {
+ Pointer p = activeBuffer.update(pointer, payload);
+ if (p == null) {
+ if (activeBuffer.bufferNumber == buffers.size()) {
+ return null;
+ } else {
+ // try next buffer
+ activeBuffer =
buffers.get(activeBuffer.bufferNumber+1);
+ p = activeBuffer.store(payload);
+ }
+ }
+ return p;
+ }
+
+ public static byte[] retrieve(Pointer pointer) {
+ return buffers.get(pointer.bufferNumber).retrieve(pointer);
+ }
+
+ public static void free(Pointer pointer) {
+ buffers.get(pointer.bufferNumber).free(pointer);
+ }
+
+ public static void clear() {
+ for (OffHeapMemoryBuffer buffer : buffers) {
+ buffer.clear();
+ }
+ activeBuffer = buffers.get(0);
+ }
+
+ public static long capacity() {
+ long totalCapacity = 0;
+ for (OffHeapMemoryBuffer buffer : buffers) {
+ totalCapacity += buffer.capacity();
+ }
+ return totalCapacity;
+ }
+
+ public static long collectExpired() {
+ long disposed = 0;
+ for (OffHeapMemoryBuffer buffer : buffers) {
+ disposed += buffer.collectExpired();
+ }
+ return disposed;
+ }
+
+ public static void collectLFU() {
+ for (OffHeapMemoryBuffer buf : MemoryManager.buffers) {
+ buf.collectLFU(-1);
+ }
+ }
+
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManager.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBuffer.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBuffer.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBuffer.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBuffer.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,251 @@
+package org.apache.directmemory.memory;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.zip.CRC32;
+import java.util.zip.Checksum;
+
+import org.apache.directmemory.measures.Ram;
+import org.apache.directmemory.misc.Format;
+import org.josql.Query;
+import org.josql.QueryExecutionException;
+import org.josql.QueryParseException;
+import org.josql.QueryResults;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OffHeapMemoryBuffer {
+ private static Logger logger =
LoggerFactory.getLogger(OffHeapMemoryBuffer.class);
+ protected ByteBuffer buffer;
+ public List<Pointer> pointers = new ArrayList<Pointer>();
+// public List<Pointer> pointers = new CopyOnWriteArrayList<Pointer>();
+ AtomicInteger used = new AtomicInteger();
+ public int bufferNumber;
+
+
+ public int used() {
+ return used.get();
+ }
+
+ public int capacity(){
+ return buffer.capacity();
+ }
+
+ public static OffHeapMemoryBuffer createNew(int capacity, int
bufferNumber) {
+ logger.info(Format.it("Creating OffHeapMemoryBuffer %d with a
capacity of %s", bufferNumber, Ram.inMb(capacity)));
+ return new
OffHeapMemoryBuffer(ByteBuffer.allocateDirect(capacity), bufferNumber);
+ }
+
+ public static OffHeapMemoryBuffer createNew(int capacity) {
+ return new
OffHeapMemoryBuffer(ByteBuffer.allocateDirect(capacity), -1);
+ }
+
+ private OffHeapMemoryBuffer(ByteBuffer buffer, int bufferNumber) {
+ this.buffer = buffer;
+ this.bufferNumber = bufferNumber;
+ createAndAddFirstPointer();
+ }
+
+ private Pointer createAndAddFirstPointer() {
+ Pointer first = new Pointer();
+ first.bufferNumber = bufferNumber;
+ first.start = 0;
+ first.free = true;
+ first.end = buffer.capacity()-1;
+ pointers.add(first);
+ return first;
+ }
+
+ public Pointer slice(Pointer existing, int capacity) {
+ Pointer fresh = new Pointer();
+ fresh.bufferNumber = existing.bufferNumber;
+ fresh.start = existing.start;
+ fresh.end = fresh.start+capacity;
+ fresh.free = true;
+ existing.start+=capacity+1;
+ return fresh;
+ }
+
+
+ public Pointer firstMatch(int capacity) {
+ for (Pointer ptr : pointers) {
+ if (ptr.free && ptr.end >= capacity) {
+ return ptr;
+ }
+ }
+ return null;
+ }
+
+ public Pointer store(byte[] payload) {
+ return store(payload, -1);
+ }
+
+ public byte[] retrieve(Pointer pointer) {
+// if (!pointer.expired()) {
+ pointer.lastHit = System.currentTimeMillis();
+ pointer.hits++;
+
+ ByteBuffer buf = null;
+ synchronized (buffer) {
+ buf = buffer.duplicate();
+ }
+ buf.position(pointer.start);
+ // not needed for reads
+ // buf.limit(pointer.end+pointer.start);
+ final byte[] swp = new byte[pointer.end-pointer.start];
+ buf.get(swp);
+ return swp;
+// } else {
+// free(pointer);
+// return null;
+// }
+ }
+
+
+ public long free(Pointer pointer2free) {
+ pointer2free.free = true;
+ pointer2free.created = 0;
+ pointer2free.lastHit = 0;
+ pointer2free.hits = 0;
+ pointer2free.expiresIn = 0;
+ pointer2free.clazz = null;
+ used.addAndGet(-( pointer2free.end-pointer2free.start));
+ pointers.add(pointer2free);
+ return pointer2free.end-pointer2free.start;
+ }
+
+ public void clear() {
+ pointers.clear();
+ createAndAddFirstPointer();
+ buffer.clear();
+ used.set(0);
+ }
+
+ public Pointer store(byte[] payload, Date expires) {
+ return store(payload, 0, expires.getTime());
+ }
+
+ public Pointer store(byte[] payload, long expiresIn) {
+ return store(payload, expiresIn, 0);
+ }
+
+ private synchronized Pointer store(byte[] payload, long expiresIn, long
expires) {
+ Pointer goodOne = firstMatch(payload.length);
+
+ if (goodOne == null ) {
+ throw new NullPointerException("did not find a suitable
buffer");
+ }
+
+ Pointer fresh = slice(goodOne, payload.length);
+
+
+ fresh.created = System.currentTimeMillis();
+ if (expiresIn > 0) {
+ fresh.expiresIn = expiresIn;
+ fresh.expires = 0;
+ } else if (expires > 0) {
+ fresh.expiresIn = 0;
+ fresh.expires = expires;
+ }
+
+ fresh.free = false;
+ used.addAndGet(payload.length);
+ ByteBuffer buf = buffer.slice();
+ buf.position(fresh.start);
+ try {
+ buf.put(payload);
+ } catch (BufferOverflowException e) {
+ // RpG not convincing - let's fix it later
+ goodOne.start = fresh.start;
+ goodOne.end = buffer.limit();
+ return null;
+ }
+ pointers.add(fresh);
+ return fresh;
+ }
+
+ private QueryResults select(String whereClause) throws
QueryParseException, QueryExecutionException {
+ Query q = new Query ();
+ q.parse ("SELECT * FROM " + Pointer.class.getCanonicalName() +
" WHERE " + whereClause);
+ QueryResults qr = q.execute (pointers);
+ return qr;
+ }
+
+ private QueryResults selectOrderBy(String whereClause, String orderBy,
String limit) throws QueryParseException, QueryExecutionException {
+ Query q = new Query ();
+ q.parse ("SELECT * FROM " + Pointer.class.getCanonicalName() +
" WHERE " + whereClause + " order by " + orderBy + " " + limit);
+ QueryResults qr = q.execute (pointers);
+ return qr;
+ }
+
+ public long collectLFU(int limit) {
+ if (limit<=0) limit = pointers.size()/10;
+ QueryResults qr;
+ try {
+ qr = selectOrderBy("free=false", "frequency", "limit 1,
" + limit);
+ @SuppressWarnings("unchecked")
+ List<Pointer> result = qr.getResults();
+ return free(result);
+ } catch (QueryParseException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (QueryExecutionException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return 0;
+ }
+
+
+
+ @SuppressWarnings("unchecked")
+ private List<Pointer> filter(final String whereClause) {
+ try {
+ return select(whereClause).getResults();
+ } catch (QueryParseException e) {
+ e.printStackTrace();
+ } catch (QueryExecutionException e) {
+ e.printStackTrace();
+ }
+ return (List<Pointer>) new ArrayList<Pointer>();
+ }
+
+ private long free(List<Pointer> pointers) {
+ long howMuch = 0;
+ for (Pointer expired : pointers) {
+ howMuch += free(expired);
+ }
+ return howMuch;
+ }
+
+ public void disposeExpiredRelative() {
+ free(filter("free=false and expiresIn > 0 and
(expiresIn+created) <= " + System.currentTimeMillis()));
+ }
+
+ public void disposeExpiredAbsolute() {
+ free(filter("free=false and expires > 0 and (expires) <= " +
System.currentTimeMillis()));
+ }
+
+ public long collectExpired() {
+ int limit = 50;
+ long disposed = free(filter("free=false and expiresIn > 0 and
(expiresIn+created) <= " + System.currentTimeMillis() + " limit 1, " + limit));
+ disposed += free(filter("free=false and expires > 0 and
(expires) <= " + System.currentTimeMillis() + " limit 1, 100" + limit));
+ return disposed;
+ }
+
+ public static long crc32(byte[] payload) {
+ final Checksum checksum = new CRC32();
+ checksum.update(payload,0,payload.length);
+ return checksum.getValue();
+ }
+
+ public Pointer update(Pointer pointer, byte[] payload) {
+ free(pointer);
+ return store(payload);
+ }
+
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBuffer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBuffer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,29 @@
+package org.apache.directmemory.memory;
+
+public class Pointer {
+ public int start;
+ public int end;
+ public long created;
+ public long expires;
+ public long expiresIn;
+ public long hits;
+ public boolean free;
+ public long lastHit;
+ public int bufferNumber;
+ public Class<? extends Object> clazz;
+
+ public byte[] content() {
+ return null;
+ }
+ public boolean expired() {
+ if (expires > 0 || expiresIn > 0) {
+ return (expiresIn + created <
System.currentTimeMillis());
+ } else {
+ return false;
+ }
+ }
+
+ public float getFrequency() {
+ return (float)(System.currentTimeMillis()-created)/hits;
+ }
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/DummyPojo.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/DummyPojo.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/DummyPojo.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/DummyPojo.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,22 @@
+package org.apache.directmemory.misc;
+import java.io.Serializable;
+
+
+public class DummyPojo implements Serializable {
+ /**
+ * A dummy pojo implementation for test purposes
+ */
+ private static final long serialVersionUID = 1L;
+ public DummyPojo() {
+
+ }
+
+ public DummyPojo(String name, int size) {
+ this.name = name;
+ this.size = size;
+ payLoad = new String(new byte [size]);
+ }
+ public String name;
+ public int size;
+ public String payLoad;
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/DummyPojo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/DummyPojo.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/Format.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/Format.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/Format.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/Format.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,28 @@
+package org.apache.directmemory.misc;
+
+public class Format {
+
+ public static String it(String string, Object ... args) {
+ java.util.Formatter formatter = new java.util.Formatter();
+ return formatter.format(string, args).toString();
+ }
+
+ public static String logo() {
+ return
+" ____ _ __ __ ___\r\n" +
+" / __ \\(_)________ _____/ /_/ |/ /___ ____ ___ ____ _______
__\r\n" +
+" / / / / // ___/ _ \\/ ___/ __/ /|_/ // _ \\/ __ `__ \\/ __ \\/ ___/ /
/ /\r\n" +
+" / /_/ / // / / __/ /__/ /_/ / / // __/ / / / / / /_/ / / / /_/ /
\r\n" +
+" /_____/_//_/ \\___/\\___/\\__/_/ /_/ \\___/_/ /_/ /_/\\____/_/
\\__, /\r\n" +
+" /____/ ";
+
+// return
+// " ___ _ _ _\r\n" +
+// " ( / \\ o _/_( / ) )\r\n" +
+// " / /, _ _ _, / / / / _ _ _ _ __ _ __ ,\r\n" +
+// "(/\\_/ (_/ (_(/_(__(__ / / (_(/_/ / / /_(_)/ (_/ (_/_\r\n" +
+// " /\r\n" +
+// " '";
+ }
+
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/Format.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/misc/Format.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/DummyPojoSerializer.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/DummyPojoSerializer.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/DummyPojoSerializer.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/DummyPojoSerializer.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,40 @@
+package org.apache.directmemory.serialization;
+
+import java.io.EOFException;
+import java.io.IOException;
+
+import org.apache.directmemory.measures.Ram;
+import org.apache.directmemory.misc.DummyPojo;
+
+import com.dyuproject.protostuff.LinkedBuffer;
+import com.dyuproject.protostuff.ProtostuffIOUtil;
+import com.dyuproject.protostuff.runtime.RuntimeSchema;
+
+public final class DummyPojoSerializer implements Serializer
+ {
+
+ final DummyPojo pojo = new DummyPojo("test", Ram.Kb(2));
+ final byte[] data;
+
+ public DummyPojoSerializer()
+ {
+ data = ProtostuffIOUtil.toByteArray(pojo,
RuntimeSchema.getSchema(DummyPojo.class), LinkedBuffer.allocate(2048));
+ }
+
+ @Override
+ public Object deserialize(byte[] source,
@SuppressWarnings({"rawtypes","unchecked"}) Class clazz) throws IOException,
ClassNotFoundException, InstantiationException, IllegalAccessException,
+ EOFException
+ {
+ // testing puts only
+ return pojo;
+ }
+
+ @Override
+ public byte[] serialize(Object obj,
@SuppressWarnings({"rawtypes","unchecked"}) Class clazz) throws IOException
+ {
+// byte[] ser = new byte[data.length];
+// System.arraycopy(data, 0, ser, 0, data.length);
+ return data;
+ }
+
+ }
\ No newline at end of file
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/DummyPojoSerializer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/DummyPojoSerializer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffSerializerV1.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffSerializerV1.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffSerializerV1.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffSerializerV1.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,46 @@
+package org.apache.directmemory.serialization;
+
+import java.io.IOException;
+
+import org.apache.directmemory.measures.Ram;
+
+import com.dyuproject.protostuff.LinkedBuffer;
+import com.dyuproject.protostuff.ProtostuffIOUtil;
+import com.dyuproject.protostuff.Schema;
+import com.dyuproject.protostuff.runtime.RuntimeSchema;
+
+public class ProtoStuffSerializerV1 implements Serializer {
+
+ static int serBufferSize = Ram.Kb(3);
+// static int serBufferSize = 300;
+
+ /* (non-Javadoc)
+ * @see
org.apache.directmemory.utils.Serializer#serialize(java.lang.Object,
java.lang.Class)
+ */
+ @SuppressWarnings("unchecked")
+ public byte[] serialize(Object obj, @SuppressWarnings("rawtypes") Class
clazz) throws IOException {
+ @SuppressWarnings("rawtypes")
+ Schema schema = RuntimeSchema.getSchema(clazz);
+ final LinkedBuffer buffer =
LinkedBuffer.allocate(serBufferSize);
+ byte[] protostuff = null;
+
+ try {
+ protostuff = ProtostuffIOUtil.toByteArray(obj, schema,
buffer);
+ } finally {
+ buffer.clear();
+ }
+ return protostuff;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.directmemory.utils.Serializer#deserialize(byte[],
java.lang.Class)
+ */
+ @SuppressWarnings("unchecked")
+ public Object deserialize(byte[] source, @SuppressWarnings("rawtypes")
Class clazz) throws IOException, ClassNotFoundException,
InstantiationException, IllegalAccessException {
+ final Object object = clazz.newInstance();
+ @SuppressWarnings("rawtypes")
+ final Schema schema = RuntimeSchema.getSchema(clazz);
+ ProtostuffIOUtil.mergeFrom(source, object, schema);
+ return object;
+ }
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffSerializerV1.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffSerializerV1.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffWithLinkedBufferSerializer.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffWithLinkedBufferSerializer.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffWithLinkedBufferSerializer.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffWithLinkedBufferSerializer.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,81 @@
+package org.apache.directmemory.serialization;
+
+import java.io.IOException;
+
+import org.apache.directmemory.measures.Ram;
+
+import com.dyuproject.protostuff.LinkedBuffer;
+import com.dyuproject.protostuff.ProtostuffIOUtil;
+import com.dyuproject.protostuff.Schema;
+import com.dyuproject.protostuff.runtime.RuntimeSchema;
+
+public final class ProtoStuffWithLinkedBufferSerializer implements Serializer {
+
+ static int bufferSize = Ram.Kb(3);
+
+
+ /*
+ *
+ *
+ *
+ LinkedBuffer buffer8k = ...;
+ try
+ {
+ ProtostuffIOUtil.writeTo(new ByteBufferOutputStream() { // paging
logic }, message, schema, buffer8k)
+ }
+ finally
+ {
+ buffer8k.clear();
+ }
+
+ ProtostuffIOUtil.mergeFrom(new ByteArrayInputStream() { // paging
logic}, message, schema, buffer8k);
+
+*/
+
+ private static final ThreadLocal<LinkedBuffer> localBuffer = new
ThreadLocal<LinkedBuffer>() {
+ protected LinkedBuffer initialValue() {
+ return LinkedBuffer.allocate(bufferSize);
+ }
+ };
+
+ public ProtoStuffWithLinkedBufferSerializer() {
+
+ }
+
+
+ public ProtoStuffWithLinkedBufferSerializer(int bufferSize) {
+ ProtoStuffWithLinkedBufferSerializer.bufferSize =bufferSize;
+ }
+
+
+
+ /* (non-Javadoc)
+ * @see
org.apache.directmemory.utils.Serializer#serialize(java.lang.Object,
java.lang.Class)
+ */
+ @SuppressWarnings("unchecked")
+ public byte[] serialize(Object obj, @SuppressWarnings("rawtypes") Class
clazz) throws IOException {
+ @SuppressWarnings("rawtypes")
+ Schema schema = RuntimeSchema.getSchema(clazz);
+ final LinkedBuffer buffer = localBuffer.get();
+ byte[] protostuff = null;
+
+ try {
+ protostuff = ProtostuffIOUtil.toByteArray(obj, schema,
buffer);
+ } finally {
+ buffer.clear();
+ }
+ return protostuff;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.directmemory.utils.Serializer#deserialize(byte[],
java.lang.Class)
+ */
+ @SuppressWarnings("unchecked")
+ public Object deserialize(byte[] source, @SuppressWarnings("rawtypes")
Class clazz) throws IOException, ClassNotFoundException,
InstantiationException, IllegalAccessException {
+ Object object = clazz.newInstance();
+ @SuppressWarnings("rawtypes")
+ Schema schema = RuntimeSchema.getSchema(clazz);
+ ProtostuffIOUtil.mergeFrom(source, object, schema);
+ return object;
+ }
+}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffWithLinkedBufferSerializer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/ProtoStuffWithLinkedBufferSerializer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/Serializer.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/Serializer.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/Serializer.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/Serializer.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,13 @@
+package org.apache.directmemory.serialization;
+
+import java.io.EOFException;
+import java.io.IOException;
+
+public interface Serializer {
+
+ public abstract byte[] serialize(Object obj,
@SuppressWarnings({"rawtypes","unchecked"}) Class clazz) throws IOException;
+
+ public abstract Object deserialize(byte[] source,
@SuppressWarnings({"rawtypes","unchecked"}) Class clazz) throws IOException,
+ ClassNotFoundException, InstantiationException,
IllegalAccessException, EOFException;
+
+}
\ No newline at end of file
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/Serializer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/Serializer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/StandardSerializer.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/StandardSerializer.java?rev=1182758&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/StandardSerializer.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/StandardSerializer.java
Thu Oct 13 10:17:00 2011
@@ -0,0 +1,27 @@
+package org.apache.directmemory.serialization;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+
+public class StandardSerializer implements Serializer {
+
+ public byte[] serialize(Object obj,
@SuppressWarnings({"rawtypes","unchecked"}) Class clazz) throws IOException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ oos.writeObject(obj);
+ oos.flush();
+ oos.close();
+ return baos.toByteArray();
+ }
+
+ public Serializable deserialize(byte[] source,
@SuppressWarnings({"rawtypes","unchecked"}) Class clazz) throws IOException,
ClassNotFoundException {
+ ByteArrayInputStream bis = new ByteArrayInputStream(source);
+ ObjectInputStream ois = new ObjectInputStream(bis);
+ Serializable obj = (Serializable) ois.readObject();
+ ois.close();
+ return obj;
+ }}
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/StandardSerializer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/StandardSerializer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision