[
https://issues.apache.org/jira/browse/DIRECTMEMORY-49?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13488633#comment-13488633
]
Christoph Engelbert commented on DIRECTMEMORY-49:
-------------------------------------------------
Added if-clause in AbstractMemoryManager::update to see if the currently
allocated pointer has bigger or equals capacity to the length of the new
payload, in this case the pointer will be reused (revision 1404554)
> MemoryManagerService.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
> Assignee: Christoph Engelbert
> Priority: Minor
>
> MemoryManagerService.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
> {code}
> @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)));
> }
> {code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira