[ 
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

Reply via email to