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 2017/06/20 14:21:59 UTC

qpid-broker-j git commit: QPID-7791: Recover metadata into direct memory, if it will fit into a pooled buffer (least intrusive change for branch).

Repository: qpid-broker-j
Updated Branches:
  refs/heads/6.1.x ae3ab1dd1 -> 5293cc0eb


QPID-7791: Recover metadata into direct memory, if it will fit into a pooled buffer (least intrusive change for branch).


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/5293cc0e
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/5293cc0e
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/5293cc0e

Branch: refs/heads/6.1.x
Commit: 5293cc0ebda9fb4c6deeae386e062a703a1b1d25
Parents: ae3ab1d
Author: Keith Wall <kw...@apache.org>
Authored: Tue Jun 20 15:02:34 2017 +0100
Committer: Keith Wall <kw...@apache.org>
Committed: Tue Jun 20 15:21:04 2017 +0100

----------------------------------------------------------------------
 .../tuple/MessageMetaDataBinding.java           | 19 ++++++++--
 .../server/store/AbstractJDBCMessageStore.java  | 40 ++++++++++++--------
 2 files changed, 40 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/5293cc0e/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MessageMetaDataBinding.java
----------------------------------------------------------------------
diff --git a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MessageMetaDataBinding.java b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MessageMetaDataBinding.java
index 4f10557..1bc4944 100644
--- a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MessageMetaDataBinding.java
+++ b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MessageMetaDataBinding.java
@@ -51,13 +51,24 @@ public class MessageMetaDataBinding implements EntryBinding<StorableMessageMetaD
     @Override
     public StorableMessageMetaData entryToObject(DatabaseEntry entry)
     {
-        QpidByteBuffer buf = QpidByteBuffer.wrap(entry.getData(), entry.getOffset(), entry.getSize());
+        QpidByteBuffer buf;
+        if (entry.getSize() > QpidByteBuffer.getPooledBufferSize())
+        {
+            buf = QpidByteBuffer.wrap(entry.getData(), entry.getOffset(), entry.getSize());
+        }
+        else
+        {
+            buf = QpidByteBuffer.allocateDirect(entry.getSize());
+            buf.put(entry.getData(), entry.getOffset(), entry.getSize());
+            buf.flip();
+        }
         final int bodySize = buf.getInt() ^ 0x80000000;
         final int metaDataType = buf.get() & 0xff;
-        buf = buf.slice();
-        buf.limit(bodySize-1);
+        QpidByteBuffer slice = buf.slice();
+        slice.limit(bodySize-1);
         MessageMetaDataType type = MessageMetaDataTypeRegistry.fromOrdinal(metaDataType);
-        final StorableMessageMetaData metaData = type.createMetaData(buf);
+        final StorableMessageMetaData metaData = type.createMetaData(slice);
+        slice.dispose();
         buf.dispose();
         return metaData;
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/5293cc0e/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java b/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java
index 18a5da3..6b95012 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java
@@ -1002,14 +1002,7 @@ public abstract class AbstractJDBCMessageStore implements MessageStore
                     if(rs.next())
                     {
                         byte[] dataAsBytes = getBlobAsBytes(rs, 1);
-                        QpidByteBuffer buf = QpidByteBuffer.wrap(dataAsBytes);
-                        buf.position(1);
-                        buf = buf.slice();
-                        int typeOrdinal = dataAsBytes[0] & 0xff;;
-                        MessageMetaDataType type = MessageMetaDataTypeRegistry.fromOrdinal(typeOrdinal);
-                        StorableMessageMetaData metaData = type.createMetaData(buf);
-                        buf.dispose();
-                        return metaData;
+                        return getStorableMessageMetaData(dataAsBytes);
                     }
                     else
                     {
@@ -1761,14 +1754,8 @@ public abstract class AbstractJDBCMessageStore implements MessageStore
                         if (rs.next())
                         {
                             byte[] dataAsBytes = getBlobAsBytes(rs, 2);
-                            QpidByteBuffer buf = QpidByteBuffer.wrap(dataAsBytes);
-                            buf.position(1);
-                            buf = buf.slice();
-                            MessageMetaDataType<?> type = MessageMetaDataTypeRegistry.fromOrdinal(dataAsBytes[0]);
-                            StorableMessageMetaData metaData = type.createMetaData(buf);
-                            buf.dispose();
+                            StorableMessageMetaData metaData = getStorableMessageMetaData(dataAsBytes);
                             message = createStoredJDBCMessage(messageId, metaData, true);
-
                         }
                         else
                         {
@@ -2040,6 +2027,29 @@ public abstract class AbstractJDBCMessageStore implements MessageStore
         }
     }
 
+    private StorableMessageMetaData getStorableMessageMetaData(final byte[] dataAsBytes)
+    {
+        final QpidByteBuffer buf;
+        if (dataAsBytes.length > QpidByteBuffer.getPooledBufferSize())
+        {
+            buf =  QpidByteBuffer.wrap(dataAsBytes);
+        }
+        else
+        {
+            buf = QpidByteBuffer.allocateDirect(dataAsBytes.length);
+            buf.put(dataAsBytes);
+            buf.flip();
+        }
+        buf.position(1);
+        QpidByteBuffer slice = buf.slice();
+        int typeOrdinal = dataAsBytes[0] & 0xff;
+        MessageMetaDataType type = MessageMetaDataTypeRegistry.fromOrdinal(typeOrdinal);
+        StorableMessageMetaData metaData = type.createMetaData(slice);
+        slice.dispose();
+        buf.dispose();
+        return metaData;
+    }
+
     protected abstract void storedSizeChange(int storeSizeIncrease);
 
     @Override


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