You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2019/03/13 19:04:04 UTC
[activemq-artemis] 02/03: ARTEMIS-2274 Fix on Journal buffer
overflow with almost large messages
This is an automated email from the ASF dual-hosted git repository.
clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
commit 828a4856da83ae11ecdee2f87face0f1f624b049
Author: Clebert Suconic <cl...@apache.org>
AuthorDate: Wed Mar 13 14:55:22 2019 -0400
ARTEMIS-2274 Fix on Journal buffer overflow with almost large messages
---
.../org/apache/activemq/artemis/core/io/buffer/TimedBuffer.java | 2 +-
.../core/persistence/impl/journal/LargeServerMessageImpl.java | 6 +++++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/buffer/TimedBuffer.java b/artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/buffer/TimedBuffer.java
index d49f930..942f88c 100644
--- a/artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/buffer/TimedBuffer.java
+++ b/artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/buffer/TimedBuffer.java
@@ -244,7 +244,7 @@ public final class TimedBuffer extends CriticalComponentImpl {
}
if (sizeChecked > bufferSize) {
- throw new IllegalStateException("Can't write records bigger than the bufferSize(" + bufferSize + ") on the journal");
+ throw new IllegalStateException("Can't write records (size=" + sizeChecked + ") bigger than the bufferSize(" + bufferSize + ") on the journal");
}
if (bufferLimit == 0 || buffer.writerIndex() + sizeChecked > bufferLimit) {
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImpl.java
index 42a76be..153c583 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImpl.java
@@ -42,13 +42,17 @@ import io.netty.buffer.Unpooled;
public final class LargeServerMessageImpl extends CoreMessage implements LargeServerMessage {
+ // When a message is stored on the journal, it will contain some header and trail on the journal
+ // we need to take that into consideration if that would fit the Journal TimedBuffer.
+ private static final int ESTIMATE_RECORD_TRAIL = 512;
+
/** This will check if a regular message needs to be converted as large message */
public static Message checkLargeMessage(Message message, StorageManager storageManager) throws Exception {
if (message.isLargeMessage()) {
return message; // nothing to be done on this case
}
- if (message.getEncodeSize() > storageManager.getMaxRecordSize()) {
+ if (message.getEncodeSize() + ESTIMATE_RECORD_TRAIL > storageManager.getMaxRecordSize()) {
return asLargeMessage(message, storageManager);
} else {
return message;