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