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 2018/03/20 19:54:44 UTC
[2/3] activemq-artemis git commit: ARTEMIS-1754 Avoiding Leaks from
LargeServerMessageImpl.getPersistentSize
ARTEMIS-1754 Avoiding Leaks from LargeServerMessageImpl.getPersistentSize
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/fe0e6c2b
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/fe0e6c2b
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/fe0e6c2b
Branch: refs/heads/master
Commit: fe0e6c2b287e623cf9a50c00764bbc53624fdc9f
Parents: 38ba5d7
Author: Clebert Suconic <cl...@apache.org>
Authored: Tue Mar 20 15:40:33 2018 -0400
Committer: Clebert Suconic <cl...@apache.org>
Committed: Tue Mar 20 15:45:09 2018 -0400
----------------------------------------------------------------------
.../artemis/core/message/LargeBodyEncoder.java | 2 +-
.../impl/journal/LargeServerMessageImpl.java | 41 +++++++++++++-------
.../core/server/impl/ServerConsumerImpl.java | 1 +
3 files changed, 29 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/fe0e6c2b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/LargeBodyEncoder.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/LargeBodyEncoder.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/LargeBodyEncoder.java
index 8b96282..7a248b4 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/LargeBodyEncoder.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/LargeBodyEncoder.java
@@ -51,5 +51,5 @@ public interface LargeBodyEncoder {
/**
* This method must not be called directly by ActiveMQ Artemis clients.
*/
- long getLargeBodySize();
+ long getLargeBodySize() throws ActiveMQException;
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/fe0e6c2b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImpl.java
----------------------------------------------------------------------
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 297328d..940f8b0 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
@@ -22,6 +22,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
import org.apache.activemq.artemis.api.core.ActiveMQException;
import org.apache.activemq.artemis.api.core.ActiveMQExceptionType;
+import org.apache.activemq.artemis.api.core.ActiveMQIOErrorException;
import org.apache.activemq.artemis.api.core.ActiveMQInternalErrorException;
import org.apache.activemq.artemis.api.core.Message;
import org.apache.activemq.artemis.core.buffers.impl.ChannelBufferWrapper;
@@ -238,10 +239,7 @@ public final class LargeServerMessageImpl extends CoreMessage implements LargeSe
public synchronized int getMemoryEstimate() {
if (memoryEstimate == -1) {
// The body won't be on memory (aways on-file), so we don't consider this for paging
- memoryEstimate = getHeadersAndPropertiesEncodeSize() + DataConstants.SIZE_INT +
- getEncodeSize() +
- (16 + 4) * 2 +
- 1;
+ memoryEstimate = getHeadersAndPropertiesEncodeSize() + DataConstants.SIZE_INT + getEncodeSize() + (16 + 4) * 2 + 1;
}
return memoryEstimate;
@@ -345,13 +343,35 @@ public final class LargeServerMessageImpl extends CoreMessage implements LargeSe
return file;
}
+ private long getBodySize() throws ActiveMQException {
+
+ try {
+ if (bodySize < 0) {
+ if (file != null) {
+ bodySize = file.size();
+ } else {
+ SequentialFile tmpFile = createFile();
+ bodySize = tmpFile.size();
+ tmpFile.close();
+ }
+ }
+ return bodySize;
+ } catch (Exception e) {
+ ActiveMQIOErrorException errorException = new ActiveMQIOErrorException();
+ errorException.initCause(e);
+ throw errorException;
+ }
+ }
+
@Override
public long getPersistentSize() throws ActiveMQException {
long size = super.getPersistentSize();
- size += getBodyEncoder().getLargeBodySize();
+ size += getBodySize();
return size;
+
}
+
@Override
public String toString() {
try {
@@ -463,15 +483,8 @@ public final class LargeServerMessageImpl extends CoreMessage implements LargeSe
* @see org.apache.activemq.artemis.core.message.LargeBodyEncoder#getLargeBodySize()
*/
@Override
- public long getLargeBodySize() {
- if (bodySize < 0) {
- try {
- bodySize = file.size();
- } catch (Exception e) {
- ActiveMQServerLogger.LOGGER.unableToCalculateFileSize(e);
- }
- }
- return bodySize;
+ public long getLargeBodySize() throws ActiveMQException {
+ return getBodySize();
}
}
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/fe0e6c2b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerConsumerImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerConsumerImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerConsumerImpl.java
index 95d613e..8ef0fa1 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerConsumerImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerConsumerImpl.java
@@ -1305,6 +1305,7 @@ public class ServerConsumerImpl implements ServerConsumer, ReadyListener {
}
if (context != null) {
context.close();
+ context = null;
}
largeMessage.releaseResources();