Made Pointer::BufferNumber a final field of the PointerImpl implementation since there can't be a non MemoryBuffer pointer anymore. This has an advantage in the memory visibility of the field when cleaning short living pointers.
git-svn-id: https://svn.apache.org/repos/asf/directmemory/trunk@1404610 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java b/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java
index 68d9227..06e8474 100644
--- a/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java
+++ b/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java
@@ -269,10 +269,9 @@
final long expires )
{
- Pointer<V> p = new PointerImpl<V>( buffer );
+ Pointer<V> p = new PointerImpl<V>( buffer, allocatorIndex );
p.setExpiration( expires, expiresIn );
- p.setBufferNumber( allocatorIndex );
p.setFree( false );
p.createdNow();
diff --git a/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java b/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java
index b41328b..407d4f7 100644
--- a/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java
+++ b/directmemory-cache/src/main/java/org/apache/directmemory/memory/Pointer.java
@@ -40,8 +40,6 @@
int getBufferNumber();
- void setBufferNumber( int bufferNumber );
-
long getSize();
void hit();
diff --git a/directmemory-cache/src/main/java/org/apache/directmemory/memory/PointerImpl.java b/directmemory-cache/src/main/java/org/apache/directmemory/memory/PointerImpl.java
index de21ca7..350da54 100644
--- a/directmemory-cache/src/main/java/org/apache/directmemory/memory/PointerImpl.java
+++ b/directmemory-cache/src/main/java/org/apache/directmemory/memory/PointerImpl.java
@@ -33,6 +33,8 @@
public final MemoryBuffer memoryBuffer;
+ public final int bufferNumber;
+
public long created;
public long expires;
@@ -45,13 +47,12 @@
public AtomicLong lastHit = new AtomicLong();
- public int bufferNumber;
-
public Class<? extends T> clazz;
- public PointerImpl( MemoryBuffer memoryBuffer )
+ public PointerImpl( MemoryBuffer memoryBuffer, int bufferNumber )
{
this.memoryBuffer = memoryBuffer;
+ this.bufferNumber = bufferNumber;
}
@Override
@@ -156,12 +157,6 @@
}
@Override
- public void setBufferNumber( int bufferNumber )
- {
- this.bufferNumber = bufferNumber;
- }
-
- @Override
public void setExpiration( long expires, long expiresIn )
{
this.expires = expires;
diff --git a/directmemory-cache/src/main/java/org/apache/directmemory/memory/UnsafeMemoryManagerServiceImpl.java b/directmemory-cache/src/main/java/org/apache/directmemory/memory/UnsafeMemoryManagerServiceImpl.java
index f309102..943406b 100644
--- a/directmemory-cache/src/main/java/org/apache/directmemory/memory/UnsafeMemoryManagerServiceImpl.java
+++ b/directmemory-cache/src/main/java/org/apache/directmemory/memory/UnsafeMemoryManagerServiceImpl.java
@@ -45,7 +45,7 @@
protected Pointer<V> instanciatePointer( int size, long expiresIn, long expires )
{
- Pointer<V> p = new PointerImpl<V>( allocator.allocate( size ) );
+ Pointer<V> p = new PointerImpl<V>( allocator.allocate( size ), 1 );
p.setExpiration( expires, expiresIn );
p.setFree( false );
diff --git a/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractMemoryManagerServiceTest.java b/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractMemoryManagerServiceTest.java
index cd46d5d..012724d 100644
--- a/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractMemoryManagerServiceTest.java
+++ b/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractMemoryManagerServiceTest.java
@@ -327,7 +327,7 @@
public void testUpdate()
{
- final int NUMBER_OF_OBJECTS = 1;
+ final int NUMBER_OF_OBJECTS = 2;
final int BUFFER_SIZE = NUMBER_OF_OBJECTS * SMALL_PAYLOAD_LENGTH;
mms = instanciateMemoryManagerService( BUFFER_SIZE );
@@ -349,10 +349,17 @@
final Pointer<Object> evenAnotherPointer = mms.update( otherPointer, evenAnotherPayload );
Assert.assertNotNull( evenAnotherPointer );
// Assert.assertEquals( pointer.getStart(), evenAnotherPointer.getStart() );
- Assert.assertEquals( pointer.getSize() / 2, evenAnotherPointer.getSize() );
+ Assert.assertEquals( pointer.getSize(), evenAnotherPointer.getSize() );
// Assert.assertEquals( 2, new String( mms.retrieve( evenAnotherPointer ) ).length() );
Assert.assertTrue( new String( mms.retrieve( evenAnotherPointer ) ).startsWith( new String( evenAnotherPayload ) ) );
+ final byte[] andAnotherPayload = MemoryTestUtils.generateRandomPayload( SMALL_PAYLOAD_LENGTH * 2 );
+ final Pointer<Object> andAnotherPointer = mms.update( otherPointer, andAnotherPayload );
+ Assert.assertNotNull( andAnotherPointer );
+ // Assert.assertEquals( pointer.getStart(), evenAnotherPointer.getStart() );
+ Assert.assertEquals( pointer.getSize() * 2, andAnotherPointer.getSize() );
+ // Assert.assertEquals( 2, new String( mms.retrieve( evenAnotherPointer ) ).length() );
+ Assert.assertTrue( new String( mms.retrieve( andAnotherPointer ) ).startsWith( new String( andAnotherPayload ) ) );
}
@Test
diff --git a/directmemory-cache/src/test/java/org/apache/directmemory/memory/SlabMemoryManagerServiceTest.java b/directmemory-cache/src/test/java/org/apache/directmemory/memory/SlabMemoryManagerServiceTest.java
index 8b2a212..0b4328c 100644
--- a/directmemory-cache/src/test/java/org/apache/directmemory/memory/SlabMemoryManagerServiceTest.java
+++ b/directmemory-cache/src/test/java/org/apache/directmemory/memory/SlabMemoryManagerServiceTest.java
@@ -34,21 +34,24 @@
@Override
protected MemoryManagerService<Object> instanciateMemoryManagerService( int bufferSize )
{
- final MemoryManagerService<Object> mms = new MemoryManagerServiceImpl<Object>() {
+ final MemoryManagerService<Object> mms = new MemoryManagerServiceImpl<Object>()
+ {
@Override
protected Allocator instanciateByteBufferAllocator( int allocatorNumber, int size )
{
Collection<FixedSizeByteBufferAllocatorImpl> slabs = new HashSet<FixedSizeByteBufferAllocatorImpl>();
-
- slabs.add( new FixedSizeByteBufferAllocatorImpl(0, size, SMALL_PAYLOAD_LENGTH / 2, 1) );
- slabs.add( new FixedSizeByteBufferAllocatorImpl(1, size, SMALL_PAYLOAD_LENGTH, 1) );
-
- final SlabByteBufferAllocatorImpl allocator = new SlabByteBufferAllocatorImpl( allocatorNumber, slabs, false );
-
+
+ slabs.add( new FixedSizeByteBufferAllocatorImpl( 0, size, SMALL_PAYLOAD_LENGTH / 2, 1 ) );
+ slabs.add( new FixedSizeByteBufferAllocatorImpl( 1, size, SMALL_PAYLOAD_LENGTH, 1 ) );
+ slabs.add( new FixedSizeByteBufferAllocatorImpl( 2, size, SMALL_PAYLOAD_LENGTH * 2, 1 ) );
+
+ final SlabByteBufferAllocatorImpl allocator =
+ new SlabByteBufferAllocatorImpl( allocatorNumber, slabs, false );
+
return allocator;
}
-
+
};
mms.init( 1, bufferSize );
return mms;
@@ -58,22 +61,21 @@
@Test
public void testFullFillAndFreeAndClearBuffer()
{
-
+
}
-
+
@Override
@Test
public void testStoreAllocAndFree()
{
-
+
}
-
-
+
@Override
@Test
public void testAllocate()
{
-
+
}
-
+
}