incubator-directmemory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Benoit Perroud (Created) (JIRA)" <j...@apache.org>
Subject [jira] [Created] (DIRECTMEMORY-49) OffHeapMemoryBuffer.update does not reuse the same pointer
Date Fri, 30 Dec 2011 12:45:30 GMT
OffHeapMemoryBuffer.update does not reuse the same pointer
----------------------------------------------------------

                 Key: DIRECTMEMORY-49
                 URL: https://issues.apache.org/jira/browse/DIRECTMEMORY-49
             Project: Apache DirectMemory
          Issue Type: Bug
            Reporter: Benoit Perroud
            Priority: Minor


OffHeapMemoryBuffer.update actually free and store again the payload, which leads to another
pointer allocation. This is fine in lots of case, but when the buffer is full, we still want
the update to succeed.

Moreover, update should throw an exception (BufferOverFlowException for example) when the
new payload data is bigger than the previous.

Considering the following test, where I allocate just enough space for 1 object, I store it,
and then want to update it content. I could hope this use case succeed, but it's actually
not the case

@Test
public void testOffHeapMemoryBufferUpdate() {
		
	final int NUMBER_OF_OBJECTS = 1;
	final int BUFFER_SIZE = NUMBER_OF_OBJECTS * 4; // allocate 4 bytes
	
	final OffHeapMemoryBuffer offHeapMemoryBuffer = OffHeapMemoryBufferImpl.createNew(BUFFER_SIZE);

// generate 4 random bytes, store, read back and assert
	final byte[] payload = generateRandomPayload(4);
	final Pointer pointer = offHeapMemoryBuffer.store(payload);
	Assert.assertNotNull(pointer);
	Assert.assertEquals(new String(payload), new String(offHeapMemoryBuffer.retrieve(pointer)));
	
// generate another payload, update it, read it and assert.
	byte[] otherPayload = generateRandomPayload(4);
	final Pointer otherPointer = offHeapMemoryBuffer.update(pointer, otherPayload);
	Assert.assertNotNull(otherPointer);
	Assert.assertEquals(new String(otherPayload), new String(offHeapMemoryBuffer.retrieve(otherPointer)));
}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message