Author: bperroud
Date: Sat Feb 25 10:32:17 2012
New Revision: 1293572
URL: http://svn.apache.org/viewvc?rev=1293572&view=rev
Log:
DIRECTMEMORY-72 : Pointer to become an interface, public attribute to be
encapsulated and PointerImpl the default implementation
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/PointerImpl.java
Modified:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/AbstractOffHeapMemoryBuffer.java
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBufferImpl.java
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMergingMemoryBufferImpl.java
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractOffHeapMemoryBufferTest.java
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseTest.java
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplWithMerginOHMBAndAllocationPolicyTest.java
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplWithMerginOHMBTest.java
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerTest.java
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/NIOTest.java
incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryStore.java
Modified:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java?rev=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java
(original)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java
Sat Feb 25 10:32:17 2012
@@ -146,7 +146,7 @@ public class CacheServiceImpl<K, V>
@SuppressWarnings( "unchecked" ) // type driven by the compiler
Class<? extends V> clazz = (Class<? extends V>) value.getClass();
- ptr.clazz = clazz;
+ ptr.setClazz( clazz );
return ptr;
}
catch ( IOException e )
@@ -187,10 +187,10 @@ public class CacheServiceImpl<K, V>
{
return null;
}
- if ( ptr.expired() || ptr.free )
+ if ( ptr.isExpired() || ptr.isFree() )
{
map.remove( key );
- if ( !ptr.free )
+ if ( !ptr.isFree() )
{
memoryManager.free( ptr );
}
@@ -210,10 +210,10 @@ public class CacheServiceImpl<K, V>
{
return null;
}
- if ( ptr.expired() || ptr.free )
+ if ( ptr.isExpired() || ptr.isFree() )
{
map.remove( key );
- if ( !ptr.free )
+ if ( !ptr.isFree() )
{
memoryManager.free( ptr );
}
@@ -223,7 +223,7 @@ public class CacheServiceImpl<K, V>
{
try
{
- return serializer.deserialize( memoryManager.retrieve( ptr ),
ptr.clazz );
+ return serializer.deserialize( memoryManager.retrieve( ptr ),
ptr.getClazz() );
}
catch ( EOFException e )
{
@@ -385,7 +385,7 @@ public class CacheServiceImpl<K, V>
{
Pointer<V> ptr = memoryManager.allocate( type, size, -1, -1 );
map.put( key, ptr );
- ptr.clazz = type;
+ ptr.setClazz( type );
return ptr;
}
}
Modified:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/AbstractOffHeapMemoryBuffer.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/AbstractOffHeapMemoryBuffer.java?rev=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/AbstractOffHeapMemoryBuffer.java
(original)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/AbstractOffHeapMemoryBuffer.java
Sat Feb 25 10:32:17 2012
@@ -56,9 +56,8 @@ public abstract class AbstractOffHeapMem
@Override
public boolean apply( Pointer<T> input )
{
- return !input.free
- && input.expiresIn > 0
- && ( input.expiresIn + input.created ) <=
System.currentTimeMillis();
+ return !input.isFree()
+ && !input.isExpired();
}
};
@@ -69,9 +68,8 @@ public abstract class AbstractOffHeapMem
@Override
public boolean apply( Pointer<T> input )
{
- return !input.free
- && input.expires > 0
- && input.expires <= System.currentTimeMillis();
+ return !input.isFree()
+ && !input.isExpired();
}
};
@@ -107,13 +105,7 @@ public abstract class AbstractOffHeapMem
protected void freePointer( Pointer<T> pointer2free )
{
- pointer2free.free = true;
- pointer2free.created = 0;
- pointer2free.lastHit = 0;
- pointer2free.hits = 0;
- pointer2free.expiresIn = 0;
- pointer2free.clazz = null;
- pointer2free.directBuffer = null;
+ pointer2free.reset();
used.addAndGet( -pointer2free.getCapacity() );
}
@@ -197,7 +189,7 @@ public abstract class AbstractOffHeapMem
@Override
public boolean apply( Pointer<T> input )
{
- return !input.free;
+ return !input.isFree();
}
} ), limit ) );
@@ -222,27 +214,18 @@ public abstract class AbstractOffHeapMem
protected void resetPointer( final Pointer<T> pointer )
{
- pointer.free = true;
- pointer.created = 0;
- pointer.lastHit = 0;
- pointer.hits = 0;
- pointer.expiresIn = 0;
- pointer.clazz = null;
- pointer.directBuffer = null;
+ pointer.reset();
}
protected void setExpiration( final Pointer<T> pointer, long expiresIn,
long expires )
{
-
if ( expiresIn > 0 )
{
- pointer.expiresIn = expiresIn;
- pointer.expires = 0;
+ pointer.setExpiration( 0, expiresIn );
}
else if ( expires > 0 )
{
- pointer.expiresIn = 0;
- pointer.expires = expires;
+ pointer.setExpiration( expires, 0 );
}
}
Modified:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java?rev=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java
(original)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java
Sat Feb 25 10:32:17 2012
@@ -83,17 +83,17 @@ public class MemoryManagerServiceImpl<V>
public Pointer<V> update( Pointer<V> pointer, byte[] payload )
{
- return buffers.get( pointer.bufferNumber ).update( pointer, payload );
+ return buffers.get( pointer.getBufferNumber() ).update( pointer,
payload );
}
public byte[] retrieve( Pointer<V> pointer )
{
- return buffers.get( pointer.bufferNumber ).retrieve( pointer );
+ return buffers.get( pointer.getBufferNumber() ).retrieve( pointer );
}
public void free( Pointer<V> pointer )
{
- buffers.get( pointer.bufferNumber ).free( pointer );
+ buffers.get( pointer.getBufferNumber() ).free( pointer );
}
public void clear()
Modified:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBufferImpl.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBufferImpl.java?rev=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBufferImpl.java
(original)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMemoryBufferImpl.java
Sat Feb 25 10:32:17 2012
@@ -76,7 +76,7 @@ public class OffHeapMemoryBufferImpl<T>
protected Pointer<T> createAndAddFirstPointer()
{
- Pointer<T> first = new Pointer<T>();
+ PointerImpl<T> first = new PointerImpl<T>();
first.bufferNumber = bufferNumber;
first.start = 0;
first.free = true;
@@ -87,12 +87,12 @@ public class OffHeapMemoryBufferImpl<T>
protected Pointer<T> slice( Pointer<T> existing, int capacity )
{
- Pointer<T> fresh = new Pointer<T>();
- fresh.bufferNumber = existing.bufferNumber;
- fresh.start = existing.start;
+ PointerImpl<T> fresh = new PointerImpl<T>();
+ fresh.bufferNumber = existing.getBufferNumber();
+ fresh.start = existing.getStart();
fresh.end = fresh.start + capacity - 1; // 0 indexed
fresh.free = true;
- existing.start = fresh.end + 1; // more readable
+ existing.setStart( fresh.end + 1 ); // more readable
return fresh;
}
@@ -100,7 +100,7 @@ public class OffHeapMemoryBufferImpl<T>
{
for ( Pointer<T> ptr : pointers )
{
- if ( ptr.free && ptr.getCapacity() >= capacity )
+ if ( ptr.isFree() && ptr.getCapacity() >= capacity )
{
return ptr;
}
@@ -115,13 +115,12 @@ public class OffHeapMemoryBufferImpl<T>
public byte[] retrieve( Pointer<T> pointer )
{
- pointer.lastHit = System.currentTimeMillis();
- pointer.hits++;
-
+ pointer.hit();
+
ByteBuffer buf = null;
- if ( pointer.clazz == ByteBuffer.class )
+ if ( pointer.getClazz() == ByteBuffer.class )
{
- buf = pointer.directBuffer;
+ buf = pointer.getDirectBuffer();
buf.position( 0 );
}
else
@@ -129,7 +128,7 @@ public class OffHeapMemoryBufferImpl<T>
synchronized ( buffer )
{
buf = buffer.duplicate();
- buf.position( pointer.start );
+ buf.position( pointer.getStart() );
}
}
@@ -149,7 +148,7 @@ public class OffHeapMemoryBufferImpl<T>
{
for (final Pointer<T> pointer : pointers)
{
- pointer.free = true;
+ pointer.setFree( true );
}
allocationErrors = 0;
pointers.clear();
@@ -180,13 +179,13 @@ public class OffHeapMemoryBufferImpl<T>
Pointer<T> fresh = slice( goodOne, payload.length );
- fresh.created = System.currentTimeMillis();
+ fresh.createdNow();
setExpiration( fresh, expiresIn, expires );
- fresh.free = false;
+ fresh.setFree( false );
used.addAndGet( payload.length );
ByteBuffer buf = buffer.slice();
- buf.position( fresh.start );
+ buf.position( fresh.getStart() );
try
{
buf.put( payload );
@@ -194,8 +193,8 @@ public class OffHeapMemoryBufferImpl<T>
catch ( BufferOverflowException e )
{
// RpG not convincing - let's fix it later
- goodOne.start = fresh.start;
- goodOne.end = buffer.limit();
+ goodOne.setStart( fresh.getStart() );
+ goodOne.setEnd( buffer.limit() );
return null;
}
pointers.add( fresh );
@@ -234,17 +233,17 @@ public class OffHeapMemoryBufferImpl<T>
Pointer<T> fresh = slice( goodOne, size );
- fresh.created = System.currentTimeMillis();
+ fresh.createdNow();
setExpiration( fresh, expiresIn, expires );
- fresh.free = false;
+ fresh.setFree( false );
used.addAndGet( size );
ByteBuffer buf = buffer.slice();
- buf.limit( fresh.start + size );
- buf.position( fresh.start );
+ buf.limit( fresh.getStart() + size );
+ buf.position( fresh.getStart() );
- fresh.directBuffer = buf.slice();
- fresh.clazz = type;
+ fresh.setDirectBuffer( buf.slice() );
+ fresh.setClazz( type );
pointers.add( fresh );
return fresh;
}
Modified:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMergingMemoryBufferImpl.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMergingMemoryBufferImpl.java?rev=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMergingMemoryBufferImpl.java
(original)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/OffHeapMergingMemoryBufferImpl.java
Sat Feb 25 10:32:17 2012
@@ -128,7 +128,7 @@ public class OffHeapMergingMemoryBufferI
*/
protected Pointer<V> createAndAddFirstPointer()
{
- Pointer<V> first = new Pointer<V>( 0, buffer.capacity() - 1 );
+ PointerImpl<V> first = new PointerImpl<V>( 0, buffer.capacity() - 1 );
first.bufferNumber = bufferNumber;
first.free = true;
freePointersBySizeDesc.put( first, DEFAULT_VALUE );
@@ -162,11 +162,10 @@ public class OffHeapMergingMemoryBufferI
@Override
public byte[] retrieve( Pointer<V> pointer )
{
- pointer.lastHit = System.currentTimeMillis();
- pointer.hits++;
-
+ pointer.hit();
+
ByteBuffer buf = buffer.duplicate();
- buf.position( pointer.start );
+ buf.position( pointer.getStart() );
final byte[] swp = new byte[pointer.getCapacity()];
buf.get( swp );
@@ -178,7 +177,7 @@ public class OffHeapMergingMemoryBufferI
{
// Avoid freeing twice the same pointer. Maybe atomic boolean is
required here.
- if ( !pointer2free.free )
+ if ( !pointer2free.isFree() )
{
try
@@ -197,7 +196,7 @@ public class OffHeapMergingMemoryBufferI
.descendingKeySet() )
{
- if ( adjacentPointer.end + 1 != lowerPointerToMerge.start )
+ if ( adjacentPointer.getEnd() + 1 !=
lowerPointerToMerge.getStart() )
{
break;
}
@@ -212,7 +211,7 @@ public class OffHeapMergingMemoryBufferI
.navigableKeySet() )
{
- if ( adjacentPointer.start - 1 != higherPointerToMerge.end
)
+ if ( adjacentPointer.getStart() - 1 !=
higherPointerToMerge.getEnd() )
{
break;
}
@@ -224,15 +223,15 @@ public class OffHeapMergingMemoryBufferI
if ( lowerPointerToMerge != higherPointerToMerge )
{
- final Pointer<V> mergedPointer = new Pointer<V>(
lowerPointerToMerge.start, higherPointerToMerge.end );
- mergedPointer.free = true;
+ final Pointer<V> mergedPointer = new PointerImpl<V>(
lowerPointerToMerge.getStart(), higherPointerToMerge.getEnd() );
+ mergedPointer.setFree( true );
final Iterator<Pointer<V>> adjacentPointersIterator =
freePointersByMemoryOffsetAsc
.subMap( lowerPointerToMerge, true,
higherPointerToMerge, true ).navigableKeySet().iterator();
while ( adjacentPointersIterator.hasNext() )
{
Pointer<V> adjacentPointer =
adjacentPointersIterator.next();
- adjacentPointer.free = true; // if a reference to the
pointer is kept, we must not use it.
+ adjacentPointer.setFree( true ); // if a reference to
the pointer is kept, we must not use it.
freePointersBySizeDesc.remove( adjacentPointer );
adjacentPointersIterator.remove();
}
@@ -275,7 +274,7 @@ public class OffHeapMergingMemoryBufferI
for ( Pointer<V> pointer : usedPointers )
{
- pointer.free = true;
+ pointer.setFree( true );
// free( pointer ); // too costly to merge every
pointers while the will be cleared in a row
}
usedPointers.clear();
@@ -299,11 +298,11 @@ public class OffHeapMergingMemoryBufferI
setExpiration( allocatedPointer, expiresIn, expires );
- allocatedPointer.free = false;
+ allocatedPointer.setFree( false );
final ByteBuffer buf = buffer.duplicate();
- buf.position( allocatedPointer.start );
- buf.limit( allocatedPointer.start + size );
+ buf.position( allocatedPointer.getStart() );
+ buf.limit( allocatedPointer.getStart() + size );
buf.put( payload );
@@ -341,14 +340,14 @@ public class OffHeapMergingMemoryBufferI
if ( goodOne.getCapacity() != size )
{
- fresh = new Pointer<V>( goodOne.start, goodOne.start + size -
1 );
- fresh.bufferNumber = getBufferNumber();
- fresh.free = true;
- fresh.created = System.currentTimeMillis();
+ fresh = new PointerImpl<V>( goodOne.getStart(),
goodOne.getStart() + size - 1 );
+ fresh.setBufferNumber( getBufferNumber() );
+ fresh.setFree( true );
+ fresh.createdNow();
// create a new pointer for the remaining space
- final Pointer<V> newGoodOne = new Pointer<V>( fresh.end + 1,
goodOne.end );
- newGoodOne.free = true;
+ final Pointer<V> newGoodOne = new PointerImpl<V>(
fresh.getEnd() + 1, goodOne.getEnd() );
+ newGoodOne.setFree( true );
// and add it to the free lists
freePointersByMemoryOffsetAsc.put( newGoodOne, DEFAULT_VALUE );
@@ -377,12 +376,12 @@ public class OffHeapMergingMemoryBufferI
{
setExpiration( allocatedPointer, expiresIn, expires );
- allocatedPointer.free = false;
+ allocatedPointer.setFree( false );
final ByteBuffer buf = buffer.duplicate();
- buf.position( allocatedPointer.start );
- buf.limit( allocatedPointer.start + size );
- allocatedPointer.directBuffer = buf.slice();
+ buf.position( allocatedPointer.getStart() );
+ buf.limit( allocatedPointer.getStart() + size );
+ allocatedPointer.setDirectBuffer( buf.slice() );
used.addAndGet( size );
}
@@ -431,8 +430,8 @@ public class OffHeapMergingMemoryBufferI
@Override
public int compare( final Pointer<V> pointer0, final Pointer<V>
pointer1 )
{
- final int offset0 = pointer0.start;
- final int offset1 = pointer1.start;
+ final int offset0 = pointer0.getStart();
+ final int offset1 = pointer1.getStart();
if ( offset0 < offset1 )
{
@@ -468,7 +467,7 @@ public class OffHeapMergingMemoryBufferI
// Create an independent view of the buffer
final ByteBuffer buf = buffer.duplicate();
// Set it at the right start offset
- buf.position( pointer.start );
+ buf.position( pointer.getStart() );
// Write the content in the shared buffer
buf.put( payload );
Modified:
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=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java
(original)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java
Sat Feb 25 10:32:17 2012
@@ -1,90 +1,67 @@
package org.apache.directmemory.memory;
+import java.nio.ByteBuffer;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
+ * or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
+ * regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
+ * KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
-import static java.lang.System.currentTimeMillis;
-import static java.lang.String.format;
+public interface Pointer<T>
+{
+
+ byte[] content();
-import java.nio.ByteBuffer;
+ boolean isFree();
-public class Pointer<T>
-{
- public int start;
+ void setFree( boolean free );
- public int end;
+ boolean isExpired();
- public long created;
+ float getFrequency();
- public long expires;
+ int getCapacity();
- public long expiresIn;
+ void reset();
- public long hits;
+ int getBufferNumber();
- public boolean free;
+ void setBufferNumber( int bufferNumber );
- public long lastHit;
+ int getStart();
- public int bufferNumber;
+ void setStart( int start );
- public Class<? extends T> clazz;
+ int getEnd();
- public ByteBuffer directBuffer = null;
+ void setEnd( int end );
- public Pointer()
- {
- }
+ void hit();
- public Pointer( int start, int end )
- {
- this.start = start;
- this.end = end;
- }
+ Class<? extends T> getClazz();
- public byte[] content()
- {
- return null;
- }
+ void setClazz( Class<? extends T> clazz );
- public boolean expired()
- {
- if ( expires > 0 || expiresIn > 0 )
- {
- return ( expiresIn + created < currentTimeMillis() );
- }
- return false;
- }
+ ByteBuffer getDirectBuffer();
- public float getFrequency()
- {
- return (float) ( currentTimeMillis() - created ) / hits;
- }
+ void setDirectBuffer( ByteBuffer directBuffer );
- public int getCapacity()
- {
- return end - start + 1;
- }
+ void createdNow();
+
+ void setExpiration( long expires, long expiresIn );
- @Override
- public String toString()
- {
- return format( "%s[%s, %s] %s free", getClass().getSimpleName(),
start, end,( free ? "" : "not" ) );
- }
}
Added:
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/PointerImpl.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/PointerImpl.java?rev=1293572&view=auto
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/PointerImpl.java
(added)
+++
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/PointerImpl.java
Sat Feb 25 10:32:17 2012
@@ -0,0 +1,199 @@
+package org.apache.directmemory.memory;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static java.lang.System.currentTimeMillis;
+import static java.lang.String.format;
+
+import java.nio.ByteBuffer;
+
+public class PointerImpl<T>
+ implements Pointer<T>
+{
+ 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 T> clazz;
+
+ public ByteBuffer directBuffer = null;
+
+ public PointerImpl()
+ {
+ }
+
+ public PointerImpl( int start, int end )
+ {
+ this.start = start;
+ this.end = end;
+ }
+
+ @Override
+ public byte[] content()
+ {
+ return null;
+ }
+
+ @Override
+ public float getFrequency()
+ {
+ return (float) ( currentTimeMillis() - created ) / hits;
+ }
+
+ @Override
+ public int getCapacity()
+ {
+ return end - start + 1;
+ }
+
+ @Override
+ public String toString()
+ {
+ return format( "%s[%s, %s] %s free", getClass().getSimpleName(),
start, end, ( free ? "" : "not" ) );
+ }
+
+ @Override
+ public void reset()
+ {
+ free = true;
+ created = 0;
+ lastHit = 0;
+ hits = 0;
+ expiresIn = 0;
+ clazz = null;
+ directBuffer = null;
+ }
+
+ @Override
+ public boolean isFree()
+ {
+ return free;
+ }
+
+ @Override
+ public boolean isExpired()
+ {
+ if ( expires > 0 || expiresIn > 0 )
+ {
+ return ( expiresIn + created < currentTimeMillis() );
+ }
+ return false;
+ }
+
+ @Override
+ public int getBufferNumber()
+ {
+ return bufferNumber;
+ }
+
+ @Override
+ public int getStart()
+ {
+ return start;
+ }
+
+ @Override
+ public int getEnd()
+ {
+ return end;
+ }
+
+ @Override
+ public void setStart( int start )
+ {
+ this.start = start;
+ }
+
+ @Override
+ public void hit()
+ {
+ lastHit = System.currentTimeMillis();
+ hits++;
+ }
+
+ @Override
+ public Class<? extends T> getClazz()
+ {
+ return clazz;
+ }
+
+ @Override
+ public ByteBuffer getDirectBuffer()
+ {
+ return directBuffer;
+ }
+
+ @Override
+ public void setFree( boolean free )
+ {
+ this.free = free;
+ }
+
+ @Override
+ public void setEnd( int end )
+ {
+ this.end = end;
+ }
+
+ @Override
+ public void setClazz( Class<? extends T> clazz )
+ {
+ this.clazz = clazz;
+ }
+
+ @Override
+ public void setDirectBuffer( ByteBuffer directBuffer )
+ {
+ this.directBuffer = directBuffer;
+ }
+
+ @Override
+ public void createdNow()
+ {
+ created = System.currentTimeMillis();
+ }
+
+ @Override
+ public void setBufferNumber( int bufferNumber )
+ {
+ this.bufferNumber = bufferNumber;
+ }
+
+ @Override
+ public void setExpiration( long expires, long expiresIn )
+ {
+ this.expires = expires;
+ this.expiresIn = expiresIn;
+ }
+}
Modified:
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractOffHeapMemoryBufferTest.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractOffHeapMemoryBufferTest.java?rev=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractOffHeapMemoryBufferTest.java
(original)
+++
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractOffHeapMemoryBufferTest.java
Sat Feb 25 10:32:17 2012
@@ -59,8 +59,8 @@ public abstract class AbstractOffHeapMem
Pointer<Object> pointer1 = offHeapMemoryBuffer.store( SMALL_PAYLOAD );
Assert.assertNotNull( pointer1 );
- Assert.assertFalse( pointer1.free );
- Assert.assertNull( pointer1.directBuffer );
+ Assert.assertFalse( pointer1.isFree() );
+ Assert.assertNull( pointer1.getDirectBuffer() );
Pointer<Object> pointer2 = offHeapMemoryBuffer.store( SMALL_PAYLOAD );
Assert.assertNull( pointer2 );
@@ -161,7 +161,7 @@ public abstract class AbstractOffHeapMem
Assert.assertNotNull( "Cannot store " + size4 + " bytes", pointer4 );
offHeapMemoryBuffer.free( pointer1 );
- Assert.assertTrue( pointer1.free );
+ Assert.assertTrue( pointer1.isFree() );
offHeapMemoryBuffer.free( pointer3 );
@@ -207,8 +207,8 @@ public abstract class AbstractOffHeapMem
}
// After a clear occurs, pointers allocated before the clear should be
set as "free"
- Assert.assertTrue( pointer6.free );
- Assert.assertTrue( pointer7.free );
+ Assert.assertTrue( pointer6.isFree() );
+ Assert.assertTrue( pointer7.isFree() );
}
@@ -307,7 +307,7 @@ public abstract class AbstractOffHeapMem
Assert.assertNotNull( pointer3 );
byte[] payload3 = MemoryTestUtils.generateRandomPayload(
NUMBER_OF_OBJECTS / 4 * SMALL_PAYLOAD_LENGTH );
- pointer3.directBuffer.put( payload3 );
+ pointer3.getDirectBuffer().put( payload3 );
byte[] retrievePayload3 = offHeapMemoryBuffer.retrieve( pointer3 );
Assert.assertEquals( new String( payload3 ), new String(
retrievePayload3 ) );
@@ -368,15 +368,15 @@ public abstract class AbstractOffHeapMem
final byte[] otherPayload = MemoryTestUtils.generateRandomPayload(
SMALL_PAYLOAD_LENGTH );
final Pointer<Object> otherPointer = offHeapMemoryBuffer.update(
pointer, otherPayload );
Assert.assertNotNull( otherPointer );
- Assert.assertEquals( pointer.start, otherPointer.start );
- Assert.assertEquals( pointer.end, otherPointer.end );
+ Assert.assertEquals( pointer.getStart(), otherPointer.getStart() );
+ Assert.assertEquals( pointer.getEnd(), otherPointer.getEnd() );
Assert.assertEquals( new String( otherPayload ), new String(
offHeapMemoryBuffer.retrieve( otherPointer ) ) );
final byte[] evenAnotherPayload =
MemoryTestUtils.generateRandomPayload( SMALL_PAYLOAD_LENGTH / 2 );
final Pointer<Object> evenAnotherPointer = offHeapMemoryBuffer.update(
pointer, evenAnotherPayload );
Assert.assertNotNull( evenAnotherPointer );
- Assert.assertEquals( pointer.start, evenAnotherPointer.start );
- Assert.assertEquals( pointer.end, evenAnotherPointer.end );
+ Assert.assertEquals( pointer.getStart(), evenAnotherPointer.getStart()
);
+ Assert.assertEquals( pointer.getEnd(), evenAnotherPointer.getEnd() );
Assert.assertEquals( 4, new String( offHeapMemoryBuffer.retrieve(
evenAnotherPointer ) ).length() );
Assert.assertTrue( new String( offHeapMemoryBuffer.retrieve(
evenAnotherPointer ) )
.startsWith( new String( evenAnotherPayload ) ) );
@@ -414,7 +414,7 @@ public abstract class AbstractOffHeapMem
final byte[] allocatedPayload1 =
MemoryTestUtils.generateRandomPayload( size1 );
final Pointer<Object> allocatedPointer1 =
offHeapMemoryBuffer.allocate( Object.class, allocatedPayload1.length, -1, -1 );
Assert.assertNotNull( allocatedPointer1 );
- final ByteBuffer buffer1 = allocatedPointer1.directBuffer;
+ final ByteBuffer buffer1 = allocatedPointer1.getDirectBuffer();
Assert.assertNotNull( buffer1 );
Assert.assertEquals( 0, buffer1.position() );
Assert.assertEquals( size1, buffer1.limit() );
@@ -426,7 +426,7 @@ public abstract class AbstractOffHeapMem
final byte[] allocatedPayload2 =
MemoryTestUtils.generateRandomPayload( size2 );
final Pointer<Object> allocatedPointer2 =
offHeapMemoryBuffer.allocate( Object.class, allocatedPayload2.length, -1, -1 );
Assert.assertNotNull( allocatedPointer2 );
- final ByteBuffer buffer2 = allocatedPointer2.directBuffer;
+ final ByteBuffer buffer2 = allocatedPointer2.getDirectBuffer();
Assert.assertNotNull( buffer2 );
Assert.assertEquals( size2, buffer2.limit() );
Assert.assertEquals( size2, buffer2.capacity() );
Modified:
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseTest.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseTest.java?rev=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseTest.java
(original)
+++
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseTest.java
Sat Feb 25 10:32:17 2012
@@ -62,7 +62,7 @@ public class BaseTest
Pointer<Object> p = mem.store( new byte[size] );
assertNotNull( p );
- assertEquals( size, p.end );
+ assertEquals( size, p.getEnd() );
assertEquals( size, mem.used() );
mem.free( p );
assertEquals( 0, mem.used() );
@@ -161,11 +161,11 @@ public class BaseTest
{
byte[] payload = ( test + " - " + i ).getBytes();
Pointer<Object> p = mem.store( payload );
- logger.info( "p.start=" + p.start );
- logger.info( "p.end=" + p.end );
+ logger.info( "p.start=" + p.getStart() );
+ logger.info( "p.end=" + p.getEnd() );
if ( lastP != null )
{
- assertEquals( lastP.end + 1, p.start );
+ assertEquals( lastP.getEnd() + 1, p.getStart() );
}
assertEquals( p.getCapacity(), payload.length );
lastP = p;
Modified:
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplWithMerginOHMBAndAllocationPolicyTest.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplWithMerginOHMBAndAllocationPolicyTest.java?rev=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplWithMerginOHMBAndAllocationPolicyTest.java
(original)
+++
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplWithMerginOHMBAndAllocationPolicyTest.java
Sat Feb 25 10:32:17 2012
@@ -197,7 +197,7 @@ public class MemoryManagerServiceImplWit
Assert.assertNotNull( pointer3 );
byte[] payload3 = MemoryTestUtils.generateRandomPayload(
NUMBER_OF_OBJECTS / 4 * SMALL_PAYLOAD.length );
- pointer3.directBuffer.put( payload3 );
+ pointer3.getDirectBuffer().put( payload3 );
byte[] retrievePayload3 = memoryManagerService.retrieve( pointer3 );
Assert.assertEquals( new String( payload3 ), new String(
retrievePayload3 ) );
Modified:
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplWithMerginOHMBTest.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplWithMerginOHMBTest.java?rev=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplWithMerginOHMBTest.java
(original)
+++
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplWithMerginOHMBTest.java
Sat Feb 25 10:32:17 2012
@@ -192,7 +192,7 @@ public class MemoryManagerServiceImplWit
Assert.assertNotNull( pointer3 );
byte[] payload3 = MemoryTestUtils.generateRandomPayload(
NUMBER_OF_OBJECTS / 4 * SMALL_PAYLOAD.length );
- pointer3.directBuffer.put( payload3 );
+ pointer3.getDirectBuffer().put( payload3 );
byte[] retrievePayload3 = memoryManagerService.retrieve( pointer3 );
Assert.assertEquals( new String( payload3 ), new String(
retrievePayload3 ) );
Modified:
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerTest.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerTest.java?rev=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerTest.java
(original)
+++
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerTest.java
Sat Feb 25 10:32:17 2012
@@ -93,7 +93,7 @@ public class MemoryManagerTest
{
for ( Pointer<Object> ptr : ((OffHeapMemoryBufferImpl<Object>)
buffer).getPointers() )
{
- if ( !ptr.free )
+ if ( !ptr.isFree() )
{
byte[] res = MemoryManager.retrieve( ptr );
assertNotNull( res );
Modified:
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/NIOTest.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/NIOTest.java?rev=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/NIOTest.java
(original)
+++
incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/NIOTest.java
Sat Feb 25 10:32:17 2012
@@ -67,7 +67,7 @@ public class NIOTest
int size = rnd.nextInt( 10 ) * (int) MemoryManager.capacity() / 100;
logger.info( "payload size=" + Ram.inKb( size ) );
Pointer<Object> p = MemoryManager.allocate( size );
- ByteBuffer b = p.directBuffer;
+ ByteBuffer b = p.getDirectBuffer();
logger.info( "allocated" );
assertNotNull( p );
assertNotNull( b );
Modified:
incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryStore.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryStore.java?rev=1293572&r1=1293571&r2=1293572&view=diff
==============================================================================
---
incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryStore.java
(original)
+++
incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryStore.java
Sat Feb 25 10:32:17 2012
@@ -242,7 +242,7 @@ public class DirectMemoryStore
return null;
}
- Lock lock = bufferLocks.get( pointer.bufferNumber );
+ Lock lock = bufferLocks.get( pointer.getBufferNumber() );
lock.lock();
try
{
@@ -277,7 +277,7 @@ public class DirectMemoryStore
return false;
}
- Lock lock = bufferLocks.get( pointer.bufferNumber );
+ Lock lock = bufferLocks.get( pointer.getBufferNumber() );
lock.lock();
try
{
@@ -317,7 +317,7 @@ public class DirectMemoryStore
return null;
}
- Lock lock = bufferLocks.get( pointer.bufferNumber );
+ Lock lock = bufferLocks.get( pointer.getBufferNumber() );
lock.lock();
try
{