This closes #1959
This commit is contained in:
commit
d3b11bc439
|
@ -51,5 +51,5 @@ public interface LargeBodyEncoder {
|
|||
/**
|
||||
* This method must not be called directly by ActiveMQ Artemis clients.
|
||||
*/
|
||||
long getLargeBodySize();
|
||||
long getLargeBodySize() throws ActiveMQException;
|
||||
}
|
||||
|
|
|
@ -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,17 +343,39 @@ 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 {
|
||||
return "LargeServerMessage[messageID=" + messageID + ",durable=" + isDurable() + ",userID=" + getUserID() + ",priority=" + this.getPriority() + ", timestamp=" + toDate(getTimestamp()) + ",expiration=" + toDate(getExpiration()) + ", durable=" + durable + ", address=" + getAddress() + ",size=" + getPersistentSize() + ",properties=" + (properties != null ? properties.toString() : "") + "]@" + System.identityHashCode(this);
|
||||
return "LargeServerMessage[messageID=" + messageID + ",durable=" + isDurable() + ",userID=" + getUserID() + ",priority=" + this.getPriority() + ", timestamp=" + toDate(getTimestamp()) + ",expiration=" + toDate(getExpiration()) + ", durable=" + durable + ", address=" + getAddress() + ", properties=" + (properties != null ? properties.toString() : "") + "]@" + System.identityHashCode(this);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return "LargeServerMessage[messageID=" + messageID + "]";
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1305,6 +1305,7 @@ public class ServerConsumerImpl implements ServerConsumer, ReadyListener {
|
|||
}
|
||||
if (context != null) {
|
||||
context.close();
|
||||
context = null;
|
||||
}
|
||||
|
||||
largeMessage.releaseResources();
|
||||
|
|
Loading…
Reference in New Issue