You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2016/09/30 14:20:23 UTC

svn commit: r1762914 - in /qpid/java/trunk: bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java common/src/main/java/org/apache/qpid/bytebuffer/SlicedQpidByteBuffer.java

Author: kwall
Date: Fri Sep 30 14:20:22 2016
New Revision: 1762914

URL: http://svn.apache.org/viewvc?rev=1762914&view=rev
Log:
QPID-6803: [Java Broker] Have SlicedQpidByteBuffer delegate to bulk operations instead of byte by byte

Modified:
    qpid/java/trunk/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java
    qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/SlicedQpidByteBuffer.java

Modified: qpid/java/trunk/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java?rev=1762914&r1=1762913&r2=1762914&view=diff
==============================================================================
--- qpid/java/trunk/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java (original)
+++ qpid/java/trunk/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java Fri Sep 30 14:20:22 2016
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.when;
 import java.io.File;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
+import java.util.Collections;
 
 import org.apache.qpid.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.framing.AMQShortString;
@@ -123,10 +124,9 @@ public class BDBMessageStoreTest extends
         DeliveryProperties delProps_0_10 = createDeliveryProperties_0_10();
         Header header_0_10 = new Header(delProps_0_10, msgProps_0_10);
 
-        ByteBuffer buffer = ByteBuffer.allocate(completeContentBody_0_10.remaining());
-        completeContentBody_0_10.copyTo(buffer);
         MessageTransfer xfr_0_10 = new MessageTransfer("destination", MessageAcceptMode.EXPLICIT,
-                MessageAcquireMode.PRE_ACQUIRED, header_0_10, buffer);
+                                                       MessageAcquireMode.PRE_ACQUIRED, header_0_10,
+                                                       Collections.singletonList(completeContentBody_0_10));
 
         MessageMetaData_0_10 messageMetaData_0_10 = new MessageMetaData_0_10(xfr_0_10);
         MessageHandle<MessageMetaData_0_10> messageHandle_0_10 = bdbStore.addMessage(messageMetaData_0_10);

Modified: qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/SlicedQpidByteBuffer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/SlicedQpidByteBuffer.java?rev=1762914&r1=1762913&r2=1762914&view=diff
==============================================================================
--- qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/SlicedQpidByteBuffer.java (original)
+++ qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/SlicedQpidByteBuffer.java Fri Sep 30 14:20:22 2016
@@ -255,10 +255,11 @@ final class SlicedQpidByteBuffer extends
             throw new BufferOverflowException();
         }
 
-        for (int i = 0; i < sourceRemaining; i++)
-        {
-            put(src.get());
-        }
+        final int length = src.remaining();
+        ByteBuffer dup = getDuplicateForBulk();
+        dup.put(src);
+        _position += length;
+
         return this;
     }
 
@@ -276,10 +277,9 @@ final class SlicedQpidByteBuffer extends
             throw new BufferOverflowException();
         }
 
-        for (int i = 0; i < sourceRemaining; i++)
-        {
-            put(src.get());
-        }
+        put(src.getUnderlyingBuffer());
+        src.updateFromLastUnderlying();
+
         return this;
     }
 
@@ -293,29 +293,18 @@ final class SlicedQpidByteBuffer extends
             throw new BufferUnderflowException();
         }
 
-        // TODO consider using a slice of the underlying BB, followed by a bulk method
-        for (int i = offset; i < offset + length; i++)
-        {
-            dst[i] = get();
-        }
-
+        ByteBuffer dup = getDuplicateForBulk();
+        dup.get(dst, offset, length);
+        _position += length;
         return this;
     }
 
     @Override
     public QpidByteBuffer get(final ByteBuffer dst)
     {
-        int destinationRemaining = dst.remaining();
         int remaining = remaining();
-        if (destinationRemaining < remaining)
-        {
-            throw new BufferUnderflowException();
-        }
-
-        for (int i = 0; i < remaining; i++)
-        {
-            dst.put(get());
-        }
+        copyTo(dst);
+        _position += remaining;
         return this;
     }
 
@@ -329,10 +318,8 @@ final class SlicedQpidByteBuffer extends
             throw new BufferUnderflowException();
         }
 
-        for (int i = 0; i < remaining; i++)
-        {
-            dst.put(get(_position + i));
-        }
+        ByteBuffer dup = getDuplicateForBulk();
+        dst.put(dup);
     }
 
     @Override
@@ -345,10 +332,7 @@ final class SlicedQpidByteBuffer extends
             throw new BufferOverflowException();
         }
 
-        for (int i = 0; i < sourceRemaining; i++)
-        {
-            put(source.get(i));
-        }
+        put(source.getUnderlyingBuffer().duplicate());
     }
 
     @Override
@@ -383,10 +367,8 @@ final class SlicedQpidByteBuffer extends
         int remaining = remaining();
         if (_position > 0 && _position < _limit)
         {
-            for (int i = 0; i < remaining; i++)
-            {
-                put(i, get(_position + i));
-            }
+            getUnderlyingBuffer().compact();
+            _lastUnderlyingBuffer = null;
         }
         _position = remaining;
         _limit = _capacity;
@@ -487,10 +469,10 @@ final class SlicedQpidByteBuffer extends
             throw new BufferOverflowException();
         }
 
-        for (int i = offset; i < offset + length; i++)
-        {
-            put(src[i]);
-        }
+        ByteBuffer dup = getDuplicateForBulk();
+        dup.put(src, offset, length);
+        _position += length;
+
         return this;
     }
 
@@ -545,10 +527,8 @@ final class SlicedQpidByteBuffer extends
             throw new BufferUnderflowException();
         }
 
-        for (int i = 0; i < dst.length; i++)
-        {
-            dst[i] = get(_position + i);
-        }
+        ByteBuffer dup = getDuplicateForBulk();
+        dup.get(dst);
     }
 
     @Override
@@ -619,13 +599,13 @@ final class SlicedQpidByteBuffer extends
         return _buffer.getFloat(index + _offset);
     }
 
-
     @Override
     public QpidByteBuffer slice()
     {
         return new SlicedQpidByteBuffer(0, remaining(), remaining(), _offset + _position, _ref);
     }
 
+
     @Override
     public QpidByteBuffer view(final int offset, final int length)
     {
@@ -682,6 +662,14 @@ final class SlicedQpidByteBuffer extends
         _lastUnderlyingBuffer = null;
     }
 
+    private ByteBuffer getDuplicateForBulk()
+    {
+        ByteBuffer dup = _buffer.duplicate();
+        dup.position(_offset + _position);
+        dup.limit(_offset + _limit);
+        return dup;
+    }
+
     private void checkBounds(final byte[] array, final int offset, final int length)
     {
         if (offset < 0 || (offset > 0 && offset > array.length - 1) || length < 0 || length > array.length)



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org