diff --git a/docs/user-manual/en/paging.xml b/docs/user-manual/en/paging.xml index 6c6c508c411..0cd1a6d1d30 100644 --- a/docs/user-manual/en/paging.xml +++ b/docs/user-manual/en/paging.xml @@ -136,8 +136,10 @@ This must be set to PAGE for paging to enable. If the value is PAGE then further messages will be paged to disk. If the value is DROP then further messages will be silently dropped. If - the value is BLOCK then client message producers will block when - they try and send further messages. + the value is FAIL then the messages will be dropped and the client + message producers will receive an exception. If the value is + BLOCK then client message producers will block when they try and + send further messages. PAGE @@ -160,6 +162,14 @@ To do this just set the address-full-policy to DROP in the address settings +
+ Dropping messages and throwing an exception to producers + Instead of paging messages when the max size is reached, an address can also be + configured to drop messages and also throw an exception on the client-side + when the address is full. + To do this just set the address-full-policy to FAIL in the address settings +
Blocking producers Instead of paging messages when the max size is reached, an address can also be diff --git a/docs/user-manual/en/queue-attributes.xml b/docs/user-manual/en/queue-attributes.xml index a16866c1f64..3f1182cbbad 100644 --- a/docs/user-manual/en/queue-attributes.xml +++ b/docs/user-manual/en/queue-attributes.xml @@ -137,9 +137,10 @@ for example, there might be no queues bound to that address, or none of the queues have filters that match, then normally that message would be discarded. However if this parameter is set to true for that address, if the message is not routed to any queues it will instead be sent to the dead letter address (DLA) for that address, if it exists. - address-full-policy. This attribute can have one of the following values: PAGE, DROP or BLOCK and determines what happens when + address-full-policy. This attribute can have one of the following values: PAGE, DROP, FAIL or BLOCK and determines what happens when an address where max-size-bytes is specified becomes full. The default value is PAGE. If the value is PAGE then further messages will be paged to disk. - If the value is DROP then further messages will be silently dropped. + If the value is DROP then further messages will be silently dropped. + If the value is FAIL then further messages will be dropped and an exception will be thrown on the client-side. If the value is BLOCK then client message producers will block when they try and send further messages. See the following chapters for more info , . diff --git a/hornetq-commons/src/main/java/org/hornetq/api/core/HornetQAddressFullException.java b/hornetq-commons/src/main/java/org/hornetq/api/core/HornetQAddressFullException.java new file mode 100644 index 00000000000..7f42084a852 --- /dev/null +++ b/hornetq-commons/src/main/java/org/hornetq/api/core/HornetQAddressFullException.java @@ -0,0 +1,44 @@ +/* +* JBoss, Home of Professional Open Source. +* Copyright 2010, Red Hat, Inc., and individual contributors +* as indicated by the @author tags. See the copyright.txt file in the +* distribution for a full listing of individual contributors. +* +* This is free software; you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as +* published by the Free Software Foundation; either version 2.1 of +* the License, or (at your option) any later version. +* +* This software is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this software; if not, write to the Free +* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +* 02110-1301 USA, or see the FSF site: http://www.fsf.org. +*/ +package org.hornetq.api.core; + +import static org.hornetq.api.core.HornetQExceptionType.ADDRESS_FULL; + +/** + * @author Justin Bertram + * + * An address is full. + */ +public class HornetQAddressFullException extends HornetQException +{ + private static final long serialVersionUID = 0; + + public HornetQAddressFullException(String message) + { + super(ADDRESS_FULL, message); + } + + public HornetQAddressFullException() + { + super(ADDRESS_FULL); + } +} diff --git a/hornetq-commons/src/main/java/org/hornetq/api/core/HornetQExceptionType.java b/hornetq-commons/src/main/java/org/hornetq/api/core/HornetQExceptionType.java index 0b517998e7b..ce7694a9b85 100644 --- a/hornetq-commons/src/main/java/org/hornetq/api/core/HornetQExceptionType.java +++ b/hornetq-commons/src/main/java/org/hornetq/api/core/HornetQExceptionType.java @@ -266,6 +266,14 @@ HornetQException createException(String msg) { return null; } + }, + ADDRESS_FULL(210) + { + @Override + HornetQException createException(String msg) + { + return null; + } }; private final static Map TYPE_MAP; diff --git a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCreditManager.java b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCreditManager.java index 1d1b2424471..d45401ceb80 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCreditManager.java +++ b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCreditManager.java @@ -30,6 +30,8 @@ public interface ClientProducerCreditManager void receiveCredits(SimpleString address, int credits); + void receiveFailCredits(SimpleString address, int credits); + void reset(); void close(); diff --git a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCreditManagerImpl.java b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCreditManagerImpl.java index 348f105ca0f..664a57ff2e5 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCreditManagerImpl.java +++ b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCreditManagerImpl.java @@ -114,6 +114,16 @@ public synchronized void receiveCredits(final SimpleString address, final int cr } } + public synchronized void receiveFailCredits(final SimpleString address, int credits) + { + ClientProducerCredits cr = producerCredits.get(address); + + if (cr != null) + { + cr.receiveFailCredits(credits); + } + } + public synchronized void reset() { for (ClientProducerCredits credits : producerCredits.values()) @@ -186,6 +196,10 @@ public void receiveCredits(int credits) { } + public void receiveFailCredits(int credits) + { + } + public boolean isBlocked() { return false; diff --git a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCredits.java b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCredits.java index 9de8851bf16..acc13268081 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCredits.java +++ b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCredits.java @@ -13,6 +13,8 @@ package org.hornetq.core.client.impl; +import org.hornetq.api.core.HornetQException; + /** * A ClientProducerCredits * @@ -22,10 +24,12 @@ */ public interface ClientProducerCredits { - void acquireCredits(int credits) throws InterruptedException; + void acquireCredits(int credits) throws InterruptedException, HornetQException; void receiveCredits(int credits); - + + void receiveFailCredits(int credits); + boolean isBlocked(); void init(); diff --git a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCreditsImpl.java b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCreditsImpl.java index e83908b1197..9edc54626fe 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCreditsImpl.java +++ b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerCreditsImpl.java @@ -13,16 +13,16 @@ package org.hornetq.core.client.impl; -import java.util.concurrent.Semaphore; - +import org.hornetq.api.core.HornetQException; import org.hornetq.api.core.SimpleString; +import org.hornetq.core.server.HornetQMessageBundle; + +import java.util.concurrent.Semaphore; /** * A ClientProducerCreditsImpl * * @author Tim Fox - * - * */ public class ClientProducerCreditsImpl implements ClientProducerCredits { @@ -31,17 +31,21 @@ public class ClientProducerCreditsImpl implements ClientProducerCredits private final int windowSize; private volatile boolean closed; - + private boolean blocked; private final SimpleString address; private final ClientSessionInternal session; + private int pendingCredits; + private int arriving; private int refCount; + private boolean serverRespondedWithFail; + public ClientProducerCreditsImpl(final ClientSessionInternal session, final SimpleString address, final int windowSize) @@ -56,7 +60,7 @@ public ClientProducerCreditsImpl(final ClientSessionInternal session, semaphore = new Semaphore(0, false); } - + public void init() { // We initial request twice as many credits as we request in subsequent requests @@ -64,11 +68,19 @@ public void init() checkCredits(windowSize); } - public void acquireCredits(final int credits) throws InterruptedException + public void acquireCredits(final int credits) throws InterruptedException, HornetQException { checkCredits(credits); - if (!semaphore.tryAcquire(credits)) + + boolean tryAcquire; + + synchronized (this) + { + tryAcquire = semaphore.tryAcquire(credits); + } + + if (!tryAcquire) { if (!closed) { @@ -83,6 +95,28 @@ public void acquireCredits(final int credits) throws InterruptedException } } } + + + synchronized (this) + { + pendingCredits -= credits; + } + + // check to see if the blocking mode is FAIL on the server + synchronized (this) + { + if (serverRespondedWithFail) + { + serverRespondedWithFail = false; + + // remove existing credits to force the client to ask the server for more on the next send + semaphore.drainPermits(); + pendingCredits = 0; + arriving = 0; + + throw HornetQMessageBundle.BUNDLE.addressIsFull(address.toString(), credits); + } + } } public boolean isBlocked() @@ -105,14 +139,22 @@ public void receiveCredits(final int credits) semaphore.release(credits); } + public void receiveFailCredits(final int credits) + { + serverRespondedWithFail = true; + // receive credits like normal to keep the sender from blocking + receiveCredits(credits); + } + public synchronized void reset() { - // Any arriving credits from before failover won't arrive, so we re-initialise + // Any pendingCredits credits from before failover won't arrive, so we re-initialise semaphore.drainPermits(); - int beforeFailure = arriving; + int beforeFailure = pendingCredits; + pendingCredits = 0; arriving = 0; // If we are waiting for more credits than what's configured, then we need to use what we tried before @@ -155,6 +197,7 @@ private void checkCredits(final int credits) { toRequest = needed - arriving; + pendingCredits += toRequest; arriving += toRequest; } } @@ -169,5 +212,4 @@ private void requestCredits(final int credits) { session.sendProducerCreditsMessage(credits, address); } - -} +} \ No newline at end of file diff --git a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerImpl.java b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerImpl.java index 5e54252d466..31658f97101 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerImpl.java +++ b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientProducerImpl.java @@ -271,6 +271,23 @@ private void doSend(final SimpleString address, final Message msg) throws Hornet session.workDone(); + try + { + // This will block if credits are not available + + // Note, that for a large message, the encode size only includes the properties + headers + // Not the continuations, but this is ok since we are only interested in limiting the amount of + // data in *memory* and continuations go straight to the disk + + if (!isLarge) + { + theCredits.acquireCredits(msgI.getEncodeSize()); + } + } + catch (InterruptedException e) + { + } + if (isLarge) { largeMessageSend(sendBlocking, msgI, theCredits); @@ -288,23 +305,6 @@ private void doSend(final SimpleString address, final Message msg) throws Hornet channel.sendBatched(packet); } } - - try - { - // This will block if credits are not available - - // Note, that for a large message, the encode size only includes the properties + headers - // Not the continuations, but this is ok since we are only interested in limiting the amount of - // data in *memory* and continuations go straight to the disk - - if (!isLarge) - { - theCredits.acquireCredits(msgI.getEncodeSize()); - } - } - catch (InterruptedException e) - { - } } private void checkClosed() throws HornetQException diff --git a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientSessionImpl.java b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientSessionImpl.java index 409ae0aed00..b0e54dad511 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientSessionImpl.java +++ b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientSessionImpl.java @@ -1262,6 +1262,11 @@ public void handleReceiveProducerCredits(final SimpleString address, final int c producerCreditManager.receiveCredits(address, credits); } + public void handleReceiveProducerFailCredits(final SimpleString address, int credits) + { + producerCreditManager.receiveFailCredits(address, credits); + } + public ClientProducerCreditManager getProducerCreditManager() { return producerCreditManager; diff --git a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientSessionInternal.java b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientSessionInternal.java index aa656d05430..d058aa5aa5e 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientSessionInternal.java +++ b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientSessionInternal.java @@ -87,6 +87,8 @@ public interface ClientSessionInternal extends ClientSession void handleReceiveProducerCredits(SimpleString address, int credits); + void handleReceiveProducerFailCredits(SimpleString address, int credits); + ClientProducerCreditManager getProducerCreditManager(); void setAddress(Message message, SimpleString address); diff --git a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientSessionPacketHandler.java b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientSessionPacketHandler.java index e9a6eb57136..715a8426c0a 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientSessionPacketHandler.java +++ b/hornetq-core/src/main/java/org/hornetq/core/client/impl/ClientSessionPacketHandler.java @@ -18,11 +18,13 @@ import static org.hornetq.core.protocol.core.impl.PacketImpl.SESS_RECEIVE_LARGE_MSG; import static org.hornetq.core.protocol.core.impl.PacketImpl.SESS_RECEIVE_MSG; +import org.hornetq.api.core.HornetQException; import org.hornetq.core.protocol.core.Channel; import org.hornetq.core.protocol.core.ChannelHandler; import org.hornetq.core.protocol.core.Packet; import org.hornetq.core.protocol.core.impl.PacketImpl; import org.hornetq.core.protocol.core.impl.wireformat.HornetQExceptionMessage; +import org.hornetq.core.protocol.core.impl.wireformat.SessionProducerCreditsFailMessage; import org.hornetq.core.protocol.core.impl.wireformat.SessionProducerCreditsMessage; import org.hornetq.core.protocol.core.impl.wireformat.SessionReceiveContinuationMessage; import org.hornetq.core.protocol.core.impl.wireformat.SessionReceiveLargeMessage; @@ -85,8 +87,15 @@ public void handlePacket(final Packet packet) { SessionProducerCreditsMessage message = (SessionProducerCreditsMessage)packet; - clientSession.handleReceiveProducerCredits(message.getAddress(), - message.getCredits()); + clientSession.handleReceiveProducerCredits(message.getAddress(), message.getCredits()); + + break; + } + case PacketImpl.SESS_PRODUCER_FAIL_CREDITS: + { + SessionProducerCreditsFailMessage message = (SessionProducerCreditsFailMessage)packet; + + clientSession.handleReceiveProducerFailCredits(message.getAddress(), message.getCredits()); break; } diff --git a/hornetq-core/src/main/java/org/hornetq/core/client/impl/DelegatingSession.java b/hornetq-core/src/main/java/org/hornetq/core/client/impl/DelegatingSession.java index 7291f47832c..915416db7f0 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/client/impl/DelegatingSession.java +++ b/hornetq-core/src/main/java/org/hornetq/core/client/impl/DelegatingSession.java @@ -548,6 +548,11 @@ public void handleReceiveProducerCredits(final SimpleString address, final int c session.handleReceiveProducerCredits(address, credits); } + public void handleReceiveProducerFailCredits(final SimpleString address, final int credits) + { + session.handleReceiveProducerFailCredits(address, credits); + } + public ClientProducerCreditManager getProducerCreditManager() { return session.getProducerCreditManager(); diff --git a/hornetq-core/src/main/java/org/hornetq/core/config/impl/Validators.java b/hornetq-core/src/main/java/org/hornetq/core/config/impl/Validators.java index 4e0e152911c..0a5a79a8681 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/config/impl/Validators.java +++ b/hornetq-core/src/main/java/org/hornetq/core/config/impl/Validators.java @@ -41,7 +41,7 @@ public void validate(final String name, final Object value) { public void validate(final String name, final Object value) { - String str = (String)value; + String str = (String) value; if (str == null || str.length() == 0) { throw HornetQMessageBundle.BUNDLE.emptyOrNull(name); @@ -53,7 +53,7 @@ public void validate(final String name, final Object value) { public void validate(final String name, final Object value) { - Number val = (Number)value; + Number val = (Number) value; if (val.doubleValue() > 0) { // OK @@ -69,7 +69,7 @@ public void validate(final String name, final Object value) { public void validate(final String name, final Object value) { - Number val = (Number)value; + Number val = (Number) value; if (val == null || (val.intValue() < 0 || val.intValue() > 100)) { throw HornetQMessageBundle.BUNDLE.notPercent(name, val); @@ -81,7 +81,7 @@ public void validate(final String name, final Object value) { public void validate(final String name, final Object value) { - Number val = (Number)value; + Number val = (Number) value; if (val.doubleValue() >= 0) { // OK @@ -97,7 +97,7 @@ public void validate(final String name, final Object value) { public void validate(final String name, final Object value) { - Number val = (Number)value; + Number val = (Number) value; if (val.doubleValue() == -1 || val.doubleValue() > 0) { // OK @@ -113,7 +113,7 @@ public void validate(final String name, final Object value) { public void validate(final String name, final Object value) { - Number val = (Number)value; + Number val = (Number) value; if (val.doubleValue() == -1 || val.doubleValue() >= 0) { // OK @@ -129,7 +129,7 @@ public void validate(final String name, final Object value) { public void validate(final String name, final Object value) { - Number val = (Number)value; + Number val = (Number) value; if (val.intValue() >= Thread.MIN_PRIORITY && val.intValue() <= Thread.MAX_PRIORITY) { // OK @@ -145,7 +145,7 @@ public void validate(final String name, final Object value) { public void validate(final String name, final Object value) { - String val = (String)value; + String val = (String) value; if (val == null || !val.equals(JournalType.NIO.toString()) && !val.equals(JournalType.ASYNCIO.toString())) { throw HornetQMessageBundle.BUNDLE.invalidJournalType(val); @@ -157,10 +157,11 @@ public void validate(final String name, final Object value) { public void validate(final String name, final Object value) { - String val = (String)value; + String val = (String) value; if (val == null || !val.equals(AddressFullMessagePolicy.PAGE.toString()) && - !val.equals(AddressFullMessagePolicy.DROP.toString()) && - !val.equals(AddressFullMessagePolicy.BLOCK.toString())) + !val.equals(AddressFullMessagePolicy.DROP.toString()) && + !val.equals(AddressFullMessagePolicy.BLOCK.toString()) && + !val.equals(AddressFullMessagePolicy.FAIL.toString())) { throw HornetQMessageBundle.BUNDLE.invalidAddressFullPolicyType(val); } diff --git a/hornetq-core/src/main/java/org/hornetq/core/deployers/impl/FileConfigurationParser.java b/hornetq-core/src/main/java/org/hornetq/core/deployers/impl/FileConfigurationParser.java index f24deae1b41..65401ef856f 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/deployers/impl/FileConfigurationParser.java +++ b/hornetq-core/src/main/java/org/hornetq/core/deployers/impl/FileConfigurationParser.java @@ -837,6 +837,10 @@ else if (value.equals(AddressFullMessagePolicy.PAGE.toString())) { policy = AddressFullMessagePolicy.PAGE; } + else if (value.equals(AddressFullMessagePolicy.FAIL.toString())) + { + policy = AddressFullMessagePolicy.FAIL; + } addressSettings.setAddressFullMessagePolicy(policy); } else if (FileConfigurationParser.LVQ_NODE_NAME.equalsIgnoreCase(child.getNodeName())) diff --git a/hornetq-core/src/main/java/org/hornetq/core/management/impl/HornetQServerControlImpl.java b/hornetq-core/src/main/java/org/hornetq/core/management/impl/HornetQServerControlImpl.java index 22cb0a1896f..0681ad8f54b 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/management/impl/HornetQServerControlImpl.java +++ b/hornetq-core/src/main/java/org/hornetq/core/management/impl/HornetQServerControlImpl.java @@ -74,9 +74,9 @@ /** * @author Jeff Mesnil - * + * * @version $Revision$ - * + * */ public class HornetQServerControlImpl extends AbstractControl implements HornetQServerControl, NotificationEmitter { @@ -211,7 +211,7 @@ public String[] getInterceptorClassNames() try { return configuration.getInterceptorClassNames().toArray(new String[configuration.getInterceptorClassNames() - .size()]); + .size()]); } finally { @@ -227,7 +227,7 @@ public int getJournalBufferSize() try { return configuration.getJournalType() == JournalType.ASYNCIO ? configuration.getJournalBufferSize_AIO() - : configuration.getJournalBufferSize_NIO(); + : configuration.getJournalBufferSize_NIO(); } finally { @@ -243,7 +243,7 @@ public int getJournalBufferTimeout() try { return configuration.getJournalType() == JournalType.ASYNCIO ? configuration.getJournalBufferTimeout_AIO() - : configuration.getJournalBufferTimeout_NIO(); + : configuration.getJournalBufferTimeout_NIO(); } finally { @@ -290,7 +290,7 @@ public int getJournalMaxIO() try { return configuration.getJournalType() == JournalType.ASYNCIO ? configuration.getJournalMaxIO_AIO() - : configuration.getJournalMaxIO_NIO(); + : configuration.getJournalMaxIO_NIO(); } finally { @@ -576,10 +576,10 @@ public void deployQueue(final String address, final String name, final String fi try { server.deployQueue(new SimpleString(address), - new SimpleString(name), - new SimpleString(filterString), - true, - false); + new SimpleString(name), + new SimpleString(filterString), + true, + false); } finally { @@ -666,7 +666,7 @@ public String[] getQueueNames() String[] names = new String[queues.length]; for (int i = 0; i < queues.length; i++) { - QueueControl queue = (QueueControl)queues[i]; + QueueControl queue = (QueueControl) queues[i]; names[i] = queue.getName(); } @@ -689,7 +689,7 @@ public String[] getAddressNames() String[] names = new String[addresses.length]; for (int i = 0; i < addresses.length; i++) { - AddressControl address = (AddressControl)addresses[i]; + AddressControl address = (AddressControl) addresses[i]; names[i] = address.getAddress(); } @@ -898,7 +898,7 @@ public String[] listPreparedTransactions() public int compare(final Entry entry1, final Entry entry2) { // sort by creation time, oldest first - return (int)(entry1.getValue() - entry2.getValue()); + return (int) (entry1.getValue() - entry2.getValue()); } }); String[] s = new String[xidsSortedByCreationTime.size()]; @@ -936,7 +936,7 @@ public String listPreparedTransactionDetailsAsJSON() throws Exception public int compare(final Entry entry1, final Entry entry2) { // sort by creation time, oldest first - return (int)(entry1.getValue() - entry2.getValue()); + return (int) (entry1.getValue() - entry2.getValue()); } }); @@ -945,8 +945,8 @@ public int compare(final Entry entry1, final Entry entry2) { Xid xid = entry.getKey(); TransactionDetail detail = new CoreTransactionDetail(xid, - resourceManager.getTransaction(xid), - entry.getValue()); + resourceManager.getTransaction(xid), + entry.getValue()); txDetailListJson.put(detail.toJSON()); } @@ -977,7 +977,7 @@ public String listPreparedTransactionDetailsAsHTML() throws Exception public int compare(final Entry entry1, final Entry entry2) { // sort by creation time, oldest first - return (int)(entry1.getValue() - entry2.getValue()); + return (int) (entry1.getValue() - entry2.getValue()); } }); @@ -988,8 +988,8 @@ public int compare(final Entry entry1, final Entry entry2) { Xid xid = entry.getKey(); TransactionDetail detail = new CoreTransactionDetail(xid, - resourceManager.getTransaction(xid), - entry.getValue()); + resourceManager.getTransaction(xid), + entry.getValue()); JSONObject txJson = detail.toJSON(); @@ -1270,21 +1270,21 @@ public String[] listSessions(final String connectionID) blockOnIO(); } } - + /* (non-Javadoc) - * @see org.hornetq.api.core.management.HornetQServerControl#listProducersInfoAsJSON() - */ + * @see org.hornetq.api.core.management.HornetQServerControl#listProducersInfoAsJSON() + */ public String listProducersInfoAsJSON() throws Exception { JSONArray producers = new JSONArray(); - - + + for (ServerSession session : server.getSessions()) { session.describeProducersInfo(producers); } - + return producers.toString(); } @@ -1297,7 +1297,7 @@ public Object[] getConnectors() throws Exception try { Collection connectorConfigurations = configuration.getConnectorConfigurations() - .values(); + .values(); Object[] ret = new Object[connectorConfigurations.size()]; @@ -1358,23 +1358,23 @@ public void addSecuritySettings(final String addressMatch, try { Set roles = SecurityFormatter.createSecurity(sendRoles, - consumeRoles, - createDurableQueueRoles, - deleteDurableQueueRoles, - createNonDurableQueueRoles, - deleteNonDurableQueueRoles, - manageRoles); + consumeRoles, + createDurableQueueRoles, + deleteDurableQueueRoles, + createNonDurableQueueRoles, + deleteNonDurableQueueRoles, + manageRoles); server.getSecurityRepository().addMatch(addressMatch, roles); PersistedRoles persistedRoles = new PersistedRoles(addressMatch, - sendRoles, - consumeRoles, - createDurableQueueRoles, - deleteDurableQueueRoles, - createNonDurableQueueRoles, - deleteNonDurableQueueRoles, - manageRoles); + sendRoles, + consumeRoles, + createDurableQueueRoles, + deleteDurableQueueRoles, + createNonDurableQueueRoles, + deleteNonDurableQueueRoles, + manageRoles); storageManager.storeSecurityRoles(persistedRoles); } @@ -1416,14 +1416,14 @@ public Object[] getRoles(final String addressMatch) throws Exception int i = 0; for (Role role : roles) { - objRoles[i++] = new Object[] { role.getName(), - CheckType.SEND.hasRole(role), - CheckType.CONSUME.hasRole(role), - CheckType.CREATE_DURABLE_QUEUE.hasRole(role), - CheckType.DELETE_DURABLE_QUEUE.hasRole(role), - CheckType.CREATE_NON_DURABLE_QUEUE.hasRole(role), - CheckType.DELETE_NON_DURABLE_QUEUE.hasRole(role), - CheckType.MANAGE.hasRole(role) }; + objRoles[i++] = new Object[]{role.getName(), + CheckType.SEND.hasRole(role), + CheckType.CONSUME.hasRole(role), + CheckType.CREATE_DURABLE_QUEUE.hasRole(role), + CheckType.DELETE_DURABLE_QUEUE.hasRole(role), + CheckType.CREATE_NON_DURABLE_QUEUE.hasRole(role), + CheckType.DELETE_NON_DURABLE_QUEUE.hasRole(role), + CheckType.MANAGE.hasRole(role)}; } return objRoles; } @@ -1480,16 +1480,17 @@ public String getAddressSettingsAsJSON(final String address) throws Exception settings.put("lastValueQueue", addressSettings.isLastValueQueue()); settings.put("sendToDLAOnNoRoute", addressSettings.isSendToDLAOnNoRoute()); String policy = addressSettings.getAddressFullMessagePolicy() == AddressFullMessagePolicy.PAGE ? "PAGE" - : addressSettings.getAddressFullMessagePolicy() == AddressFullMessagePolicy.BLOCK ? "BLOCK" - : "DROP"; + : addressSettings.getAddressFullMessagePolicy() == AddressFullMessagePolicy.BLOCK ? "BLOCK" + : addressSettings.getAddressFullMessagePolicy() == AddressFullMessagePolicy.DROP ? "DROP" + : "FAIL"; settings.put("addressFullMessagePolicy", policy); JSONObject jsonObject = new JSONObject(settings); return jsonObject.toString(); } - - public void addAddressSettings(final String address, + + public void addAddressSettings(final String address, final String DLA, final String expiryAddress, final boolean lastValueQueue, @@ -1511,10 +1512,10 @@ public void addAddressSettings(final String address, { throw new IllegalStateException("pageSize has to be lower than maxSizeBytes. Invalid argument (" + pageSizeBytes + " < " + maxSizeBytes + ")"); } - - if (maxSizeBytes < -1 ) + + if (maxSizeBytes < -1) { - throw new IllegalStateException("Invalid argument on maxSizeBytes"); + throw new IllegalStateException("Invalid argument on maxSizeBytes"); } AddressSettings addressSettings = new AddressSettings(); @@ -1546,6 +1547,10 @@ else if (addressFullMessagePolicy.equalsIgnoreCase("BLOCK")) { addressSettings.setAddressFullMessagePolicy(AddressFullMessagePolicy.BLOCK); } + else if (addressFullMessagePolicy.equalsIgnoreCase("FAIL")) + { + addressSettings.setAddressFullMessagePolicy(AddressFullMessagePolicy.FAIL); + } server.getAddressSettingsRepository().addMatch(address, addressSettings); storageManager.storeAddressSetting(new PersistedAddressSetting(new SimpleString(address), addressSettings)); @@ -1585,7 +1590,7 @@ public String[] getDivertNames() String[] names = new String[diverts.length]; for (int i = 0; i < diverts.length; i++) { - DivertControl divert = (DivertControl)diverts[i]; + DivertControl divert = (DivertControl) diverts[i]; names[i] = divert.getUniqueName(); } @@ -1611,12 +1616,12 @@ public void createDivert(final String name, try { DivertConfiguration config = new DivertConfiguration(name, - routingName, - address, - forwardingAddress, - exclusive, - filterString, - transformerClassName); + routingName, + address, + forwardingAddress, + exclusive, + filterString, + transformerClassName); server.deployDivert(config); } finally @@ -1651,7 +1656,7 @@ public String[] getBridgeNames() String[] names = new String[bridges.length]; for (int i = 0; i < bridges.length; i++) { - BridgeControl bridge = (BridgeControl)bridges[i]; + BridgeControl bridge = (BridgeControl) bridges[i]; names[i] = bridge.getName(); } @@ -1691,45 +1696,45 @@ public void createBridge(final String name, if (useDiscoveryGroup) { config = new BridgeConfiguration(name, - queueName, - forwardingAddress, - filterString, - transformerClassName, - HornetQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE, - clientFailureCheckPeriod, - HornetQClient.DEFAULT_CONNECTION_TTL, - retryInterval, - HornetQClient.DEFAULT_MAX_RETRY_INTERVAL, - retryIntervalMultiplier, - reconnectAttempts, - useDuplicateDetection, - confirmationWindowSize, - connectorNames, - ha, - user, - password); + queueName, + forwardingAddress, + filterString, + transformerClassName, + HornetQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE, + clientFailureCheckPeriod, + HornetQClient.DEFAULT_CONNECTION_TTL, + retryInterval, + HornetQClient.DEFAULT_MAX_RETRY_INTERVAL, + retryIntervalMultiplier, + reconnectAttempts, + useDuplicateDetection, + confirmationWindowSize, + connectorNames, + ha, + user, + password); } else { List connectors = toList(connectorNames); config = new BridgeConfiguration(name, - queueName, - forwardingAddress, - filterString, - transformerClassName, - HornetQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE, - clientFailureCheckPeriod, - HornetQClient.DEFAULT_CONNECTION_TTL, - retryInterval, - HornetQClient.DEFAULT_MAX_RETRY_INTERVAL, - retryIntervalMultiplier, - reconnectAttempts, - useDuplicateDetection, - confirmationWindowSize, - connectors, - ha, - user, - password); + queueName, + forwardingAddress, + filterString, + transformerClassName, + HornetQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE, + clientFailureCheckPeriod, + HornetQClient.DEFAULT_CONNECTION_TTL, + retryInterval, + HornetQClient.DEFAULT_MAX_RETRY_INTERVAL, + retryIntervalMultiplier, + reconnectAttempts, + useDuplicateDetection, + confirmationWindowSize, + connectors, + ha, + user, + password); } server.deployBridge(config); } @@ -1823,9 +1828,9 @@ public MBeanNotificationInfo[] getNotificationInfo() { names[i] = values[i].toString(); } - return new MBeanNotificationInfo[] { new MBeanNotificationInfo(names, - this.getClass().getName(), - "Notifications emitted by a Core Server") }; + return new MBeanNotificationInfo[]{new MBeanNotificationInfo(names, + this.getClass().getName(), + "Notifications emitted by a Core Server")}; } // Package protected --------------------------------------------- diff --git a/hornetq-core/src/main/java/org/hornetq/core/paging/PagingStore.java b/hornetq-core/src/main/java/org/hornetq/core/paging/PagingStore.java index c5873f9f332..49aa819ca10 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/paging/PagingStore.java +++ b/hornetq-core/src/main/java/org/hornetq/core/paging/PagingStore.java @@ -121,7 +121,7 @@ public interface PagingStore extends HornetQComponent void addSize(int size); - void executeRunnableWhenMemoryAvailable(Runnable runnable); + boolean checkMemory(Runnable runnable); /** * Write lock the PagingStore. diff --git a/hornetq-core/src/main/java/org/hornetq/core/paging/impl/PagingStoreImpl.java b/hornetq-core/src/main/java/org/hornetq/core/paging/impl/PagingStoreImpl.java index f13c4f477ee..2e54aed553d 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/paging/impl/PagingStoreImpl.java +++ b/hornetq-core/src/main/java/org/hornetq/core/paging/impl/PagingStoreImpl.java @@ -13,24 +13,6 @@ package org.hornetq.core.paging.impl; -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Queue; -import java.util.Set; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.Executor; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.locks.ReadWriteLock; -import java.util.concurrent.locks.ReentrantReadWriteLock; -import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock; - import org.hornetq.api.core.SimpleString; import org.hornetq.core.journal.SequentialFile; import org.hornetq.core.journal.SequentialFileFactory; @@ -58,13 +40,28 @@ import org.hornetq.core.transaction.TransactionPropertyIndexes; import org.hornetq.utils.FutureLatch; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Queue; +import java.util.Set; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.Executor; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock; + /** - * - * @see PagingStore - * * @author Clebert Suconic * @author Tim Fox - * + * @see PagingStore */ public class PagingStoreImpl implements PagingStore { @@ -158,11 +155,11 @@ public PagingStoreImpl(final SimpleString address, if (addressFullMessagePolicy == AddressFullMessagePolicy.PAGE && maxSize != -1 && pageSize >= maxSize) { throw new IllegalStateException("pageSize for address " + address + - " >= maxSize. Normally pageSize should" + - " be significantly smaller than maxSize, ms: " + - maxSize + - " ps " + - pageSize); + " >= maxSize. Normally pageSize should" + + " be significantly smaller than maxSize, ms: " + + maxSize + + " ps " + + pageSize); } this.executor = executor; @@ -215,10 +212,10 @@ public String toString() public boolean lock(long timeout) { if (timeout == -1) - { - lock.writeLock().lock(); + { + lock.writeLock().lock(); return true; - } + } try { return lock.writeLock().tryLock(timeout, TimeUnit.MILLISECONDS); @@ -295,6 +292,10 @@ public boolean isPaging() { return false; } + if (addressFullMessagePolicy == AddressFullMessagePolicy.FAIL) + { + return isFull(); + } if (addressFullMessagePolicy == AddressFullMessagePolicy.DROP) { return isFull(); @@ -464,7 +465,7 @@ public void start() throws Exception if (msg.getMessage().isLargeMessage()) { // We have to do this since addLIveMessage will increment an extra one - ((LargeServerMessage)msg.getMessage()).decrementDelayDeletionCount(); + ((LargeServerMessage) msg.getMessage()).decrementDelayDeletionCount(); } } @@ -529,29 +530,29 @@ public boolean startPaging() { synchronized (pagingGuard) { - if (paging) - { - return false; - } - - if (currentPage == null) - { - try + if (paging) { - openNewPage(); + return false; } - catch (Exception e) + + if (currentPage == null) { - // If not possible to starting page due to an IO error, we will just consider it non paging. - // This shouldn't happen anyway - HornetQLogger.LOGGER.pageStoreStartIOError(e); - return false; + try + { + openNewPage(); + } + catch (Exception e) + { + // If not possible to starting page due to an IO error, we will just consider it non paging. + // This shouldn't happen anyway + HornetQLogger.LOGGER.pageStoreStartIOError(e); + return false; + } } - } - paging = true; + paging = true; - return true; + return true; } } finally @@ -600,15 +601,17 @@ public void forceAnotherPage() throws Exception openNewPage(); } - /** + /** * Returns a Page out of the Page System without reading it. *

* The method calling this method will remove the page and will start reading it outside of any * locks. This method could also replace the current file by a new file, and that process is done * through acquiring a writeLock on currentPageLock. + *

*

* Observation: This method is used internally as part of the regular depage process, but * externally is used only on tests, and that's why this method is part of the Testable Interface + *

*/ public Page depage() throws Exception { @@ -719,13 +722,13 @@ public synchronized void run() } } - public void executeRunnableWhenMemoryAvailable(final Runnable runnable) + public boolean checkMemory(final Runnable runWhenAvailable) { if (addressFullMessagePolicy == AddressFullMessagePolicy.BLOCK && maxSize != -1) { if (sizeInBytes.get() > maxSize) { - OurRunnable ourRunnable = new OurRunnable(runnable); + OurRunnable ourRunnable = new OurRunnable(runWhenAvailable); onMemoryFreedRunnables.add(ourRunnable); @@ -739,11 +742,20 @@ public void executeRunnableWhenMemoryAvailable(final Runnable runnable) ourRunnable.run(); } - return; + return true; } } + else if (addressFullMessagePolicy == AddressFullMessagePolicy.FAIL && maxSize != -1) + { + if (sizeInBytes.get() > maxSize) + { + return false; + } + } + + runWhenAvailable.run(); - runnable.run(); + return true; } public void addSize(final int size) @@ -785,7 +797,7 @@ else if (addressFullMessagePolicy == AddressFullMessagePolicy.PAGE) return; } - else if (addressFullMessagePolicy == AddressFullMessagePolicy.DROP) + else if (addressFullMessagePolicy == AddressFullMessagePolicy.DROP || addressFullMessagePolicy == AddressFullMessagePolicy.FAIL) { sizeInBytes.addAndGet(size); } @@ -802,10 +814,9 @@ public boolean page(final ServerMessage message, final RoutingContext ctx, ReadL } @Override - public - boolean - page(ServerMessage message, final Transaction tx, RouteContextList listCtx, final ReadLock managerLock) - throws Exception + public boolean + page(ServerMessage message, final Transaction tx, RouteContextList listCtx, final ReadLock managerLock) + throws Exception { if (!running) @@ -815,7 +826,7 @@ public boolean page(final ServerMessage message, final RoutingContext ctx, ReadL boolean full = isFull(); - if (addressFullMessagePolicy == AddressFullMessagePolicy.DROP) + if (addressFullMessagePolicy == AddressFullMessagePolicy.DROP || addressFullMessagePolicy == AddressFullMessagePolicy.FAIL) { if (full) { @@ -874,7 +885,7 @@ else if (addressFullMessagePolicy == AddressFullMessagePolicy.BLOCK) if (message.isLargeMessage()) { - ((LargeServerMessage)message).setPaged(); + ((LargeServerMessage) message).setPaged(); } int bytesToWrite = pagedMessage.getEncodeSize() + Page.SIZE_RECORD; @@ -891,7 +902,7 @@ else if (addressFullMessagePolicy == AddressFullMessagePolicy.BLOCK) if (isTrace) { HornetQLogger.LOGGER.trace("Paging message " + pagedMessage + " on pageStore " + this.getStoreName() + - " pageId=" + currentPage.getPageId()); + " pageId=" + currentPage.getPageId()); } if (tx != null) @@ -940,7 +951,7 @@ private long[] routeQueues(Transaction tx, RouteContextList ctx) throws Exceptio private void installPageTransaction(final Transaction tx, final RouteContextList listCtx) throws Exception { - FinishPageMessageOperation pgOper = (FinishPageMessageOperation)tx.getProperty(TransactionPropertyIndexes.PAGE_TRANSACTION); + FinishPageMessageOperation pgOper = (FinishPageMessageOperation) tx.getProperty(TransactionPropertyIndexes.PAGE_TRANSACTION); if (pgOper == null) { PageTransactionInfo pgTX = new PageTransactionInfoImpl(tx.getID()); diff --git a/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/CoreSessionCallback.java b/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/CoreSessionCallback.java index 0b131ab8e35..7ec674f8925 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/CoreSessionCallback.java +++ b/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/CoreSessionCallback.java @@ -15,6 +15,7 @@ import org.hornetq.api.core.SimpleString; import org.hornetq.core.protocol.core.Channel; import org.hornetq.core.protocol.core.Packet; +import org.hornetq.core.protocol.core.impl.wireformat.SessionProducerCreditsFailMessage; import org.hornetq.core.protocol.core.impl.wireformat.SessionProducerCreditsMessage; import org.hornetq.core.protocol.core.impl.wireformat.SessionReceiveContinuationMessage; import org.hornetq.core.protocol.core.impl.wireformat.SessionReceiveLargeMessage; @@ -84,6 +85,14 @@ public void sendProducerCreditsMessage(int credits, SimpleString address) channel.send(packet); } + @Override + public void sendProducerCreditsFailMessage(int credits, SimpleString address) + { + Packet packet = new SessionProducerCreditsFailMessage(credits, address); + + channel.send(packet); + } + public void closed() { protocolManager.removeHandler(name); diff --git a/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/PacketDecoder.java b/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/PacketDecoder.java index 36539b8ce9f..c790f945082 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/PacketDecoder.java +++ b/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/PacketDecoder.java @@ -54,6 +54,7 @@ import static org.hornetq.core.protocol.core.impl.PacketImpl.SESS_FORCE_CONSUMER_DELIVERY; import static org.hornetq.core.protocol.core.impl.PacketImpl.SESS_INDIVIDUAL_ACKNOWLEDGE; import static org.hornetq.core.protocol.core.impl.PacketImpl.SESS_PRODUCER_CREDITS; +import static org.hornetq.core.protocol.core.impl.PacketImpl.SESS_PRODUCER_FAIL_CREDITS; import static org.hornetq.core.protocol.core.impl.PacketImpl.SESS_PRODUCER_REQUEST_CREDITS; import static org.hornetq.core.protocol.core.impl.PacketImpl.SESS_QUEUEQUERY; import static org.hornetq.core.protocol.core.impl.PacketImpl.SESS_QUEUEQUERY_RESP; @@ -88,8 +89,8 @@ import org.hornetq.api.core.HornetQBuffer; import org.hornetq.core.protocol.core.Packet; -import org.hornetq.core.protocol.core.impl.wireformat.BackupReplicationStartFailedMessage; import org.hornetq.core.protocol.core.impl.wireformat.BackupRegistrationMessage; +import org.hornetq.core.protocol.core.impl.wireformat.BackupReplicationStartFailedMessage; import org.hornetq.core.protocol.core.impl.wireformat.ClusterTopologyChangeMessage; import org.hornetq.core.protocol.core.impl.wireformat.ClusterTopologyChangeMessage_V2; import org.hornetq.core.protocol.core.impl.wireformat.CreateQueueMessage; @@ -134,6 +135,7 @@ import org.hornetq.core.protocol.core.impl.wireformat.SessionExpireMessage; import org.hornetq.core.protocol.core.impl.wireformat.SessionForceConsumerDelivery; import org.hornetq.core.protocol.core.impl.wireformat.SessionIndividualAcknowledgeMessage; +import org.hornetq.core.protocol.core.impl.wireformat.SessionProducerCreditsFailMessage; import org.hornetq.core.protocol.core.impl.wireformat.SessionProducerCreditsMessage; import org.hornetq.core.protocol.core.impl.wireformat.SessionQueueQueryMessage; import org.hornetq.core.protocol.core.impl.wireformat.SessionQueueQueryResponseMessage; @@ -435,6 +437,11 @@ public static Packet decode(final HornetQBuffer in) packet = new SessionProducerCreditsMessage(); break; } + case SESS_PRODUCER_FAIL_CREDITS: + { + packet = new SessionProducerCreditsFailMessage(); + break; + } case REPLICATION_APPEND: { packet = new ReplicationAddMessage(); diff --git a/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/PacketImpl.java b/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/PacketImpl.java index 63b5dfd8f06..72929358d11 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/PacketImpl.java +++ b/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/PacketImpl.java @@ -148,6 +148,8 @@ public class PacketImpl implements Packet public static final byte SESS_INDIVIDUAL_ACKNOWLEDGE = 81; + public static final byte SESS_PRODUCER_FAIL_CREDITS = 82; + // Replication public static final byte REPLICATION_RESPONSE = 90; diff --git a/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/wireformat/SessionProducerCreditsFailMessage.java b/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/wireformat/SessionProducerCreditsFailMessage.java new file mode 100644 index 00000000000..a63f374d0ba --- /dev/null +++ b/hornetq-core/src/main/java/org/hornetq/core/protocol/core/impl/wireformat/SessionProducerCreditsFailMessage.java @@ -0,0 +1,99 @@ +/* + * Copyright 2009 Red Hat, Inc. + * Red Hat licenses this file to you under the Apache License, version + * 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package org.hornetq.core.protocol.core.impl.wireformat; + +import org.hornetq.api.core.HornetQBuffer; +import org.hornetq.api.core.SimpleString; +import org.hornetq.core.protocol.core.impl.PacketImpl; + +/** + * @author Justin Bertram + * + */ +public class SessionProducerCreditsFailMessage extends PacketImpl +{ + private int credits; + + private SimpleString address; + + public SessionProducerCreditsFailMessage(final int credits, final SimpleString address) + { + super(PacketImpl.SESS_PRODUCER_FAIL_CREDITS); + + this.credits = credits; + + this.address = address; + } + + public SessionProducerCreditsFailMessage() + { + super(PacketImpl.SESS_PRODUCER_FAIL_CREDITS); + } + + public int getCredits() + { + return credits; + } + + public SimpleString getAddress() + { + return address; + } + + @Override + public void encodeRest(final HornetQBuffer buffer) + { + buffer.writeInt(credits); + buffer.writeSimpleString(address); + } + + @Override + public void decodeRest(final HornetQBuffer buffer) + { + credits = buffer.readInt(); + address = buffer.readSimpleString(); + } + + @Override + public int hashCode() + { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((address == null) ? 0 : address.hashCode()); + result = prime * result + credits; + return result; + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (!(obj instanceof SessionProducerCreditsFailMessage)) + return false; + SessionProducerCreditsFailMessage other = (SessionProducerCreditsFailMessage)obj; + if (address == null) + { + if (other.address != null) + return false; + } + else if (!address.equals(other.address)) + return false; + if (credits != other.credits) + return false; + return true; + } +} diff --git a/hornetq-core/src/main/java/org/hornetq/core/protocol/stomp/StompSession.java b/hornetq-core/src/main/java/org/hornetq/core/protocol/stomp/StompSession.java index fd18f4397ce..e31dbb61720 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/protocol/stomp/StompSession.java +++ b/hornetq-core/src/main/java/org/hornetq/core/protocol/stomp/StompSession.java @@ -79,6 +79,10 @@ public void sendProducerCreditsMessage(int credits, SimpleString address) { } + public void sendProducerCreditsFailMessage(int credits, SimpleString address) + { + } + public int sendMessage(ServerMessage serverMessage, long consumerID, int deliveryCount) { try diff --git a/hornetq-core/src/main/java/org/hornetq/core/server/HornetQMessageBundle.java b/hornetq-core/src/main/java/org/hornetq/core/server/HornetQMessageBundle.java index 61bc39e414e..08d68028943 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/server/HornetQMessageBundle.java +++ b/hornetq-core/src/main/java/org/hornetq/core/server/HornetQMessageBundle.java @@ -21,11 +21,12 @@ */ package org.hornetq.core.server; +import org.hornetq.api.core.HornetQAddressFullException; import org.hornetq.api.core.HornetQConnectionTimedOutException; import org.hornetq.api.core.HornetQDisconnectedException; import org.hornetq.api.core.HornetQDuplicateMetaDataException; -import org.hornetq.api.core.HornetQIllegalStateException; import org.hornetq.api.core.HornetQIOErrorException; +import org.hornetq.api.core.HornetQIllegalStateException; import org.hornetq.api.core.HornetQIncompatibleClientServerException; import org.hornetq.api.core.HornetQInternalErrorException; import org.hornetq.api.core.HornetQInvalidFilterExpressionException; @@ -36,10 +37,10 @@ import org.hornetq.api.core.HornetQQueueExistsException; import org.hornetq.api.core.HornetQSecurityException; import org.hornetq.api.core.HornetQSessionCreationException; -import org.hornetq.api.core.SimpleString; import org.hornetq.api.core.HornetQTransactionOutcomeUnknownException; import org.hornetq.api.core.HornetQTransactionRolledBackException; import org.hornetq.api.core.HornetQUnBlockedException; +import org.hornetq.api.core.SimpleString; import org.hornetq.core.cluster.DiscoveryGroup; import org.hornetq.core.postoffice.Binding; import org.hornetq.core.protocol.core.impl.wireformat.ReplicationSyncFileMessage; @@ -488,4 +489,8 @@ public interface HornetQMessageBundle @Message(id = 119138, value = "method autoEncode doesn't know how to convert {0} yet", format = Message.Format.MESSAGE_FORMAT) IllegalArgumentException autoConvertError(Class aClass); + + @Message(id = 119139, value = "Address \"{0}\" is full. Message encode size = {1}B", format = Message.Format.MESSAGE_FORMAT) + HornetQAddressFullException addressIsFull(String addressName, int size); + } diff --git a/hornetq-core/src/main/java/org/hornetq/core/server/impl/ServerSessionImpl.java b/hornetq-core/src/main/java/org/hornetq/core/server/impl/ServerSessionImpl.java index 65d38e942c8..97b75a708f2 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/server/impl/ServerSessionImpl.java +++ b/hornetq-core/src/main/java/org/hornetq/core/server/impl/ServerSessionImpl.java @@ -1332,13 +1332,15 @@ public void requestProducerCredits(final SimpleString address, final int credits { PagingStore store = postOffice.getPagingManager().getPageStore(address); - store.executeRunnableWhenMemoryAvailable(new Runnable() + if (!store.checkMemory(new Runnable() { public void run() { callback.sendProducerCreditsMessage(credits, address); } - }); + })) { + callback.sendProducerCreditsFailMessage(credits, address); + } } public void setTransferring(final boolean transferring) diff --git a/hornetq-core/src/main/java/org/hornetq/core/settings/impl/AddressFullMessagePolicy.java b/hornetq-core/src/main/java/org/hornetq/core/settings/impl/AddressFullMessagePolicy.java index 402d6815624..ef4b6827526 100644 --- a/hornetq-core/src/main/java/org/hornetq/core/settings/impl/AddressFullMessagePolicy.java +++ b/hornetq-core/src/main/java/org/hornetq/core/settings/impl/AddressFullMessagePolicy.java @@ -22,5 +22,5 @@ */ public enum AddressFullMessagePolicy { - DROP, PAGE, BLOCK; + DROP, PAGE, BLOCK, FAIL; } diff --git a/hornetq-core/src/main/java/org/hornetq/spi/core/protocol/SessionCallback.java b/hornetq-core/src/main/java/org/hornetq/spi/core/protocol/SessionCallback.java index d240d24d09a..d517f735b48 100644 --- a/hornetq-core/src/main/java/org/hornetq/spi/core/protocol/SessionCallback.java +++ b/hornetq-core/src/main/java/org/hornetq/spi/core/protocol/SessionCallback.java @@ -28,6 +28,8 @@ public interface SessionCallback { void sendProducerCreditsMessage(int credits, SimpleString address); + void sendProducerCreditsFailMessage(int credits, SimpleString address); + int sendMessage(ServerMessage message, long consumerID, int deliveryCount); int sendLargeMessage(ServerMessage message, long consumerID, long bodySize, int deliveryCount); diff --git a/hornetq-core/src/main/resources/schema/hornetq-configuration.xsd b/hornetq-core/src/main/resources/schema/hornetq-configuration.xsd index 7d4a4d940ff..f7b2b55454a 100644 --- a/hornetq-core/src/main/resources/schema/hornetq-configuration.xsd +++ b/hornetq-core/src/main/resources/schema/hornetq-configuration.xsd @@ -1,447 +1,448 @@ - - - - - - - - - Whether or not we should check the cluster for a live server when starting up (replicated servers only) - - - - - - + + + + + + + + + Whether or not we should check the cluster for a live server when starting up (replicated servers only) + + + + + + - - Maximum number of threads to use for the scheduled thread pool - + + Maximum number of threads to use for the scheduled thread pool + - - + + - - Maximum number of threads to use for the thread pool - + + Maximum number of threads to use for the thread pool + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + Whether a server will automatically stop when a another places a request to take over its place. The use case is when a regular server stops and its backup takes over its duties, later the main - server restarts and requests the server (the former backup) to stop operating. + server restarts and requests the server (the former backup) to stop operating. - - - - + + + + 'shared-store' applies to live and backup pairs, and it indicates if the live/backup pair share storage or if the data is replicated among them. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - + + + + + + + + - - - - - - - + + + + + + + diff --git a/tests/integration-tests/src/test/java/org/hornetq/tests/integration/client/PagingTest.java b/tests/integration-tests/src/test/java/org/hornetq/tests/integration/client/PagingTest.java index 960e98578d6..636883973ee 100644 --- a/tests/integration-tests/src/test/java/org/hornetq/tests/integration/client/PagingTest.java +++ b/tests/integration-tests/src/test/java/org/hornetq/tests/integration/client/PagingTest.java @@ -35,6 +35,7 @@ import org.hornetq.api.core.HornetQBuffer; import org.hornetq.api.core.HornetQException; +import org.hornetq.api.core.HornetQExceptionType; import org.hornetq.api.core.Message; import org.hornetq.api.core.SimpleString; import org.hornetq.api.core.client.ClientConsumer; @@ -71,10 +72,8 @@ * A PagingTest * * @author Clebert Suconic - * - * Created Dec 5, 2008 8:25:58 PM - * - * + *

+ * Created Dec 5, 2008 8:25:58 PM */ public class PagingTest extends ServiceTestBase { @@ -111,133 +110,133 @@ protected void setUp() throws Exception locator = createInVMNonHALocator(); } - public void testPageCleanup() throws Exception - { - clearData(); + public void testPageCleanup() throws Exception + { + clearData(); - Configuration config = createDefaultConfig(); + Configuration config = createDefaultConfig(); - config.setJournalSyncNonTransactional(false); + config.setJournalSyncNonTransactional(false); - server = - createServer(true, config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + server = + createServer(true, config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); - server.start(); + server.start(); - final int numberOfMessages = 5000; + final int numberOfMessages = 5000; - locator = createInVMNonHALocator(); + locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - ClientSession session = sf.createSession(false, false, false); + ClientSession session = sf.createSession(false, false, false); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - byte[] body = new byte[MESSAGE_SIZE]; + byte[] body = new byte[MESSAGE_SIZE]; - ByteBuffer bb = ByteBuffer.wrap(body); + ByteBuffer bb = ByteBuffer.wrap(body); - for (int j = 1; j <= MESSAGE_SIZE; j++) - { - bb.put(getSamplebyte(j)); - } + for (int j = 1; j <= MESSAGE_SIZE; j++) + { + bb.put(getSamplebyte(j)); + } - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(true); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(true); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - bodyLocal.writeBytes(body); + bodyLocal.writeBytes(body); - producer.send(message); - if (i % 1000 == 0) - { - session.commit(); - } - } - session.commit(); - producer.close(); - session.close(); - - session = sf.createSession(false, false, false); - producer = session.createProducer(PagingTest.ADDRESS); - producer.send(session.createMessage(true)); - session.rollback(); - producer.close(); - session.close(); - - session = sf.createSession(false, false, false); - producer = session.createProducer(PagingTest.ADDRESS); - - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(true); + producer.send(message); + if (i % 1000 == 0) + { + session.commit(); + } + } + session.commit(); + producer.close(); + session.close(); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + session = sf.createSession(false, false, false); + producer = session.createProducer(PagingTest.ADDRESS); + producer.send(session.createMessage(true)); + session.rollback(); + producer.close(); + session.close(); - bodyLocal.writeBytes(body); + session = sf.createSession(false, false, false); + producer = session.createProducer(PagingTest.ADDRESS); - producer.send(message); - if (i % 1000 == 0) - { - session.commit(); - } - } - session.commit(); - producer.close(); - session.close(); - //System.out.println("Just sent " + numberOfMessages + " messages."); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(true); + + HornetQBuffer bodyLocal = message.getBodyBuffer(); + + bodyLocal.writeBytes(body); + + producer.send(message); + if (i % 1000 == 0) + { + session.commit(); + } + } + session.commit(); + producer.close(); + session.close(); + //System.out.println("Just sent " + numberOfMessages + " messages."); - Queue queue = server.locateQueue(PagingTest.ADDRESS); + Queue queue = server.locateQueue(PagingTest.ADDRESS); - session = sf.createSession(false, false, false); + session = sf.createSession(false, false, false); - session.start(); + session.start(); - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - ClientMessage msg = null; + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + ClientMessage msg = null; - assertEquals(numberOfMessages * 2, queue.getMessageCount()); - for (int i = 0; i < numberOfMessages * 2; i++) - { - msg = consumer.receive(1000); - assertNotNull(msg); - msg.acknowledge(); - if (i % 500 == 0) - { - session.commit(); - } - } - session.commit(); - consumer.close(); - session.close(); + assertEquals(numberOfMessages * 2, queue.getMessageCount()); + for (int i = 0; i < numberOfMessages * 2; i++) + { + msg = consumer.receive(1000); + assertNotNull(msg); + msg.acknowledge(); + if (i % 500 == 0) + { + session.commit(); + } + } + session.commit(); + consumer.close(); + session.close(); - sf.close(); + sf.close(); - locator.close(); + locator.close(); - assertEquals(0, queue.getMessageCount()); + assertEquals(0, queue.getMessageCount()); - long timeout = System.currentTimeMillis() + 10000; - while (timeout > System.currentTimeMillis() && queue.getPageSubscription().getPagingStore().isPaging()) - { - Thread.sleep(100); - } - assertFalse(queue.getPageSubscription().getPagingStore().isPaging()); - } + long timeout = System.currentTimeMillis() + 10000; + while (timeout > System.currentTimeMillis() && queue.getPageSubscription().getPagingStore().isPaging()) + { + Thread.sleep(100); + } + assertFalse(queue.getPageSubscription().getPagingStore().isPaging()); + } public void testPreparePersistent() throws Exception { @@ -248,10 +247,10 @@ public void testPreparePersistent() throws Exception config.setJournalSyncNonTransactional(false); server = - createServer(true, config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); @@ -263,192 +262,192 @@ public void testPreparePersistent() throws Exception locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); sf = createSessionFactory(locator); - ClientSession session = sf.createSession(false, false, false); + ClientSession session = sf.createSession(false, false, false); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - byte[] body = new byte[MESSAGE_SIZE]; + byte[] body = new byte[MESSAGE_SIZE]; - ByteBuffer bb = ByteBuffer.wrap(body); + ByteBuffer bb = ByteBuffer.wrap(body); - for (int j = 1; j <= MESSAGE_SIZE; j++) - { - bb.put(getSamplebyte(j)); - } + for (int j = 1; j <= MESSAGE_SIZE; j++) + { + bb.put(getSamplebyte(j)); + } - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(true); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(true); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - bodyLocal.writeBytes(body); + bodyLocal.writeBytes(body); - message.putIntProperty(new SimpleString("id"), i); + message.putIntProperty(new SimpleString("id"), i); - producer.send(message); - if (i % 1000 == 0) - { - session.commit(); - } + producer.send(message); + if (i % 1000 == 0) + { + session.commit(); } - session.commit(); - session.close(); - session = null; + } + session.commit(); + session.close(); + session = null; - sf.close(); - locator.close(); + sf.close(); + locator.close(); - server.stop(); + server.stop(); - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); - server.start(); + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); + server.start(); - locator = createInVMNonHALocator(); - sf = createSessionFactory(locator); + locator = createInVMNonHALocator(); + sf = createSessionFactory(locator); - Queue queue = server.locateQueue(ADDRESS); + Queue queue = server.locateQueue(ADDRESS); - assertEquals(numberOfMessages, queue.getMessageCount()); + assertEquals(numberOfMessages, queue.getMessageCount()); - LinkedList xids = new LinkedList(); + LinkedList xids = new LinkedList(); - int msgReceived = 0; - for (int i = 0; i < numberOfTX; i++) + int msgReceived = 0; + for (int i = 0; i < numberOfTX; i++) + { + ClientSession sessionConsumer = sf.createSession(true, false, false); + Xid xid = newXID(); + xids.add(xid); + sessionConsumer.start(xid, XAResource.TMNOFLAGS); + sessionConsumer.start(); + ClientConsumer consumer = sessionConsumer.createConsumer(PagingTest.ADDRESS); + for (int msgCount = 0; msgCount < messagesPerTX; msgCount++) { - ClientSession sessionConsumer = sf.createSession(true, false, false); - Xid xid = newXID(); - xids.add(xid); - sessionConsumer.start(xid, XAResource.TMNOFLAGS); - sessionConsumer.start(); - ClientConsumer consumer = sessionConsumer.createConsumer(PagingTest.ADDRESS); - for (int msgCount = 0; msgCount < messagesPerTX; msgCount++) + if (msgReceived == numberOfMessages) { - if (msgReceived == numberOfMessages) - { - break; - } - msgReceived++; - ClientMessage msg = consumer.receive(10000); - assertNotNull(msg); - msg.acknowledge(); + break; } - sessionConsumer.end(xid, XAResource.TMSUCCESS); - sessionConsumer.prepare(xid); - sessionConsumer.close(); + msgReceived++; + ClientMessage msg = consumer.receive(10000); + assertNotNull(msg); + msg.acknowledge(); } + sessionConsumer.end(xid, XAResource.TMSUCCESS); + sessionConsumer.prepare(xid); + sessionConsumer.close(); + } - ClientSession sessionCheck = sf.createSession(true, true); + ClientSession sessionCheck = sf.createSession(true, true); - ClientConsumer consumer = sessionCheck.createConsumer(PagingTest.ADDRESS); + ClientConsumer consumer = sessionCheck.createConsumer(PagingTest.ADDRESS); - assertNull(consumer.receiveImmediate()); + assertNull(consumer.receiveImmediate()); - sessionCheck.close(); + sessionCheck.close(); - assertEquals(numberOfMessages, queue.getMessageCount()); + assertEquals(numberOfMessages, queue.getMessageCount()); - sf.close(); - locator.close(); + sf.close(); + locator.close(); - server.stop(); + server.stop(); - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); - server.start(); + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); + server.start(); - waitForServer(server); + waitForServer(server); - queue = server.locateQueue(ADDRESS); + queue = server.locateQueue(ADDRESS); - locator = createInVMNonHALocator(); - sf = createSessionFactory(locator); + locator = createInVMNonHALocator(); + sf = createSessionFactory(locator); - session = sf.createSession(true, false, false); + session = sf.createSession(true, false, false); - consumer = session.createConsumer(PagingTest.ADDRESS); + consumer = session.createConsumer(PagingTest.ADDRESS); - session.start(); + session.start(); - assertEquals(numberOfMessages, queue.getMessageCount()); + assertEquals(numberOfMessages, queue.getMessageCount()); - ClientMessage msg = consumer.receive(5000); - if (msg != null) + ClientMessage msg = consumer.receive(5000); + if (msg != null) + { + while (true) { - while (true) + ClientMessage msg2 = consumer.receive(1000); + if (msg2 == null) { - ClientMessage msg2 = consumer.receive(1000); - if (msg2 == null) - { - break; - } + break; } } - assertNull(msg); + } + assertNull(msg); - for (int i = xids.size() - 1; i >= 0; i--) - { - Xid xid = xids.get(i); - session.rollback(xid); - } + for (int i = xids.size() - 1; i >= 0; i--) + { + Xid xid = xids.get(i); + session.rollback(xid); + } - xids.clear(); + xids.clear(); - session.close(); + session.close(); - session = sf.createSession(false, false, false); + session = sf.createSession(false, false, false); - session.start(); + session.start(); - consumer = session.createConsumer(PagingTest.ADDRESS); + consumer = session.createConsumer(PagingTest.ADDRESS); - for (int i = 0; i < numberOfMessages; i++) - { - msg = consumer.receive(1000); - assertNotNull(msg); - msg.acknowledge(); + for (int i = 0; i < numberOfMessages; i++) + { + msg = consumer.receive(1000); + assertNotNull(msg); + msg.acknowledge(); - assertEquals(i, msg.getIntProperty("id").intValue()); + assertEquals(i, msg.getIntProperty("id").intValue()); - if (i % 500 == 0) - { - session.commit(); - } + if (i % 500 == 0) + { + session.commit(); } + } - session.commit(); + session.commit(); - session.close(); + session.close(); - sf.close(); + sf.close(); - locator.close(); + locator.close(); - assertEquals(0, queue.getMessageCount()); + assertEquals(0, queue.getMessageCount()); - long timeout = System.currentTimeMillis() + 5000; - while (timeout > System.currentTimeMillis() && queue.getPageSubscription().getPagingStore().isPaging()) - { - Thread.sleep(100); - } - assertFalse(queue.getPageSubscription().getPagingStore().isPaging()); + long timeout = System.currentTimeMillis() + 5000; + while (timeout > System.currentTimeMillis() && queue.getPageSubscription().getPagingStore().isPaging()) + { + Thread.sleep(100); + } + assertFalse(queue.getPageSubscription().getPagingStore().isPaging()); } public void testSendOverBlockingNoFlowControl() throws Exception @@ -460,12 +459,12 @@ public void testSendOverBlockingNoFlowControl() throws Exception config.setJournalSyncNonTransactional(false); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - AddressFullMessagePolicy.BLOCK, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + AddressFullMessagePolicy.BLOCK, + new HashMap()); server.start(); @@ -475,67 +474,67 @@ public void testSendOverBlockingNoFlowControl() throws Exception locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); - locator.setProducerWindowSize(-1); - locator.setMinLargeMessageSize(1024 * 1024); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); + locator.setProducerWindowSize(-1); + locator.setMinLargeMessageSize(1024 * 1024); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - ClientSession session = sf.createSession(false, false, false); + ClientSession session = sf.createSession(false, false, false); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - byte[] body = new byte[biggerMessageSize]; + byte[] body = new byte[biggerMessageSize]; - ByteBuffer bb = ByteBuffer.wrap(body); + ByteBuffer bb = ByteBuffer.wrap(body); - for (int j = 1; j <= biggerMessageSize; j++) - { - bb.put(getSamplebyte(j)); - } + for (int j = 1; j <= biggerMessageSize; j++) + { + bb.put(getSamplebyte(j)); + } - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(true); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(true); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - bodyLocal.writeBytes(body); + bodyLocal.writeBytes(body); - message.putIntProperty(new SimpleString("id"), i); + message.putIntProperty(new SimpleString("id"), i); - producer.send(message); + producer.send(message); - if (i % 10 == 0) - { - session.commit(); - } + if (i % 10 == 0) + { + session.commit(); } - session.commit(); + } + session.commit(); - session.start(); + session.start(); - ClientConsumer cons = session.createConsumer(ADDRESS); + ClientConsumer cons = session.createConsumer(ADDRESS); - for (int i = 0; i < numberOfMessages; i++) - { - message = cons.receive(5000); - assertNotNull(message); - message.acknowledge(); + for (int i = 0; i < numberOfMessages; i++) + { + message = cons.receive(5000); + assertNotNull(message); + message.acknowledge(); - if (i % 10 == 0) - { - session.commit(); - } + if (i % 10 == 0) + { + session.commit(); } + } - session.commit(); + session.commit(); } @@ -548,11 +547,11 @@ public void testReceiveImmediate() throws Exception config.setJournalSyncNonTransactional(false); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); @@ -560,109 +559,109 @@ public void testReceiveImmediate() throws Exception locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); sf = createSessionFactory(locator); - ClientSession session = sf.createSession(false, false, false); + ClientSession session = sf.createSession(false, false, false); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - byte[] body = new byte[MESSAGE_SIZE]; + byte[] body = new byte[MESSAGE_SIZE]; - ByteBuffer bb = ByteBuffer.wrap(body); + ByteBuffer bb = ByteBuffer.wrap(body); - for (int j = 1; j <= MESSAGE_SIZE; j++) - { - bb.put(getSamplebyte(j)); - } + for (int j = 1; j <= MESSAGE_SIZE; j++) + { + bb.put(getSamplebyte(j)); + } - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(true); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(true); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - bodyLocal.writeBytes(body); + bodyLocal.writeBytes(body); - message.putIntProperty(new SimpleString("id"), i); + message.putIntProperty(new SimpleString("id"), i); - producer.send(message); - if (i % 1000 == 0) - { - session.commit(); - } + producer.send(message); + if (i % 1000 == 0) + { + session.commit(); } - session.commit(); - session.close(); + } + session.commit(); + session.close(); - session = null; + session = null; - sf.close(); - locator.close(); + sf.close(); + locator.close(); - server.stop(); + server.stop(); - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); - server.start(); + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); + server.start(); - locator = createInVMNonHALocator(); - sf = createSessionFactory(locator); + locator = createInVMNonHALocator(); + sf = createSessionFactory(locator); - Queue queue = server.locateQueue(ADDRESS); + Queue queue = server.locateQueue(ADDRESS); - assertEquals(numberOfMessages, queue.getMessageCount()); + assertEquals(numberOfMessages, queue.getMessageCount()); - int msgReceived = 0; - ClientSession sessionConsumer = sf.createSession(false, false, false); - sessionConsumer.start(); - ClientConsumer consumer = sessionConsumer.createConsumer(PagingTest.ADDRESS); - for (int msgCount = 0; msgCount < numberOfMessages; msgCount++) + int msgReceived = 0; + ClientSession sessionConsumer = sf.createSession(false, false, false); + sessionConsumer.start(); + ClientConsumer consumer = sessionConsumer.createConsumer(PagingTest.ADDRESS); + for (int msgCount = 0; msgCount < numberOfMessages; msgCount++) + { + log.info("Received " + msgCount); + msgReceived++; + ClientMessage msg = consumer.receiveImmediate(); + if (msg == null) { - log.info("Received " + msgCount); - msgReceived++; - ClientMessage msg = consumer.receiveImmediate(); - if (msg == null) - { - log.info("It's null. leaving now"); - sessionConsumer.commit(); - fail("Didn't receive a message"); - } - msg.acknowledge(); + log.info("It's null. leaving now"); + sessionConsumer.commit(); + fail("Didn't receive a message"); + } + msg.acknowledge(); - if (msgCount % 5 == 0) - { - log.info("commit"); - sessionConsumer.commit(); - } + if (msgCount % 5 == 0) + { + log.info("commit"); + sessionConsumer.commit(); } + } - sessionConsumer.commit(); + sessionConsumer.commit(); - sessionConsumer.close(); + sessionConsumer.close(); - sf.close(); + sf.close(); - locator.close(); + locator.close(); - assertEquals(0, queue.getMessageCount()); + assertEquals(0, queue.getMessageCount()); - long timeout = System.currentTimeMillis() + 5000; - while (timeout > System.currentTimeMillis() && queue.getPageSubscription().getPagingStore().isPaging()) - { - Thread.sleep(100); - } - assertFalse(queue.getPageSubscription().getPagingStore().isPaging()); + long timeout = System.currentTimeMillis() + 5000; + while (timeout > System.currentTimeMillis() && queue.getPageSubscription().getPagingStore().isPaging()) + { + Thread.sleep(100); + } + assertFalse(queue.getPageSubscription().getPagingStore().isPaging()); } @@ -679,210 +678,210 @@ public void testDeletePhisicalPages() throws Exception config.setJournalSyncNonTransactional(false); server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); final int numberOfMessages = 1000; - locator = createInVMNonHALocator(); + locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); ClientSession session = sf.createSession(false, false, false); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - byte[] body = new byte[MESSAGE_SIZE]; + byte[] body = new byte[MESSAGE_SIZE]; - ByteBuffer bb = ByteBuffer.wrap(body); + ByteBuffer bb = ByteBuffer.wrap(body); - for (int j = 1; j <= MESSAGE_SIZE; j++) - { - bb.put(getSamplebyte(j)); - } + for (int j = 1; j <= MESSAGE_SIZE; j++) + { + bb.put(getSamplebyte(j)); + } - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(true); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(true); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - bodyLocal.writeBytes(body); + bodyLocal.writeBytes(body); - message.putIntProperty(new SimpleString("id"), i); + message.putIntProperty(new SimpleString("id"), i); - producer.send(message); - if (i % 1000 == 0) - { - session.commit(); - } + producer.send(message); + if (i % 1000 == 0) + { + session.commit(); } - session.commit(); - session.close(); + } + session.commit(); + session.close(); - session = null; + session = null; - sf.close(); - locator.close(); + sf.close(); + locator.close(); - server.stop(); + server.stop(); - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); - server.start(); + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); + server.start(); - locator = createInVMNonHALocator(); - sf = createSessionFactory(locator); + locator = createInVMNonHALocator(); + sf = createSessionFactory(locator); - Queue queue = server.locateQueue(ADDRESS); + Queue queue = server.locateQueue(ADDRESS); - assertEquals(numberOfMessages, queue.getMessageCount()); + assertEquals(numberOfMessages, queue.getMessageCount()); - int msgReceived = 0; - ClientSession sessionConsumer = sf.createSession(false, false, false); - sessionConsumer.start(); - ClientConsumer consumer = sessionConsumer.createConsumer(PagingTest.ADDRESS); - for (int msgCount = 0; msgCount < numberOfMessages; msgCount++) + int msgReceived = 0; + ClientSession sessionConsumer = sf.createSession(false, false, false); + sessionConsumer.start(); + ClientConsumer consumer = sessionConsumer.createConsumer(PagingTest.ADDRESS); + for (int msgCount = 0; msgCount < numberOfMessages; msgCount++) + { + log.info("Received " + msgCount); + msgReceived++; + ClientMessage msg = consumer.receiveImmediate(); + if (msg == null) { - log.info("Received " + msgCount); - msgReceived++; - ClientMessage msg = consumer.receiveImmediate(); - if (msg == null) - { - log.info("It's null. leaving now"); - sessionConsumer.commit(); - fail("Didn't receive a message"); - } - msg.acknowledge(); + log.info("It's null. leaving now"); + sessionConsumer.commit(); + fail("Didn't receive a message"); + } + msg.acknowledge(); - if (msgCount % 5 == 0) - { - log.info("commit"); - sessionConsumer.commit(); - } + if (msgCount % 5 == 0) + { + log.info("commit"); + sessionConsumer.commit(); } + } - sessionConsumer.commit(); + sessionConsumer.commit(); - sessionConsumer.close(); + sessionConsumer.close(); - sf.close(); + sf.close(); - locator.close(); + locator.close(); - assertEquals(0, queue.getMessageCount()); + assertEquals(0, queue.getMessageCount()); - long timeout = System.currentTimeMillis() + 5000; - while (timeout > System.currentTimeMillis() && queue.getPageSubscription().getPagingStore().isPaging()) - { - Thread.sleep(100); - } - assertFalse(queue.getPageSubscription().getPagingStore().isPaging()); + long timeout = System.currentTimeMillis() + 5000; + while (timeout > System.currentTimeMillis() && queue.getPageSubscription().getPagingStore().isPaging()) + { + Thread.sleep(100); + } + assertFalse(queue.getPageSubscription().getPagingStore().isPaging()); - server.stop(); + server.stop(); - // Deleting the paging data. Simulating a failure - // a dumb user, or anything that will remove the data - deleteDirectory(new File(getPageDir())); + // Deleting the paging data. Simulating a failure + // a dumb user, or anything that will remove the data + deleteDirectory(new File(getPageDir())); - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); - server.start(); + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); + server.start(); - locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator = createInVMNonHALocator(); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - queue = server.locateQueue(ADDRESS); + queue = server.locateQueue(ADDRESS); - sf = createSessionFactory(locator); - session = sf.createSession(false, false, false); + sf = createSessionFactory(locator); + session = sf.createSession(false, false, false); - producer = session.createProducer(PagingTest.ADDRESS); + producer = session.createProducer(PagingTest.ADDRESS); - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(true); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(true); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - bodyLocal.writeBytes(body); + bodyLocal.writeBytes(body); - message.putIntProperty(new SimpleString("id"), i); + message.putIntProperty(new SimpleString("id"), i); - producer.send(message); - if (i % 1000 == 0) - { - session.commit(); - } + producer.send(message); + if (i % 1000 == 0) + { + session.commit(); } + } - session.commit(); + session.commit(); - server.stop(); + server.stop(); - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); - server.start(); + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); + server.start(); - locator = createInVMNonHALocator(); - sf = createSessionFactory(locator); + locator = createInVMNonHALocator(); + sf = createSessionFactory(locator); - queue = server.locateQueue(ADDRESS); + queue = server.locateQueue(ADDRESS); - // assertEquals(numberOfMessages, queue.getMessageCount()); + // assertEquals(numberOfMessages, queue.getMessageCount()); - msgReceived = 0; - sessionConsumer = sf.createSession(false, false, false); - sessionConsumer.start(); - consumer = sessionConsumer.createConsumer(PagingTest.ADDRESS); - for (int msgCount = 0; msgCount < numberOfMessages; msgCount++) + msgReceived = 0; + sessionConsumer = sf.createSession(false, false, false); + sessionConsumer.start(); + consumer = sessionConsumer.createConsumer(PagingTest.ADDRESS); + for (int msgCount = 0; msgCount < numberOfMessages; msgCount++) + { + log.info("Received " + msgCount); + msgReceived++; + ClientMessage msg = consumer.receiveImmediate(); + if (msg == null) { - log.info("Received " + msgCount); - msgReceived++; - ClientMessage msg = consumer.receiveImmediate(); - if (msg == null) - { - log.info("It's null. leaving now"); - sessionConsumer.commit(); - fail("Didn't receive a message"); - } - msg.acknowledge(); + log.info("It's null. leaving now"); + sessionConsumer.commit(); + fail("Didn't receive a message"); + } + msg.acknowledge(); - if (msgCount % 5 == 0) - { - log.info("commit"); - sessionConsumer.commit(); - } + if (msgCount % 5 == 0) + { + log.info("commit"); + sessionConsumer.commit(); } + } - sessionConsumer.commit(); + sessionConsumer.commit(); - sessionConsumer.close(); + sessionConsumer.close(); } @@ -895,11 +894,11 @@ public void testMissingTXEverythingAcked() throws Exception config.setJournalSyncNonTransactional(false); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); @@ -973,13 +972,13 @@ public void testMissingTXEverythingAcked() throws Exception List list = new ArrayList(); JournalImpl jrn = new JournalImpl(config.getJournalFileSize(), - 2, - 0, - 0, - new NIOSequentialFileFactory(getJournalDir()), - "hornetq-data", - "hq", - 1); + 2, + 0, + 0, + new NIOSequentialFileFactory(getJournalDir()), + "hornetq-data", + "hq", + 1); jrn.start(); jrn.load(records, list, null); @@ -995,10 +994,10 @@ public void testMissingTXEverythingAcked() throws Exception jrn.stop(); server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); @@ -1010,7 +1009,7 @@ public void testMissingTXEverythingAcked() throws Exception pg.close(); - long queues[] = new long[] { server.locateQueue(new SimpleString("q1")).getID() }; + long queues[] = new long[]{server.locateQueue(new SimpleString("q1")).getID()}; for (long q : queues) { @@ -1029,10 +1028,10 @@ public void testMissingTXEverythingAcked() throws Exception locator.setBlockOnAcknowledge(true); server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); @@ -1072,11 +1071,11 @@ public void testMissingTXEverythingAcked2() throws Exception config.setJournalSyncNonTransactional(false); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); @@ -1171,54 +1170,54 @@ public void testMissingTXEverythingAcked2() throws Exception } server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); - locator = createInVMNonHALocator(); + locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - ClientSessionFactory csf = createSessionFactory(locator); + ClientSessionFactory csf = createSessionFactory(locator); - ClientSession session = csf.createSession(); + ClientSession session = csf.createSession(); - session.start(); + session.start(); - for (int i = 1; i <= 2; i++) - { - ClientConsumer cons = session.createConsumer("q" + i); + for (int i = 1; i <= 2; i++) + { + ClientConsumer cons = session.createConsumer("q" + i); - for (int j = 3; j < 6; j++) - { - ClientMessage msg = cons.receive(5000); + for (int j = 3; j < 6; j++) + { + ClientMessage msg = cons.receive(5000); - assertNotNull(msg); + assertNotNull(msg); - assertEquals("str-" + j, msg.getStringProperty("id")); + assertEquals("str-" + j, msg.getStringProperty("id")); - msg.acknowledge(); - } + msg.acknowledge(); + } - session.commit(); - assertNull(cons.receive(500)); + session.commit(); + assertNull(cons.receive(500)); - } + } - session.close(); + session.close(); - long timeout = System.currentTimeMillis() + 5000; + long timeout = System.currentTimeMillis() + 5000; - while (System.currentTimeMillis() < timeout && server.getPagingManager().getPageStore(ADDRESS).isPaging()) - { - Thread.sleep(100); - } + while (System.currentTimeMillis() < timeout && server.getPagingManager().getPageStore(ADDRESS).isPaging()) + { + Thread.sleep(100); + } } public void testTwoQueuesOneNoRouting() throws Exception @@ -1232,91 +1231,91 @@ public void testTwoQueuesOneNoRouting() throws Exception config.setJournalSyncNonTransactional(false); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); final int numberOfMessages = 1000; - locator = createInVMNonHALocator(); - - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); - - sf = createSessionFactory(locator); - - ClientSession session = sf.createSession(false, false, false); - - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - session.createQueue(PagingTest.ADDRESS, - PagingTest.ADDRESS.concat("-invalid"), - new SimpleString(HornetQServerImpl.GENERIC_IGNORED_FILTER), - true); - - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + locator = createInVMNonHALocator(); - ClientMessage message = null; + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - byte[] body = new byte[MESSAGE_SIZE]; + sf = createSessionFactory(locator); - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(persistentMessages); + ClientSession session = sf.createSession(false, false, false); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, + PagingTest.ADDRESS.concat("-invalid"), + new SimpleString(HornetQServerImpl.GENERIC_IGNORED_FILTER), + true); - bodyLocal.writeBytes(body); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - message.putIntProperty(new SimpleString("id"), i); + ClientMessage message = null; - producer.send(message); - if (i % 1000 == 0) - { - session.commit(); - } - } + byte[] body = new byte[MESSAGE_SIZE]; - session.commit(); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(persistentMessages); - session.start(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + bodyLocal.writeBytes(body); - for (int i = 0; i < numberOfMessages; i++) - { - message = consumer.receive(5000); - assertNotNull(message); - message.acknowledge(); + message.putIntProperty(new SimpleString("id"), i); - assertEquals(i, message.getIntProperty("id").intValue()); - if (i % 1000 == 0) - { - session.commit(); - } + producer.send(message); + if (i % 1000 == 0) + { + session.commit(); } + } - session.commit(); + session.commit(); - session.commit(); + session.start(); - session.commit(); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - PagingStore store = server.getPagingManager().getPageStore(ADDRESS); - store.getCursorProvider().cleanup(); + for (int i = 0; i < numberOfMessages; i++) + { + message = consumer.receive(5000); + assertNotNull(message); + message.acknowledge(); - long timeout = System.currentTimeMillis() + 5000; - while (store.isPaging() && timeout > System.currentTimeMillis()) + assertEquals(i, message.getIntProperty("id").intValue()); + if (i % 1000 == 0) { - Thread.sleep(100); + session.commit(); } + } + + session.commit(); + + session.commit(); + + session.commit(); + + PagingStore store = server.getPagingManager().getPageStore(ADDRESS); + store.getCursorProvider().cleanup(); - // It's async, so need to wait a bit for it happening - assertFalse(server.getPagingManager().getPageStore(ADDRESS).isPaging()); + long timeout = System.currentTimeMillis() + 5000; + while (store.isPaging() && timeout > System.currentTimeMillis()) + { + Thread.sleep(100); + } + + // It's async, so need to wait a bit for it happening + assertFalse(server.getPagingManager().getPageStore(ADDRESS).isPaging()); } public void testSendReceivePagingPersistent() throws Exception @@ -1348,29 +1347,29 @@ public void internalMultiQueuesTest(final boolean divert) throws Exception config.setJournalSyncNonTransactional(false); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); if (divert) { DivertConfiguration divert1 = new DivertConfiguration("dv1", - "nm1", - PagingTest.ADDRESS.toString(), - PagingTest.ADDRESS.toString() + "-1", - true, - null, - null); + "nm1", + PagingTest.ADDRESS.toString(), + PagingTest.ADDRESS.toString() + "-1", + true, + null, + null); DivertConfiguration divert2 = new DivertConfiguration("dv2", - "nm2", - PagingTest.ADDRESS.toString(), - PagingTest.ADDRESS.toString() + "-2", - true, - null, - null); + "nm2", + PagingTest.ADDRESS.toString(), + PagingTest.ADDRESS.toString() + "-2", + true, + null, + null); ArrayList divertList = new ArrayList(); divertList.add(divert1); @@ -1422,7 +1421,8 @@ public void run() log.info("Thread interrupted"); } } - }; + } + ; TCount tcount1 = null; TCount tcount2 = null; @@ -1486,10 +1486,10 @@ public void run() } server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); Queue queue1 = server.locateQueue(PagingTest.ADDRESS.concat("-1")); @@ -1563,8 +1563,8 @@ public void run() { PagingTest.log.info("Expected buffer:" + UnitTestCase.dumbBytesHex(body, 40)); PagingTest.log.info("Arriving buffer:" + UnitTestCase.dumbBytesHex(message2.getBodyBuffer() - .toByteBuffer() - .array(), 40)); + .toByteBuffer() + .array(), 40)); throw e; } } @@ -1648,11 +1648,11 @@ public void testMultiQueuesNonPersistentAndPersistent() throws Exception config.setJournalSyncNonTransactional(false); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); @@ -1668,142 +1668,144 @@ public void testMultiQueuesNonPersistentAndPersistent() throws Exception } { - locator = createInVMNonHALocator(); + locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - ClientSession session = sf.createSession(false, false, false); + ClientSession session = sf.createSession(false, false, false); - session.createQueue(PagingTest.ADDRESS.toString(), PagingTest.ADDRESS + "-1", null, true); + session.createQueue(PagingTest.ADDRESS.toString(), PagingTest.ADDRESS + "-1", null, true); - session.createQueue(PagingTest.ADDRESS.toString(), PagingTest.ADDRESS + "-2", null, false); + session.createQueue(PagingTest.ADDRESS.toString(), PagingTest.ADDRESS + "-2", null, false); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - for (int i = 0; i < numberOfMessages; i++) + for (int i = 0; i < numberOfMessages; i++) + { + if (i % 500 == 0) { - if (i % 500 == 0) - { - session.commit(); - } - message = session.createMessage(true); + session.commit(); + } + message = session.createMessage(true); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - bodyLocal.writeBytes(body); + bodyLocal.writeBytes(body); - message.putIntProperty(new SimpleString("id"), i); + message.putIntProperty(new SimpleString("id"), i); - producer.send(message); - } + producer.send(message); + } - session.commit(); + session.commit(); - session.close(); + session.close(); - server.stop(); + server.stop(); - sf.close(); - locator.close(); - } + sf.close(); + locator.close(); + } - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); - server.start(); + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); + server.start(); - locator = createInVMNonHALocator(); - final ClientSessionFactory sf2 = createSessionFactory(locator); + locator = createInVMNonHALocator(); + final ClientSessionFactory sf2 = createSessionFactory(locator); - final AtomicInteger errors = new AtomicInteger(0); + final AtomicInteger errors = new AtomicInteger(0); - Thread t = new Thread() + Thread t = new Thread() + { + @Override + public void run() { - @Override - public void run() + try { - try - { - ClientSession session = sf2.createSession(null, null, false, true, true, false, 0); + ClientSession session = sf2.createSession(null, null, false, true, true, false, 0); - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS + "-1"); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS + "-1"); - session.start(); - - for (int i = 0; i < numberOfMessages; i++) - { - ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); + session.start(); - Assert.assertNotNull(message2); + for (int i = 0; i < numberOfMessages; i++) + { + ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); - Assert.assertEquals(i, message2.getIntProperty("id").intValue()); + Assert.assertNotNull(message2); - message2.acknowledge(); + Assert.assertEquals(i, message2.getIntProperty("id").intValue()); - Assert.assertNotNull(message2); + message2.acknowledge(); - if (i % 1000 == 0) - session.commit(); + Assert.assertNotNull(message2); - try - { - assertBodiesEqual(body, message2.getBodyBuffer()); - } - catch (AssertionFailedError e) - { - PagingTest.log.info("Expected buffer:" + UnitTestCase.dumbBytesHex(body, 40)); - PagingTest.log.info("Arriving buffer:" + UnitTestCase.dumbBytesHex(message2.getBodyBuffer() - .toByteBuffer() - .array(), 40)); - throw e; - } + if (i % 1000 == 0) + { + session.commit(); } - session.commit(); + try + { + assertBodiesEqual(body, message2.getBodyBuffer()); + } + catch (AssertionFailedError e) + { + PagingTest.log.info("Expected buffer:" + UnitTestCase.dumbBytesHex(body, 40)); + PagingTest.log.info("Arriving buffer:" + UnitTestCase.dumbBytesHex(message2.getBodyBuffer() + .toByteBuffer() + .array(), 40)); + throw e; + } + } - consumer.close(); + session.commit(); - session.close(); - } - catch (Throwable e) - { - e.printStackTrace(); - errors.incrementAndGet(); - } + consumer.close(); + session.close(); + } + catch (Throwable e) + { + e.printStackTrace(); + errors.incrementAndGet(); } - }; - t.start(); - t.join(); + } + }; - assertEquals(0, errors.get()); + t.start(); + t.join(); - for (int i = 0; i < 20 && server.getPostOffice().getPagingManager().getPageStore(ADDRESS).isPaging(); i++) - { - // The delete may be asynchronous, giving some time case it eventually happen asynchronously - Thread.sleep(500); - } + assertEquals(0, errors.get()); - assertFalse(server.getPostOffice().getPagingManager().getPageStore(ADDRESS).isPaging()); + for (int i = 0; i < 20 && server.getPostOffice().getPagingManager().getPageStore(ADDRESS).isPaging(); i++) + { + // The delete may be asynchronous, giving some time case it eventually happen asynchronously + Thread.sleep(500); + } - for (int i = 0; i < 20 && server.getPostOffice().getPagingManager().getTransactions().size() != 0; i++) - { - // The delete may be asynchronous, giving some time case it eventually happen asynchronously - Thread.sleep(500); - } + assertFalse(server.getPostOffice().getPagingManager().getPageStore(ADDRESS).isPaging()); - assertEquals(0, server.getPostOffice().getPagingManager().getTransactions().size()); + for (int i = 0; i < 20 && server.getPostOffice().getPagingManager().getTransactions().size() != 0; i++) + { + // The delete may be asynchronous, giving some time case it eventually happen asynchronously + Thread.sleep(500); + } - } + assertEquals(0, server.getPostOffice().getPagingManager().getTransactions().size()); + + } private void internaltestSendReceivePaging(final boolean persistentMessages) throws Exception { @@ -1815,11 +1817,11 @@ private void internaltestSendReceivePaging(final boolean persistentMessages) thr config.setJournalSyncNonTransactional(false); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); @@ -1828,99 +1830,101 @@ private void internaltestSendReceivePaging(final boolean persistentMessages) thr final int numberOfMessages = 1000; locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - ClientSession session = sf.createSession(null, null, false, true, true, false, 0); + ClientSession session = sf.createSession(null, null, false, true, true, false, 0); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - byte[] body = new byte[numberOfIntegers * 4]; + byte[] body = new byte[numberOfIntegers * 4]; - ByteBuffer bb = ByteBuffer.wrap(body); + ByteBuffer bb = ByteBuffer.wrap(body); - for (int j = 1; j <= numberOfIntegers; j++) - { - bb.putInt(j); - } + for (int j = 1; j <= numberOfIntegers; j++) + { + bb.putInt(j); + } - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(persistentMessages); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(persistentMessages); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - bodyLocal.writeBytes(body); + bodyLocal.writeBytes(body); - message.putIntProperty(new SimpleString("id"), i); + message.putIntProperty(new SimpleString("id"), i); - producer.send(message); - } + producer.send(message); + } - session.close(); - sf.close(); - locator.close(); + session.close(); + sf.close(); + locator.close(); - if (persistentMessages) - { - server.stop(); + if (persistentMessages) + { + server.stop(); - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); - server.start(); - } + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); + server.start(); + } - locator = createInVMNonHALocator(); - sf = createSessionFactory(locator); + locator = createInVMNonHALocator(); + sf = createSessionFactory(locator); - session = sf.createSession(null, null, false, true, true, false, 0); + session = sf.createSession(null, null, false, true, true, false, 0); - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - session.start(); + session.start(); - for (int i = 0; i < numberOfMessages; i++) - { - ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); + for (int i = 0; i < numberOfMessages; i++) + { + ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); - Assert.assertNotNull(message2); + Assert.assertNotNull(message2); - Assert.assertEquals(i, message2.getIntProperty("id").intValue()); + Assert.assertEquals(i, message2.getIntProperty("id").intValue()); - message2.acknowledge(); + message2.acknowledge(); - Assert.assertNotNull(message2); + Assert.assertNotNull(message2); - if (i % 1000 == 0) - session.commit(); + if (i % 1000 == 0) + { + session.commit(); + } - try - { - assertBodiesEqual(body, message2.getBodyBuffer()); - } - catch (AssertionFailedError e) - { - PagingTest.log.info("Expected buffer:" + UnitTestCase.dumbBytesHex(body, 40)); - PagingTest.log.info("Arriving buffer:" + UnitTestCase.dumbBytesHex(message2.getBodyBuffer() - .toByteBuffer() - .array(), 40)); - throw e; - } + try + { + assertBodiesEqual(body, message2.getBodyBuffer()); + } + catch (AssertionFailedError e) + { + PagingTest.log.info("Expected buffer:" + UnitTestCase.dumbBytesHex(body, 40)); + PagingTest.log.info("Arriving buffer:" + UnitTestCase.dumbBytesHex(message2.getBodyBuffer() + .toByteBuffer() + .array(), 40)); + throw e; } + } - consumer.close(); + consumer.close(); - session.close(); + session.close(); } private void assertBodiesEqual(final byte[] body, final HornetQBuffer buffer) @@ -1938,7 +1942,6 @@ private void assertBodiesEqual(final byte[] body, final HornetQBuffer buffer) * - Consume the entire destination (not in page mode any more) * - Add stuff to a transaction again * - Check order - * */ public void testDepageDuringTransaction() throws Exception { @@ -1947,111 +1950,111 @@ public void testDepageDuringTransaction() throws Exception Configuration config = createDefaultConfig(); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); - locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator = createInVMNonHALocator(); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - ClientSession session = sf.createSession(null, null, false, true, true, false, 0); + ClientSession session = sf.createSession(null, null, false, true, true, false, 0); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - byte[] body = new byte[MESSAGE_SIZE]; - // HornetQBuffer bodyLocal = HornetQChannelBuffers.buffer(DataConstants.SIZE_INT * numberOfIntegers); + byte[] body = new byte[MESSAGE_SIZE]; + // HornetQBuffer bodyLocal = HornetQChannelBuffers.buffer(DataConstants.SIZE_INT * numberOfIntegers); - ClientMessage message = null; + ClientMessage message = null; - int numberOfMessages = 0; - while (true) + int numberOfMessages = 0; + while (true) + { + message = session.createMessage(true); + message.getBodyBuffer().writeBytes(body); + + // Stop sending message as soon as we start paging + if (server.getPostOffice().getPagingManager().getPageStore(PagingTest.ADDRESS).isPaging()) { - message = session.createMessage(true); - message.getBodyBuffer().writeBytes(body); + break; + } + numberOfMessages++; - // Stop sending message as soon as we start paging - if (server.getPostOffice().getPagingManager().getPageStore(PagingTest.ADDRESS).isPaging()) - { - break; - } - numberOfMessages++; + producer.send(message); + } - producer.send(message); - } + Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PagingTest.ADDRESS).isPaging()); - Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PagingTest.ADDRESS).isPaging()); + session.start(); - session.start(); + ClientSession sessionTransacted = sf.createSession(null, null, false, false, false, false, 0); - ClientSession sessionTransacted = sf.createSession(null, null, false, false, false, false, 0); + ClientProducer producerTransacted = sessionTransacted.createProducer(PagingTest.ADDRESS); - ClientProducer producerTransacted = sessionTransacted.createProducer(PagingTest.ADDRESS); + for (int i = 0; i < 10; i++) + { + message = session.createMessage(true); + message.getBodyBuffer().writeBytes(body); + message.putIntProperty(new SimpleString("id"), i); - for (int i = 0; i < 10; i++) + // Consume messages to force an eventual out of order delivery + if (i == 5) { - message = session.createMessage(true); - message.getBodyBuffer().writeBytes(body); - message.putIntProperty(new SimpleString("id"), i); - - // Consume messages to force an eventual out of order delivery - if (i == 5) + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + for (int j = 0; j < numberOfMessages; j++) { - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - for (int j = 0; j < numberOfMessages; j++) - { - ClientMessage msg = consumer.receive(PagingTest.RECEIVE_TIMEOUT); - msg.acknowledge(); - Assert.assertNotNull(msg); - } - - Assert.assertNull(consumer.receiveImmediate()); - consumer.close(); + ClientMessage msg = consumer.receive(PagingTest.RECEIVE_TIMEOUT); + msg.acknowledge(); + Assert.assertNotNull(msg); } - Integer messageID = (Integer)message.getObjectProperty(new SimpleString("id")); - Assert.assertNotNull(messageID); - Assert.assertEquals(messageID.intValue(), i); - - producerTransacted.send(message); + Assert.assertNull(consumer.receiveImmediate()); + consumer.close(); } - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + Integer messageID = (Integer) message.getObjectProperty(new SimpleString("id")); + Assert.assertNotNull(messageID); + Assert.assertEquals(messageID.intValue(), i); - Assert.assertNull(consumer.receiveImmediate()); + producerTransacted.send(message); + } - sessionTransacted.commit(); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - sessionTransacted.close(); + Assert.assertNull(consumer.receiveImmediate()); - for (int i = 0; i < 10; i++) - { - message = consumer.receive(PagingTest.RECEIVE_TIMEOUT); + sessionTransacted.commit(); - Assert.assertNotNull(message); + sessionTransacted.close(); - Integer messageID = (Integer)message.getObjectProperty(new SimpleString("id")); + for (int i = 0; i < 10; i++) + { + message = consumer.receive(PagingTest.RECEIVE_TIMEOUT); - Assert.assertNotNull(messageID); - Assert.assertEquals("message received out of order", messageID.intValue(), i); + Assert.assertNotNull(message); - message.acknowledge(); - } + Integer messageID = (Integer) message.getObjectProperty(new SimpleString("id")); + + Assert.assertNotNull(messageID); + Assert.assertEquals("message received out of order", messageID.intValue(), i); - Assert.assertNull(consumer.receiveImmediate()); + message.acknowledge(); + } - consumer.close(); + Assert.assertNull(consumer.receiveImmediate()); - session.close(); + consumer.close(); + + session.close(); } /** @@ -2060,9 +2063,8 @@ public void testDepageDuringTransaction() throws Exception * - Consume the entire destination (not in page mode any more) * - Add stuff to a transaction again * - Check order - * - * Test under discussion at : http://community.jboss.org/thread/154061?tstart=0 - * + *

+ * Test under discussion at : http://community.jboss.org/thread/154061?tstart=0 */ public void testDepageDuringTransaction2() throws Exception { @@ -2072,123 +2074,123 @@ public void testDepageDuringTransaction2() throws Exception Configuration config = createDefaultConfig(); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - byte[] body = new byte[MESSAGE_SIZE]; + byte[] body = new byte[MESSAGE_SIZE]; - ClientSession sessionTransacted = sf.createSession(null, null, false, false, false, false, 0); - ClientProducer producerTransacted = sessionTransacted.createProducer(PagingTest.ADDRESS); + ClientSession sessionTransacted = sf.createSession(null, null, false, false, false, false, 0); + ClientProducer producerTransacted = sessionTransacted.createProducer(PagingTest.ADDRESS); - ClientSession session = sf.createSession(null, null, false, true, true, false, 0); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + ClientSession session = sf.createSession(null, null, false, true, true, false, 0); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientMessage firstMessage = sessionTransacted.createMessage(IS_DURABLE_MESSAGE); - firstMessage.getBodyBuffer().writeBytes(body); - firstMessage.putIntProperty(new SimpleString("id"), 0); + ClientMessage firstMessage = sessionTransacted.createMessage(IS_DURABLE_MESSAGE); + firstMessage.getBodyBuffer().writeBytes(body); + firstMessage.putIntProperty(new SimpleString("id"), 0); - producerTransacted.send(firstMessage); + producerTransacted.send(firstMessage); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - int numberOfMessages = 0; - while (true) + int numberOfMessages = 0; + while (true) + { + message = session.createMessage(IS_DURABLE_MESSAGE); + message.getBodyBuffer().writeBytes(body); + message.putIntProperty("id", numberOfMessages); + message.putBooleanProperty("new", false); + + // Stop sending message as soon as we start paging + if (server.getPostOffice().getPagingManager().getPageStore(PagingTest.ADDRESS).isPaging()) { - message = session.createMessage(IS_DURABLE_MESSAGE); - message.getBodyBuffer().writeBytes(body); - message.putIntProperty("id", numberOfMessages); - message.putBooleanProperty("new", false); + break; + } + numberOfMessages++; - // Stop sending message as soon as we start paging - if (server.getPostOffice().getPagingManager().getPageStore(PagingTest.ADDRESS).isPaging()) - { - break; - } - numberOfMessages++; + producer.send(message); + } - producer.send(message); - } + Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PagingTest.ADDRESS).isPaging()); - Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PagingTest.ADDRESS).isPaging()); + session.start(); - session.start(); + for (int i = 1; i < 10; i++) + { + message = session.createMessage(true); + message.getBodyBuffer().writeBytes(body); + message.putIntProperty(new SimpleString("id"), i); - for (int i = 1; i < 10; i++) + // Consume messages to force an eventual out of order delivery + if (i == 5) { - message = session.createMessage(true); - message.getBodyBuffer().writeBytes(body); - message.putIntProperty(new SimpleString("id"), i); - - // Consume messages to force an eventual out of order delivery - if (i == 5) + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + for (int j = 0; j < numberOfMessages; j++) { - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - for (int j = 0; j < numberOfMessages; j++) - { - ClientMessage msg = consumer.receive(PagingTest.RECEIVE_TIMEOUT); - msg.acknowledge(); - assertEquals(j, msg.getIntProperty("id").intValue()); - assertFalse(msg.getBooleanProperty("new")); - Assert.assertNotNull(msg); - } - - ClientMessage msgReceived = consumer.receiveImmediate(); - - Assert.assertNull(msgReceived); - consumer.close(); + ClientMessage msg = consumer.receive(PagingTest.RECEIVE_TIMEOUT); + msg.acknowledge(); + assertEquals(j, msg.getIntProperty("id").intValue()); + assertFalse(msg.getBooleanProperty("new")); + Assert.assertNotNull(msg); } - Integer messageID = (Integer)message.getObjectProperty(new SimpleString("id")); - Assert.assertNotNull(messageID); - Assert.assertEquals(messageID.intValue(), i); + ClientMessage msgReceived = consumer.receiveImmediate(); - producerTransacted.send(message); + Assert.assertNull(msgReceived); + consumer.close(); } - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + Integer messageID = (Integer) message.getObjectProperty(new SimpleString("id")); + Assert.assertNotNull(messageID); + Assert.assertEquals(messageID.intValue(), i); - Assert.assertNull(consumer.receiveImmediate()); + producerTransacted.send(message); + } - sessionTransacted.commit(); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - sessionTransacted.close(); + Assert.assertNull(consumer.receiveImmediate()); - for (int i = 0; i < 10; i++) - { - message = consumer.receive(PagingTest.RECEIVE_TIMEOUT); + sessionTransacted.commit(); - Assert.assertNotNull(message); + sessionTransacted.close(); - Integer messageID = (Integer)message.getObjectProperty(new SimpleString("id")); + for (int i = 0; i < 10; i++) + { + message = consumer.receive(PagingTest.RECEIVE_TIMEOUT); - // System.out.println(messageID); - Assert.assertNotNull(messageID); - Assert.assertEquals("message received out of order", i, messageID.intValue()); + Assert.assertNotNull(message); - message.acknowledge(); - } + Integer messageID = (Integer) message.getObjectProperty(new SimpleString("id")); - Assert.assertNull(consumer.receiveImmediate()); + // System.out.println(messageID); + Assert.assertNotNull(messageID); + Assert.assertEquals("message received out of order", i, messageID.intValue()); - consumer.close(); + message.acknowledge(); + } - session.close(); + Assert.assertNull(consumer.receiveImmediate()); - } + consumer.close(); + + session.close(); + + } public void testDepageDuringTransaction3() throws Exception { @@ -2197,103 +2199,103 @@ public void testDepageDuringTransaction3() throws Exception Configuration config = createDefaultConfig(); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - byte[] body = new byte[MESSAGE_SIZE]; + byte[] body = new byte[MESSAGE_SIZE]; - ClientSession sessionTransacted = sf.createSession(null, null, false, false, false, false, 0); - ClientProducer producerTransacted = sessionTransacted.createProducer(PagingTest.ADDRESS); + ClientSession sessionTransacted = sf.createSession(null, null, false, false, false, false, 0); + ClientProducer producerTransacted = sessionTransacted.createProducer(PagingTest.ADDRESS); - ClientSession sessionNonTX = sf.createSession(true, true, 0); - sessionNonTX.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + ClientSession sessionNonTX = sf.createSession(true, true, 0); + sessionNonTX.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producerNonTransacted = sessionNonTX.createProducer(PagingTest.ADDRESS); + ClientProducer producerNonTransacted = sessionNonTX.createProducer(PagingTest.ADDRESS); - sessionNonTX.start(); + sessionNonTX.start(); - for (int i = 0; i < 50; i++) - { - ClientMessage message = sessionNonTX.createMessage(true); - message.getBodyBuffer().writeBytes(body); - message.putIntProperty(new SimpleString("id"), i); - message.putStringProperty(new SimpleString("tst"), new SimpleString("i=" + i)); + for (int i = 0; i < 50; i++) + { + ClientMessage message = sessionNonTX.createMessage(true); + message.getBodyBuffer().writeBytes(body); + message.putIntProperty(new SimpleString("id"), i); + message.putStringProperty(new SimpleString("tst"), new SimpleString("i=" + i)); - producerTransacted.send(message); + producerTransacted.send(message); - if (i % 2 == 0) + if (i % 2 == 0) + { + for (int j = 0; j < 20; j++) { - for (int j = 0; j < 20; j++) - { - ClientMessage msgSend = sessionNonTX.createMessage(true); - msgSend.putStringProperty(new SimpleString("tst"), new SimpleString("i=" + i + ", j=" + j)); - msgSend.getBodyBuffer().writeBytes(new byte[10 * 1024]); - producerNonTransacted.send(msgSend); - } - assertTrue(server.getPostOffice().getPagingManager().getPageStore(PagingTest.ADDRESS).isPaging()); + ClientMessage msgSend = sessionNonTX.createMessage(true); + msgSend.putStringProperty(new SimpleString("tst"), new SimpleString("i=" + i + ", j=" + j)); + msgSend.getBodyBuffer().writeBytes(new byte[10 * 1024]); + producerNonTransacted.send(msgSend); } - else + assertTrue(server.getPostOffice().getPagingManager().getPageStore(PagingTest.ADDRESS).isPaging()); + } + else + { + ClientConsumer consumer = sessionNonTX.createConsumer(PagingTest.ADDRESS); + for (int j = 0; j < 20; j++) { - ClientConsumer consumer = sessionNonTX.createConsumer(PagingTest.ADDRESS); - for (int j = 0; j < 20; j++) - { - ClientMessage msgReceived = consumer.receive(10000); - assertNotNull(msgReceived); - msgReceived.acknowledge(); - } - consumer.close(); + ClientMessage msgReceived = consumer.receive(10000); + assertNotNull(msgReceived); + msgReceived.acknowledge(); } + consumer.close(); } + } - ClientConsumer consumerNonTX = sessionNonTX.createConsumer(PagingTest.ADDRESS); - while (true) + ClientConsumer consumerNonTX = sessionNonTX.createConsumer(PagingTest.ADDRESS); + while (true) + { + ClientMessage msgReceived = consumerNonTX.receive(1000); + if (msgReceived == null) { - ClientMessage msgReceived = consumerNonTX.receive(1000); - if (msgReceived == null) - { - break; - } - msgReceived.acknowledge(); + break; } - consumerNonTX.close(); + msgReceived.acknowledge(); + } + consumerNonTX.close(); - ClientConsumer consumer = sessionNonTX.createConsumer(PagingTest.ADDRESS); + ClientConsumer consumer = sessionNonTX.createConsumer(PagingTest.ADDRESS); - Assert.assertNull(consumer.receiveImmediate()); + Assert.assertNull(consumer.receiveImmediate()); - sessionTransacted.commit(); + sessionTransacted.commit(); - sessionTransacted.close(); + sessionTransacted.close(); - for (int i = 0; i < 50; i++) - { - ClientMessage message = consumer.receive(PagingTest.RECEIVE_TIMEOUT); + for (int i = 0; i < 50; i++) + { + ClientMessage message = consumer.receive(PagingTest.RECEIVE_TIMEOUT); - Assert.assertNotNull(message); + Assert.assertNotNull(message); - Integer messageID = (Integer)message.getObjectProperty(new SimpleString("id")); + Integer messageID = (Integer) message.getObjectProperty(new SimpleString("id")); - Assert.assertNotNull(messageID); - Assert.assertEquals("message received out of order", i, messageID.intValue()); + Assert.assertNotNull(messageID); + Assert.assertEquals("message received out of order", i, messageID.intValue()); - message.acknowledge(); - } + message.acknowledge(); + } - Assert.assertNull(consumer.receiveImmediate()); + Assert.assertNull(consumer.receiveImmediate()); - consumer.close(); + consumer.close(); sessionNonTX.close(); } @@ -2305,11 +2307,11 @@ public void testDepageDuringTransaction4() throws Exception Configuration config = createDefaultConfig(); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.getConfiguration().setJournalSyncNonTransactional(false); server.getConfiguration().setJournalSyncTransactional(false); @@ -2327,89 +2329,89 @@ public void testDepageDuringTransaction4() throws Exception locator.setBlockOnAcknowledge(false); sf = createSessionFactory(locator); - final byte[] body = new byte[MESSAGE_SIZE]; + final byte[] body = new byte[MESSAGE_SIZE]; - Thread producerThread = new Thread() + Thread producerThread = new Thread() + { + @Override + public void run() { - @Override - public void run() + ClientSession sessionProducer = null; + try { - ClientSession sessionProducer = null; - try + sessionProducer = sf.createSession(false, false); + ClientProducer producer = sessionProducer.createProducer(ADDRESS); + + for (int i = 0; i < numberOfMessages; i++) { - sessionProducer = sf.createSession(false, false); - ClientProducer producer = sessionProducer.createProducer(ADDRESS); + ClientMessage msg = sessionProducer.createMessage(true); + msg.getBodyBuffer().writeBytes(body); + msg.putIntProperty("count", i); + producer.send(msg); - for (int i = 0; i < numberOfMessages; i++) + if (i % 100 == 0 && i != 0) { - ClientMessage msg = sessionProducer.createMessage(true); - msg.getBodyBuffer().writeBytes(body); - msg.putIntProperty("count", i); - producer.send(msg); - - if (i % 100 == 0 && i != 0) - { - sessionProducer.commit(); - // Thread.sleep(500); - } + sessionProducer.commit(); + // Thread.sleep(500); } + } - sessionProducer.commit(); + sessionProducer.commit(); + } + catch (Throwable e) + { + e.printStackTrace(); // >> junit report + errors.incrementAndGet(); + } + finally + { + try + { + if (sessionProducer != null) + { + sessionProducer.close(); + } } catch (Throwable e) { - e.printStackTrace(); // >> junit report + e.printStackTrace(); errors.incrementAndGet(); } - finally - { - try - { - if (sessionProducer != null) - { - sessionProducer.close(); - } - } - catch (Throwable e) - { - e.printStackTrace(); - errors.incrementAndGet(); - } - } } - }; + } + }; - ClientSession session = sf.createSession(true, true, 0); - session.start(); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + ClientSession session = sf.createSession(true, true, 0); + session.start(); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - producerThread.start(); + producerThread.start(); - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - for (int i = 0; i < numberOfMessages; i++) + for (int i = 0; i < numberOfMessages; i++) + { + ClientMessage msg = consumer.receive(5000); + assertNotNull(msg); + assertEquals(i, msg.getIntProperty("count").intValue()); + msg.acknowledge(); + if (i > 0 && i % 10 == 0) { - ClientMessage msg = consumer.receive(5000); - assertNotNull(msg); - assertEquals(i, msg.getIntProperty("count").intValue()); - msg.acknowledge(); - if (i > 0 && i % 10 == 0) - { - session.commit(); - } + session.commit(); } - session.commit(); + } + session.commit(); - session.close(); + session.close(); - producerThread.join(); + producerThread.join(); - locator.close(); + locator.close(); - sf.close(); + sf.close(); - assertEquals(0, errors.get()); + assertEquals(0, errors.get()); } public void testOrderingNonTX() throws Exception @@ -2419,11 +2421,11 @@ public void testOrderingNonTX() throws Exception Configuration config = createDefaultConfig(); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_SIZE * 2, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_SIZE * 2, + new HashMap()); server.getConfiguration().setJournalSyncNonTransactional(false); server.getConfiguration().setJournalSyncTransactional(false); @@ -2434,100 +2436,100 @@ public void testOrderingNonTX() throws Exception final int numberOfMessages = 2000; - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); + sf = createSessionFactory(locator); - final CountDownLatch ready = new CountDownLatch(1); + final CountDownLatch ready = new CountDownLatch(1); - final byte[] body = new byte[MESSAGE_SIZE]; + final byte[] body = new byte[MESSAGE_SIZE]; - Thread producerThread = new Thread() + Thread producerThread = new Thread() + { + @Override + public void run() { - @Override - public void run() + ClientSession sessionProducer = null; + try { - ClientSession sessionProducer = null; - try + sessionProducer = sf.createSession(true, true); + ClientProducer producer = sessionProducer.createProducer(ADDRESS); + + for (int i = 0; i < numberOfMessages; i++) { - sessionProducer = sf.createSession(true, true); - ClientProducer producer = sessionProducer.createProducer(ADDRESS); + ClientMessage msg = sessionProducer.createMessage(true); + msg.getBodyBuffer().writeBytes(body); + msg.putIntProperty("count", i); + producer.send(msg); - for (int i = 0; i < numberOfMessages; i++) + if (i == 1000) { - ClientMessage msg = sessionProducer.createMessage(true); - msg.getBodyBuffer().writeBytes(body); - msg.putIntProperty("count", i); - producer.send(msg); + // The session is not TX, but we do this just to perform a round trip to the server + // and make sure there are no pending messages + sessionProducer.commit(); - if (i == 1000) - { - // The session is not TX, but we do this just to perform a round trip to the server - // and make sure there are no pending messages - sessionProducer.commit(); - - assertTrue(server.getPagingManager().getPageStore(ADDRESS).isPaging()); - ready.countDown(); - } + assertTrue(server.getPagingManager().getPageStore(ADDRESS).isPaging()); + ready.countDown(); } + } - sessionProducer.commit(); + sessionProducer.commit(); - log.info("Producer gone"); + log.info("Producer gone"); + } + catch (Throwable e) + { + e.printStackTrace(); // >> junit report + errors.incrementAndGet(); + } + finally + { + try + { + if (sessionProducer != null) + { + sessionProducer.close(); + } } catch (Throwable e) { - e.printStackTrace(); // >> junit report + e.printStackTrace(); errors.incrementAndGet(); } - finally - { - try - { - if (sessionProducer != null) - { - sessionProducer.close(); - } - } - catch (Throwable e) - { - e.printStackTrace(); - errors.incrementAndGet(); - } - } } - }; + } + }; - ClientSession session = sf.createSession(true, true, 0); - session.start(); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + ClientSession session = sf.createSession(true, true, 0); + session.start(); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - producerThread.start(); + producerThread.start(); - assertTrue(ready.await(100, TimeUnit.SECONDS)); + assertTrue(ready.await(100, TimeUnit.SECONDS)); - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - for (int i = 0; i < numberOfMessages; i++) + for (int i = 0; i < numberOfMessages; i++) + { + ClientMessage msg = consumer.receive(5000); + assertNotNull(msg); + log.info("Received " + i + " with property = " + msg.getIntProperty("count")); + if (i != msg.getIntProperty("count").intValue()) { - ClientMessage msg = consumer.receive(5000); - assertNotNull(msg); - log.info("Received " + i + " with property = " + msg.getIntProperty("count")); - if (i != msg.getIntProperty("count").intValue()) - { - log.info("###### different"); - } - // assertEquals(i, msg.getIntProperty("count").intValue()); - msg.acknowledge(); + log.info("###### different"); } + // assertEquals(i, msg.getIntProperty("count").intValue()); + msg.acknowledge(); + } - session.close(); + session.close(); - producerThread.join(); + producerThread.join(); - assertEquals(0, errors.get()); + assertEquals(0, errors.get()); } public void testPageOnSchedulingNoRestart() throws Exception @@ -2549,11 +2551,11 @@ public void internalTestPageOnScheduling(final boolean restart) throws Exception config.setJournalSyncNonTransactional(false); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); @@ -2562,103 +2564,103 @@ public void internalTestPageOnScheduling(final boolean restart) throws Exception final int numberOfBytes = 1024; locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); - - sf = createSessionFactory(locator); - ClientSession session = sf.createSession(null, null, false, true, true, false, 0); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + sf = createSessionFactory(locator); + ClientSession session = sf.createSession(null, null, false, true, true, false, 0); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientMessage message = null; + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - byte[] body = new byte[numberOfBytes]; + ClientMessage message = null; - for (int j = 0; j < numberOfBytes; j++) - { - body[j] = UnitTestCase.getSamplebyte(j); - } + byte[] body = new byte[numberOfBytes]; - long scheduledTime = System.currentTimeMillis() + 5000; + for (int j = 0; j < numberOfBytes; j++) + { + body[j] = UnitTestCase.getSamplebyte(j); + } - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(true); + long scheduledTime = System.currentTimeMillis() + 5000; - message.getBodyBuffer().writeBytes(body); - message.putIntProperty(new SimpleString("id"), i); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(true); - PagingStore store = server.getPostOffice() - .getPagingManager() - .getPageStore(PagingTest.ADDRESS); + message.getBodyBuffer().writeBytes(body); + message.putIntProperty(new SimpleString("id"), i); - // Worse scenario possible... only schedule what's on pages - if (store.getCurrentPage() != null) - { - message.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, scheduledTime); - } + PagingStore store = server.getPostOffice() + .getPagingManager() + .getPageStore(PagingTest.ADDRESS); - producer.send(message); + // Worse scenario possible... only schedule what's on pages + if (store.getCurrentPage() != null) + { + message.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, scheduledTime); } - if (restart) - { - session.close(); + producer.send(message); + } - server.stop(); + if (restart) + { + session.close(); - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); - server.start(); + server.stop(); - sf = createSessionFactory(locator); + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); + server.start(); - session = sf.createSession(null, null, false, true, true, false, 0); - } + sf = createSessionFactory(locator); - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + session = sf.createSession(null, null, false, true, true, false, 0); + } - session.start(); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - for (int i = 0; i < numberOfMessages; i++) - { + session.start(); - ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); + for (int i = 0; i < numberOfMessages; i++) + { - Assert.assertNotNull(message2); + ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); - message2.acknowledge(); + Assert.assertNotNull(message2); - Assert.assertNotNull(message2); + message2.acknowledge(); - Long scheduled = (Long)message2.getObjectProperty(Message.HDR_SCHEDULED_DELIVERY_TIME); - if (scheduled != null) - { - Assert.assertTrue("Scheduling didn't work", System.currentTimeMillis() >= scheduledTime); - } + Assert.assertNotNull(message2); - try - { - assertBodiesEqual(body, message2.getBodyBuffer()); - } - catch (AssertionFailedError e) - { - PagingTest.log.info("Expected buffer:" + UnitTestCase.dumbBytesHex(body, 40)); - PagingTest.log.info("Arriving buffer:" + UnitTestCase.dumbBytesHex(message2.getBodyBuffer() - .toByteBuffer() - .array(), 40)); - throw e; - } + Long scheduled = (Long) message2.getObjectProperty(Message.HDR_SCHEDULED_DELIVERY_TIME); + if (scheduled != null) + { + Assert.assertTrue("Scheduling didn't work", System.currentTimeMillis() >= scheduledTime); + } + + try + { + assertBodiesEqual(body, message2.getBodyBuffer()); + } + catch (AssertionFailedError e) + { + PagingTest.log.info("Expected buffer:" + UnitTestCase.dumbBytesHex(body, 40)); + PagingTest.log.info("Arriving buffer:" + UnitTestCase.dumbBytesHex(message2.getBodyBuffer() + .toByteBuffer() + .array(), 40)); + throw e; } + } - consumer.close(); + consumer.close(); - session.close(); + session.close(); } public void testRollbackOnSend() throws Exception @@ -2668,11 +2670,11 @@ public void testRollbackOnSend() throws Exception Configuration config = createDefaultConfig(); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); @@ -2680,44 +2682,44 @@ public void testRollbackOnSend() throws Exception final int numberOfMessages = 10; - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); - ClientSession session = sf.createSession(null, null, false, false, true, false, 0); + sf = createSessionFactory(locator); + ClientSession session = sf.createSession(null, null, false, false, true, false, 0); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(true); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(true); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - for (int j = 1; j <= numberOfIntegers; j++) - { - bodyLocal.writeInt(j); - } + for (int j = 1; j <= numberOfIntegers; j++) + { + bodyLocal.writeInt(j); + } - message.putIntProperty(new SimpleString("id"), i); + message.putIntProperty(new SimpleString("id"), i); - producer.send(message); - } + producer.send(message); + } - session.rollback(); + session.rollback(); - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - session.start(); + session.start(); - Assert.assertNull(consumer.receiveImmediate()); + Assert.assertNull(consumer.receiveImmediate()); - session.close(); + session.close(); } public void testCommitOnSend() throws Exception @@ -2727,11 +2729,11 @@ public void testCommitOnSend() throws Exception Configuration config = createDefaultConfig(); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); @@ -2739,73 +2741,73 @@ public void testCommitOnSend() throws Exception final int numberOfMessages = 500; - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); - ClientSession session = sf.createSession(null, null, false, false, false, false, 0); + sf = createSessionFactory(locator); + ClientSession session = sf.createSession(null, null, false, false, false, false, 0); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(true); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(true); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - for (int j = 1; j <= numberOfIntegers; j++) - { - bodyLocal.writeInt(j); - } + for (int j = 1; j <= numberOfIntegers; j++) + { + bodyLocal.writeInt(j); + } - message.putIntProperty(new SimpleString("id"), i); + message.putIntProperty(new SimpleString("id"), i); - producer.send(message); - } + producer.send(message); + } - session.commit(); + session.commit(); - session.close(); + session.close(); - locator.close(); + locator.close(); - locator = createInVMNonHALocator(); + locator = createInVMNonHALocator(); - server.stop(); + server.stop(); - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); - server.start(); + server.start(); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - session = sf.createSession(null, null, false, false, false, false, 0); + session = sf.createSession(null, null, false, false, false, false, 0); - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - session.start(); - for (int i = 0; i < numberOfMessages; i++) + session.start(); + for (int i = 0; i < numberOfMessages; i++) + { + if (i == 55) { - if (i == 55) - { - System.out.println("i = 55"); - } - ClientMessage msg = consumer.receive(5000); - Assert.assertNotNull(msg); - msg.acknowledge(); - session.commit(); + System.out.println("i = 55"); } + ClientMessage msg = consumer.receive(5000); + Assert.assertNotNull(msg); + msg.acknowledge(); + session.commit(); + } - session.close(); + session.close(); } public void testParialConsume() throws Exception @@ -2815,112 +2817,112 @@ public void testParialConsume() throws Exception Configuration config = createDefaultConfig(); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); final int numberOfMessages = 1000; locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); - - sf = createSessionFactory(locator); - ClientSession session = sf.createSession(null, null, false, false, false, false, 0); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + sf = createSessionFactory(locator); + ClientSession session = sf.createSession(null, null, false, false, false, false, 0); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientMessage message = null; + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(true); + ClientMessage message = null; - HornetQBuffer bodyLocal = message.getBodyBuffer(); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(true); - bodyLocal.writeBytes(new byte[1024]); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - message.putIntProperty(new SimpleString("id"), i); + bodyLocal.writeBytes(new byte[1024]); - producer.send(message); - } + message.putIntProperty(new SimpleString("id"), i); - session.commit(); + producer.send(message); + } - session.close(); + session.commit(); - locator.close(); + session.close(); - server.stop(); + locator.close(); - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + server.stop(); - server.start(); + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); - locator = createInVMNonHALocator(); + server.start(); - sf = createSessionFactory(locator); + locator = createInVMNonHALocator(); - session = sf.createSession(null, null, false, false, false, false, 0); + sf = createSessionFactory(locator); - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + session = sf.createSession(null, null, false, false, false, false, 0); - session.start(); - // 347 = I just picked any odd number, not rounded, to make sure it's not at the beggining of any page - for (int i = 0; i < 347; i++) - { - ClientMessage msg = consumer.receive(5000); - assertEquals(i, msg.getIntProperty("id").intValue()); - Assert.assertNotNull(msg); - msg.acknowledge(); - session.commit(); - } + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - session.close(); + session.start(); + // 347 = I just picked any odd number, not rounded, to make sure it's not at the beggining of any page + for (int i = 0; i < 347; i++) + { + ClientMessage msg = consumer.receive(5000); + assertEquals(i, msg.getIntProperty("id").intValue()); + Assert.assertNotNull(msg); + msg.acknowledge(); + session.commit(); + } - locator.close(); + session.close(); - server.stop(); + locator.close(); - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + server.stop(); - server.start(); + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); - locator = createInVMNonHALocator(); + server.start(); - sf = createSessionFactory(locator); + locator = createInVMNonHALocator(); - session = sf.createSession(null, null, false, false, false, false, 0); + sf = createSessionFactory(locator); - consumer = session.createConsumer(PagingTest.ADDRESS); + session = sf.createSession(null, null, false, false, false, false, 0); - session.start(); - for (int i = 347; i < numberOfMessages; i++) - { - ClientMessage msg = consumer.receive(5000); - assertEquals(i, msg.getIntProperty("id").intValue()); - Assert.assertNotNull(msg); - msg.acknowledge(); - session.commit(); - } + consumer = session.createConsumer(PagingTest.ADDRESS); - session.close(); + session.start(); + for (int i = 347; i < numberOfMessages; i++) + { + ClientMessage msg = consumer.receive(5000); + assertEquals(i, msg.getIntProperty("id").intValue()); + Assert.assertNotNull(msg); + msg.acknowledge(); + session.commit(); } + session.close(); + } + public void testPageMultipleDestinations() throws Exception { internalTestPageMultipleDestinations(false); @@ -2951,110 +2953,110 @@ public void testDropMessages() throws Exception final int numberOfMessages = 1000; locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); - ClientSession session = sf.createSession(null, null, false, true, true, false, 0); + sf = createSessionFactory(locator); + ClientSession session = sf.createSession(null, null, false, true, true, false, 0); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - for (int i = 0; i < numberOfMessages; i++) - { - byte[] body = new byte[1024]; + for (int i = 0; i < numberOfMessages; i++) + { + byte[] body = new byte[1024]; - message = session.createMessage(true); - message.getBodyBuffer().writeBytes(body); + message = session.createMessage(true); + message.getBodyBuffer().writeBytes(body); - producer.send(message); - } + producer.send(message); + } - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - session.start(); + session.start(); - for (int i = 0; i < 6; i++) - { - ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); + for (int i = 0; i < 6; i++) + { + ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); - Assert.assertNotNull(message2); + Assert.assertNotNull(message2); - message2.acknowledge(); - } + message2.acknowledge(); + } - Assert.assertNull(consumer.receiveImmediate()); + Assert.assertNull(consumer.receiveImmediate()); - Assert.assertEquals(0, server.getPostOffice() - .getPagingManager() - .getPageStore(PagingTest.ADDRESS) - .getAddressSize()); + Assert.assertEquals(0, server.getPostOffice() + .getPagingManager() + .getPageStore(PagingTest.ADDRESS) + .getAddressSize()); - for (int i = 0; i < numberOfMessages; i++) - { - byte[] body = new byte[1024]; + for (int i = 0; i < numberOfMessages; i++) + { + byte[] body = new byte[1024]; - message = session.createMessage(true); - message.getBodyBuffer().writeBytes(body); + message = session.createMessage(true); + message.getBodyBuffer().writeBytes(body); - producer.send(message); - } + producer.send(message); + } - for (int i = 0; i < 6; i++) - { - ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); + for (int i = 0; i < 6; i++) + { + ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); - Assert.assertNotNull(message2); + Assert.assertNotNull(message2); - message2.acknowledge(); - } + message2.acknowledge(); + } - Assert.assertNull(consumer.receiveImmediate()); + Assert.assertNull(consumer.receiveImmediate()); - session.close(); + session.close(); - session = sf.createSession(false, true, true); + session = sf.createSession(false, true, true); - producer = session.createProducer(PagingTest.ADDRESS); + producer = session.createProducer(PagingTest.ADDRESS); - for (int i = 0; i < numberOfMessages; i++) - { - byte[] body = new byte[1024]; + for (int i = 0; i < numberOfMessages; i++) + { + byte[] body = new byte[1024]; - message = session.createMessage(true); - message.getBodyBuffer().writeBytes(body); + message = session.createMessage(true); + message.getBodyBuffer().writeBytes(body); - producer.send(message); - } + producer.send(message); + } - session.commit(); + session.commit(); - consumer = session.createConsumer(PagingTest.ADDRESS); + consumer = session.createConsumer(PagingTest.ADDRESS); - session.start(); + session.start(); - for (int i = 0; i < 6; i++) - { - ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); + for (int i = 0; i < 6; i++) + { + ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); - Assert.assertNotNull(message2); + Assert.assertNotNull(message2); - message2.acknowledge(); - } + message2.acknowledge(); + } - session.commit(); + session.commit(); - Assert.assertNull(consumer.receiveImmediate()); + Assert.assertNull(consumer.receiveImmediate()); - session.close(); + session.close(); - Assert.assertEquals(0, server.getPostOffice() - .getPagingManager() - .getPageStore(PagingTest.ADDRESS) - .getAddressSize()); + Assert.assertEquals(0, server.getPostOffice() + .getPagingManager() + .getPageStore(PagingTest.ADDRESS) + .getAddressSize()); } public void testDropMessagesExpiring() throws Exception @@ -3076,69 +3078,69 @@ public void testDropMessagesExpiring() throws Exception final int numberOfMessages = 30000; - locator.setAckBatchSize(0); + locator.setAckBatchSize(0); - sf = createSessionFactory(locator); - ClientSession session = sf.createSession(); + sf = createSessionFactory(locator); + ClientSession session = sf.createSession(); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - class MyHandler implements MessageHandler - { - int count; + class MyHandler implements MessageHandler + { + int count; - public void onMessage(ClientMessage message) + public void onMessage(ClientMessage message) + { + try + { + Thread.sleep(1); + } + catch (Exception e) { - try - { - Thread.sleep(1); - } - catch (Exception e) - { - } + } - count++; + count++; - if (count % 1000 == 0) - { - log.info("received " + count); - } + if (count % 1000 == 0) + { + log.info("received " + count); + } - try - { - message.acknowledge(); - } - catch (Exception e) - { - e.printStackTrace(); - } + try + { + message.acknowledge(); + } + catch (Exception e) + { + e.printStackTrace(); } } + } - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS); - session.start(); + session.start(); - consumer.setMessageHandler(new MyHandler()); + consumer.setMessageHandler(new MyHandler()); - for (int i = 0; i < numberOfMessages; i++) - { - byte[] body = new byte[1024]; + for (int i = 0; i < numberOfMessages; i++) + { + byte[] body = new byte[1024]; - message = session.createMessage(false); - message.getBodyBuffer().writeBytes(body); + message = session.createMessage(false); + message.getBodyBuffer().writeBytes(body); - message.setExpiration(System.currentTimeMillis() + 100); + message.setExpiration(System.currentTimeMillis() + 100); - producer.send(message); - } + producer.send(message); + } - session.close(); + session.close(); } private void internalTestPageMultipleDestinations(final boolean transacted) throws Exception @@ -3150,90 +3152,90 @@ private void internalTestPageMultipleDestinations(final boolean transacted) thro int NUMBER_OF_MESSAGES = 2; server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); - ClientSession session = sf.createSession(null, null, false, !transacted, true, false, 0); + sf = createSessionFactory(locator); + ClientSession session = sf.createSession(null, null, false, !transacted, true, false, 0); - for (int i = 0; i < NUMBER_OF_BINDINGS; i++) - { - session.createQueue(PagingTest.ADDRESS, new SimpleString("someQueue" + i), null, true); - } + for (int i = 0; i < NUMBER_OF_BINDINGS; i++) + { + session.createQueue(PagingTest.ADDRESS, new SimpleString("someQueue" + i), null, true); + } - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - byte[] body = new byte[1024]; + byte[] body = new byte[1024]; - message = session.createMessage(true); - message.getBodyBuffer().writeBytes(body); + message = session.createMessage(true); + message.getBodyBuffer().writeBytes(body); - for (int i = 0; i < NUMBER_OF_MESSAGES; i++) - { - producer.send(message); + for (int i = 0; i < NUMBER_OF_MESSAGES; i++) + { + producer.send(message); - if (transacted) - { - session.commit(); - } + if (transacted) + { + session.commit(); } + } - session.close(); + session.close(); - server.stop(); + server.stop(); - server = createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); - server.start(); + server = createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); + server.start(); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - session = sf.createSession(null, null, false, true, true, false, 0); + session = sf.createSession(null, null, false, true, true, false, 0); - session.start(); + session.start(); - for (int msg = 0; msg < NUMBER_OF_MESSAGES; msg++) - { + for (int msg = 0; msg < NUMBER_OF_MESSAGES; msg++) + { - for (int i = 0; i < NUMBER_OF_BINDINGS; i++) - { - ClientConsumer consumer = session.createConsumer(new SimpleString("someQueue" + i)); + for (int i = 0; i < NUMBER_OF_BINDINGS; i++) + { + ClientConsumer consumer = session.createConsumer(new SimpleString("someQueue" + i)); - ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); + ClientMessage message2 = consumer.receive(PagingTest.RECEIVE_TIMEOUT); - Assert.assertNotNull(message2); + Assert.assertNotNull(message2); - message2.acknowledge(); + message2.acknowledge(); - Assert.assertNotNull(message2); + Assert.assertNotNull(message2); - consumer.close(); + consumer.close(); - } } + } - session.close(); + session.close(); - for (int i = 0; i < NUMBER_OF_BINDINGS; i++) - { - Queue queue = (Queue)server.getPostOffice().getBinding(new SimpleString("someQueue" + i)).getBindable(); + for (int i = 0; i < NUMBER_OF_BINDINGS; i++) + { + Queue queue = (Queue) server.getPostOffice().getBinding(new SimpleString("someQueue" + i)).getBindable(); - Assert.assertEquals("Queue someQueue" + i + " was supposed to be empty", 0, queue.getMessageCount()); - Assert.assertEquals("Queue someQueue" + i + " was supposed to be empty", 0, queue.getDeliveringCount()); - } + Assert.assertEquals("Queue someQueue" + i + " was supposed to be empty", 0, queue.getMessageCount()); + Assert.assertEquals("Queue someQueue" + i + " was supposed to be empty", 0, queue.getDeliveringCount()); + } } public void testSyncPage() throws Exception @@ -3241,11 +3243,11 @@ public void testSyncPage() throws Exception Configuration config = createDefaultConfig(); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); @@ -3293,31 +3295,31 @@ public void testSyncPageTX() throws Exception Configuration config = createDefaultConfig(); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); server.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true, false); - final CountDownLatch pageUp = new CountDownLatch(0); - final CountDownLatch pageDone = new CountDownLatch(1); + final CountDownLatch pageUp = new CountDownLatch(0); + final CountDownLatch pageDone = new CountDownLatch(1); OperationContext ctx = new DummyOperationContext(pageUp, pageDone); - OperationContextImpl.setContext(ctx); + OperationContextImpl.setContext(ctx); - PagingManager paging = server.getPagingManager(); + PagingManager paging = server.getPagingManager(); - PagingStore store = paging.getPageStore(ADDRESS); + PagingStore store = paging.getPageStore(ADDRESS); - store.sync(); + store.sync(); - assertTrue(pageUp.await(10, TimeUnit.SECONDS)); + assertTrue(pageUp.await(10, TimeUnit.SECONDS)); - assertTrue(pageDone.await(10, TimeUnit.SECONDS)); + assertTrue(pageDone.await(10, TimeUnit.SECONDS)); } public void testPagingOneDestinationOnly() throws Exception @@ -3341,73 +3343,73 @@ public void testPagingOneDestinationOnly() throws Exception server.start(); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - ClientSession session = sf.createSession(false, true, false); + ClientSession session = sf.createSession(false, true, false); - session.createQueue(PAGED_ADDRESS, PAGED_ADDRESS, true); + session.createQueue(PAGED_ADDRESS, PAGED_ADDRESS, true); - session.createQueue(NON_PAGED_ADDRESS, NON_PAGED_ADDRESS, true); + session.createQueue(NON_PAGED_ADDRESS, NON_PAGED_ADDRESS, true); - ClientProducer producerPaged = session.createProducer(PAGED_ADDRESS); - ClientProducer producerNonPaged = session.createProducer(NON_PAGED_ADDRESS); + ClientProducer producerPaged = session.createProducer(PAGED_ADDRESS); + ClientProducer producerNonPaged = session.createProducer(NON_PAGED_ADDRESS); - int NUMBER_OF_MESSAGES = 100; + int NUMBER_OF_MESSAGES = 100; - for (int i = 0; i < NUMBER_OF_MESSAGES; i++) - { - ClientMessage msg = session.createMessage(true); - msg.getBodyBuffer().writeBytes(new byte[512]); + for (int i = 0; i < NUMBER_OF_MESSAGES; i++) + { + ClientMessage msg = session.createMessage(true); + msg.getBodyBuffer().writeBytes(new byte[512]); - producerPaged.send(msg); - producerNonPaged.send(msg); - } + producerPaged.send(msg); + producerNonPaged.send(msg); + } - session.close(); + session.close(); - Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS).isPaging()); - Assert.assertFalse(server.getPostOffice().getPagingManager().getPageStore(NON_PAGED_ADDRESS).isPaging()); + Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS).isPaging()); + Assert.assertFalse(server.getPostOffice().getPagingManager().getPageStore(NON_PAGED_ADDRESS).isPaging()); - session = sf.createSession(false, true, false); + session = sf.createSession(false, true, false); - session.start(); + session.start(); - ClientConsumer consumerNonPaged = session.createConsumer(NON_PAGED_ADDRESS); - ClientConsumer consumerPaged = session.createConsumer(PAGED_ADDRESS); + ClientConsumer consumerNonPaged = session.createConsumer(NON_PAGED_ADDRESS); + ClientConsumer consumerPaged = session.createConsumer(PAGED_ADDRESS); - ClientMessage ackList[] = new ClientMessage[NUMBER_OF_MESSAGES]; + ClientMessage ackList[] = new ClientMessage[NUMBER_OF_MESSAGES]; - for (int i = 0; i < NUMBER_OF_MESSAGES; i++) - { - ClientMessage msg = consumerNonPaged.receive(5000); - Assert.assertNotNull(msg); - ackList[i] = msg; - } + for (int i = 0; i < NUMBER_OF_MESSAGES; i++) + { + ClientMessage msg = consumerNonPaged.receive(5000); + Assert.assertNotNull(msg); + ackList[i] = msg; + } - Assert.assertNull(consumerNonPaged.receiveImmediate()); + Assert.assertNull(consumerNonPaged.receiveImmediate()); - for (ClientMessage ack : ackList) - { - ack.acknowledge(); - } + for (ClientMessage ack : ackList) + { + ack.acknowledge(); + } - consumerNonPaged.close(); + consumerNonPaged.close(); - session.commit(); + session.commit(); - ackList = null; + ackList = null; - for (int i = 0; i < NUMBER_OF_MESSAGES; i++) - { - ClientMessage msg = consumerPaged.receive(5000); - Assert.assertNotNull(msg); - msg.acknowledge(); - session.commit(); - } + for (int i = 0; i < NUMBER_OF_MESSAGES; i++) + { + ClientMessage msg = consumerPaged.receive(5000); + Assert.assertNotNull(msg); + msg.acknowledge(); + session.commit(); + } - Assert.assertNull(consumerPaged.receiveImmediate()); + Assert.assertNull(consumerPaged.receiveImmediate()); - session.close(); + session.close(); } public void testPagingDifferentSizes() throws Exception @@ -3438,95 +3440,95 @@ public void testPagingDifferentSizes() throws Exception server = createServer(true, configuration, -1, -1, addresses); server.start(); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - ClientSession session = sf.createSession(false, true, false); + ClientSession session = sf.createSession(false, true, false); - session.createQueue(PAGED_ADDRESS_A, PAGED_ADDRESS_A, true); + session.createQueue(PAGED_ADDRESS_A, PAGED_ADDRESS_A, true); - session.createQueue(PAGED_ADDRESS_B, PAGED_ADDRESS_B, true); + session.createQueue(PAGED_ADDRESS_B, PAGED_ADDRESS_B, true); - ClientProducer producerA = session.createProducer(PAGED_ADDRESS_A); - ClientProducer producerB = session.createProducer(PAGED_ADDRESS_B); + ClientProducer producerA = session.createProducer(PAGED_ADDRESS_A); + ClientProducer producerB = session.createProducer(PAGED_ADDRESS_B); - int NUMBER_OF_MESSAGES = 100; + int NUMBER_OF_MESSAGES = 100; - for (int i = 0; i < NUMBER_MESSAGES_BEFORE_PAGING; i++) - { - ClientMessage msg = session.createMessage(true); - msg.getBodyBuffer().writeBytes(new byte[512]); + for (int i = 0; i < NUMBER_MESSAGES_BEFORE_PAGING; i++) + { + ClientMessage msg = session.createMessage(true); + msg.getBodyBuffer().writeBytes(new byte[512]); - producerA.send(msg); - producerB.send(msg); - } + producerA.send(msg); + producerB.send(msg); + } - session.commit(); // commit was called to clean the buffer only (making sure everything is on the server side) + session.commit(); // commit was called to clean the buffer only (making sure everything is on the server side) - Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_A).isPaging()); - Assert.assertFalse(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_B).isPaging()); + Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_A).isPaging()); + Assert.assertFalse(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_B).isPaging()); - for (int i = 0; i < NUMBER_MESSAGES_BEFORE_PAGING; i++) - { - ClientMessage msg = session.createMessage(true); - msg.getBodyBuffer().writeBytes(new byte[512]); + for (int i = 0; i < NUMBER_MESSAGES_BEFORE_PAGING; i++) + { + ClientMessage msg = session.createMessage(true); + msg.getBodyBuffer().writeBytes(new byte[512]); - producerA.send(msg); - producerB.send(msg); - } + producerA.send(msg); + producerB.send(msg); + } - session.commit(); // commit was called to clean the buffer only (making sure everything is on the server side) + session.commit(); // commit was called to clean the buffer only (making sure everything is on the server side) - Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_A).isPaging()); - Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_B).isPaging()); + Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_A).isPaging()); + Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_B).isPaging()); - for (int i = NUMBER_MESSAGES_BEFORE_PAGING * 2; i < NUMBER_OF_MESSAGES; i++) - { - ClientMessage msg = session.createMessage(true); - msg.getBodyBuffer().writeBytes(new byte[512]); + for (int i = NUMBER_MESSAGES_BEFORE_PAGING * 2; i < NUMBER_OF_MESSAGES; i++) + { + ClientMessage msg = session.createMessage(true); + msg.getBodyBuffer().writeBytes(new byte[512]); - producerA.send(msg); - producerB.send(msg); - } + producerA.send(msg); + producerB.send(msg); + } - session.close(); + session.close(); - Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_A).isPaging()); - Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_B).isPaging()); + Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_A).isPaging()); + Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_B).isPaging()); - session = sf.createSession(null, null, false, true, true, false, 0); + session = sf.createSession(null, null, false, true, true, false, 0); - session.start(); + session.start(); - ClientConsumer consumerA = session.createConsumer(PAGED_ADDRESS_A); + ClientConsumer consumerA = session.createConsumer(PAGED_ADDRESS_A); - ClientConsumer consumerB = session.createConsumer(PAGED_ADDRESS_B); + ClientConsumer consumerB = session.createConsumer(PAGED_ADDRESS_B); - for (int i = 0; i < NUMBER_OF_MESSAGES; i++) - { - ClientMessage msg = consumerA.receive(5000); - Assert.assertNotNull("Couldn't receive a message on consumerA, iteration = " + i, msg); - msg.acknowledge(); - } + for (int i = 0; i < NUMBER_OF_MESSAGES; i++) + { + ClientMessage msg = consumerA.receive(5000); + Assert.assertNotNull("Couldn't receive a message on consumerA, iteration = " + i, msg); + msg.acknowledge(); + } - Assert.assertNull(consumerA.receiveImmediate()); + Assert.assertNull(consumerA.receiveImmediate()); - consumerA.close(); + consumerA.close(); - Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_B).isPaging()); + Assert.assertTrue(server.getPostOffice().getPagingManager().getPageStore(PAGED_ADDRESS_B).isPaging()); - for (int i = 0; i < NUMBER_OF_MESSAGES; i++) - { - ClientMessage msg = consumerB.receive(5000); - Assert.assertNotNull(msg); - msg.acknowledge(); - session.commit(); - } + for (int i = 0; i < NUMBER_OF_MESSAGES; i++) + { + ClientMessage msg = consumerB.receive(5000); + Assert.assertNotNull(msg); + msg.acknowledge(); + session.commit(); + } - Assert.assertNull(consumerB.receiveImmediate()); + Assert.assertNull(consumerB.receiveImmediate()); - consumerB.close(); + consumerB.close(); - session.close(); + session.close(); } public void testPageAndDepageRapidly() throws Exception @@ -3548,106 +3550,106 @@ public void testPageAndDepageRapidly() throws Exception final int numberOfMessages = 200; - locator = createInVMNonHALocator(); + locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - ClientSession session = sf.createSession(true, true); + ClientSession session = sf.createSession(true, true); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - final AtomicInteger errors = new AtomicInteger(0); + final AtomicInteger errors = new AtomicInteger(0); - Thread consumeThread = new Thread() + Thread consumeThread = new Thread() + { + @Override + public void run() { - @Override - public void run() + ClientSession sessionConsumer = null; + try { - ClientSession sessionConsumer = null; - try - { - sessionConsumer = sf.createSession(false, false); - sessionConsumer.start(); + sessionConsumer = sf.createSession(false, false); + sessionConsumer.start(); - ClientConsumer cons = sessionConsumer.createConsumer(ADDRESS); + ClientConsumer cons = sessionConsumer.createConsumer(ADDRESS); - for (int i = 0; i < numberOfMessages; i++) - { - ClientMessage msg = cons.receive(PagingTest.RECEIVE_TIMEOUT); - assertNotNull(msg); - msg.acknowledge(); + for (int i = 0; i < numberOfMessages; i++) + { + ClientMessage msg = cons.receive(PagingTest.RECEIVE_TIMEOUT); + assertNotNull(msg); + msg.acknowledge(); - if (i % 20 == 0) - { - sessionConsumer.commit(); - } + if (i % 20 == 0) + { + sessionConsumer.commit(); } - sessionConsumer.commit(); } - catch (Throwable e) + sessionConsumer.commit(); + } + catch (Throwable e) + { + e.printStackTrace(); + errors.incrementAndGet(); + } + finally + { + try { - e.printStackTrace(); - errors.incrementAndGet(); + sessionConsumer.close(); } - finally + catch (HornetQException e) { - try - { - sessionConsumer.close(); - } - catch (HornetQException e) - { - e.printStackTrace(); - errors.incrementAndGet(); - } + e.printStackTrace(); + errors.incrementAndGet(); } - } - }; - consumeThread.start(); + } + }; - ClientMessage message = null; + consumeThread.start(); - byte[] body = new byte[MESSAGE_SIZE]; + ClientMessage message = null; - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(persistentMessages); + byte[] body = new byte[MESSAGE_SIZE]; - HornetQBuffer bodyLocal = message.getBodyBuffer(); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(persistentMessages); - bodyLocal.writeBytes(body); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - message.putIntProperty(new SimpleString("id"), i); + bodyLocal.writeBytes(body); - producer.send(message); + message.putIntProperty(new SimpleString("id"), i); - Thread.sleep(50); - } + producer.send(message); + + Thread.sleep(50); + } - consumeThread.join(); + consumeThread.join(); - long timeout = System.currentTimeMillis() + 5000; + long timeout = System.currentTimeMillis() + 5000; - while (System.currentTimeMillis() < timeout && (server.getPagingManager().getPageStore(ADDRESS).isPaging() || server.getPagingManager() - .getPageStore(ADDRESS) - .getNumberOfPages() != 1)) - { - Thread.sleep(1); - } + while (System.currentTimeMillis() < timeout && (server.getPagingManager().getPageStore(ADDRESS).isPaging() || server.getPagingManager() + .getPageStore(ADDRESS) + .getNumberOfPages() != 1)) + { + Thread.sleep(1); + } - // It's async, so need to wait a bit for it happening - assertFalse(server.getPagingManager().getPageStore(ADDRESS).isPaging()); + // It's async, so need to wait a bit for it happening + assertFalse(server.getPagingManager().getPageStore(ADDRESS).isPaging()); - assertEquals(1, server.getPagingManager().getPageStore(ADDRESS).getNumberOfPages()); - } + assertEquals(1, server.getPagingManager().getPageStore(ADDRESS).getNumberOfPages()); + } public void testTwoQueuesDifferentFilters() throws Exception { @@ -3660,99 +3662,99 @@ public void testTwoQueuesDifferentFilters() throws Exception config.setJournalSyncNonTransactional(false); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); final int numberOfMessages = 200; locator = createInVMNonHALocator(); - locator.setClientFailureCheckPeriod(120000); - locator.setConnectionTTL(5000000); - locator.setCallTimeout(120000); + locator.setClientFailureCheckPeriod(120000); + locator.setConnectionTTL(5000000); + locator.setCallTimeout(120000); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - ClientSession session = sf.createSession(false, false, false); + ClientSession session = sf.createSession(false, false, false); - // note: if you want to change this, numberOfMessages has to be a multiple of NQUEUES - int NQUEUES = 2; + // note: if you want to change this, numberOfMessages has to be a multiple of NQUEUES + int NQUEUES = 2; - for (int i = 0; i < NQUEUES; i++) - { - session.createQueue(PagingTest.ADDRESS, - PagingTest.ADDRESS.concat("=" + i), - new SimpleString("propTest=" + i), - true); - } + for (int i = 0; i < NQUEUES; i++) + { + session.createQueue(PagingTest.ADDRESS, + PagingTest.ADDRESS.concat("=" + i), + new SimpleString("propTest=" + i), + true); + } - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - byte[] body = new byte[MESSAGE_SIZE]; + byte[] body = new byte[MESSAGE_SIZE]; - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(persistentMessages); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(persistentMessages); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - bodyLocal.writeBytes(body); + bodyLocal.writeBytes(body); - message.putIntProperty("propTest", i % NQUEUES); - message.putIntProperty("id", i); + message.putIntProperty("propTest", i % NQUEUES); + message.putIntProperty("id", i); - producer.send(message); - if (i % 1000 == 0) - { - session.commit(); - } + producer.send(message); + if (i % 1000 == 0) + { + session.commit(); } + } - session.commit(); + session.commit(); - session.start(); + session.start(); - for (int nqueue = 0; nqueue < NQUEUES; nqueue++) - { - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS.concat("=" + nqueue)); + for (int nqueue = 0; nqueue < NQUEUES; nqueue++) + { + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS.concat("=" + nqueue)); - for (int i = 0; i < (numberOfMessages / NQUEUES); i++) - { - message = consumer.receive(500000); - assertNotNull(message); - message.acknowledge(); + for (int i = 0; i < (numberOfMessages / NQUEUES); i++) + { + message = consumer.receive(500000); + assertNotNull(message); + message.acknowledge(); - assertEquals(nqueue, message.getIntProperty("propTest").intValue()); - } + assertEquals(nqueue, message.getIntProperty("propTest").intValue()); + } - assertNull(consumer.receiveImmediate()); + assertNull(consumer.receiveImmediate()); - consumer.close(); + consumer.close(); - session.commit(); - } + session.commit(); + } - PagingStore store = server.getPagingManager().getPageStore(ADDRESS); - store.getCursorProvider().cleanup(); + PagingStore store = server.getPagingManager().getPageStore(ADDRESS); + store.getCursorProvider().cleanup(); - long timeout = System.currentTimeMillis() + 5000; - while (store.isPaging() && timeout > System.currentTimeMillis()) - { - Thread.sleep(100); - } + long timeout = System.currentTimeMillis() + 5000; + while (store.isPaging() && timeout > System.currentTimeMillis()) + { + Thread.sleep(100); + } - // It's async, so need to wait a bit for it happening - assertFalse(server.getPagingManager().getPageStore(ADDRESS).isPaging()); + // It's async, so need to wait a bit for it happening + assertFalse(server.getPagingManager().getPageStore(ADDRESS).isPaging()); } public void testTwoQueues() throws Exception @@ -3766,92 +3768,92 @@ public void testTwoQueues() throws Exception config.setJournalSyncNonTransactional(false); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); final int numberOfMessages = 1000; locator = createInVMNonHALocator(); - locator.setClientFailureCheckPeriod(120000); - locator.setConnectionTTL(5000000); - locator.setCallTimeout(120000); + locator.setClientFailureCheckPeriod(120000); + locator.setConnectionTTL(5000000); + locator.setCallTimeout(120000); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - ClientSession session = sf.createSession(false, false, false); + ClientSession session = sf.createSession(false, false, false); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS.concat("=1"), null, true); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS.concat("=2"), null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS.concat("=1"), null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS.concat("=2"), null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - byte[] body = new byte[MESSAGE_SIZE]; + byte[] body = new byte[MESSAGE_SIZE]; - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(persistentMessages); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(persistentMessages); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - bodyLocal.writeBytes(body); + bodyLocal.writeBytes(body); - message.putIntProperty("propTest", i % 2 == 0 ? 1 : 2); + message.putIntProperty("propTest", i % 2 == 0 ? 1 : 2); - producer.send(message); - if (i % 1000 == 0) - { - session.commit(); - } + producer.send(message); + if (i % 1000 == 0) + { + session.commit(); } + } - session.commit(); + session.commit(); - session.start(); + session.start(); - for (int msg = 1; msg <= 2; msg++) - { - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS.concat("=" + msg)); + for (int msg = 1; msg <= 2; msg++) + { + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS.concat("=" + msg)); - for (int i = 0; i < numberOfMessages; i++) - { - message = consumer.receive(500000); - assertNotNull(message); - message.acknowledge(); - } + for (int i = 0; i < numberOfMessages; i++) + { + message = consumer.receive(500000); + assertNotNull(message); + message.acknowledge(); + } - session.commit(); + session.commit(); - assertNull(consumer.receiveImmediate()); + assertNull(consumer.receiveImmediate()); - consumer.close(); - } + consumer.close(); + } - PagingStore store = server.getPagingManager().getPageStore(ADDRESS); - store.getCursorProvider().cleanup(); + PagingStore store = server.getPagingManager().getPageStore(ADDRESS); + store.getCursorProvider().cleanup(); - long timeout = System.currentTimeMillis() + 5000; - while (store.isPaging() && timeout > System.currentTimeMillis()) - { - Thread.sleep(100); - } + long timeout = System.currentTimeMillis() + 5000; + while (store.isPaging() && timeout > System.currentTimeMillis()) + { + Thread.sleep(100); + } - store.getCursorProvider().cleanup(); + store.getCursorProvider().cleanup(); - Thread.sleep(1000); + Thread.sleep(1000); - // It's async, so need to wait a bit for it happening - assertFalse(server.getPagingManager().getPageStore(ADDRESS).isPaging()); + // It's async, so need to wait a bit for it happening + assertFalse(server.getPagingManager().getPageStore(ADDRESS).isPaging()); } public void testTwoQueuesConsumeOneRestart() throws Exception @@ -3865,101 +3867,101 @@ public void testTwoQueuesConsumeOneRestart() throws Exception config.setJournalSyncNonTransactional(false); server = - createServer(true, - config, - PagingTest.PAGE_SIZE, - PagingTest.PAGE_MAX, - new HashMap()); + createServer(true, + config, + PagingTest.PAGE_SIZE, + PagingTest.PAGE_MAX, + new HashMap()); server.start(); final int numberOfMessages = 1000; locator = createInVMNonHALocator(); - locator.setClientFailureCheckPeriod(120000); - locator.setConnectionTTL(5000000); - locator.setCallTimeout(120000); + locator.setClientFailureCheckPeriod(120000); + locator.setConnectionTTL(5000000); + locator.setCallTimeout(120000); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - ClientSession session = sf.createSession(false, false, false); + ClientSession session = sf.createSession(false, false, false); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS.concat("=1"), null, true); - session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS.concat("=2"), null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS.concat("=1"), null, true); + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS.concat("=2"), null, true); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - byte[] body = new byte[MESSAGE_SIZE]; + byte[] body = new byte[MESSAGE_SIZE]; - for (int i = 0; i < numberOfMessages; i++) - { - message = session.createMessage(persistentMessages); + for (int i = 0; i < numberOfMessages; i++) + { + message = session.createMessage(persistentMessages); - HornetQBuffer bodyLocal = message.getBodyBuffer(); + HornetQBuffer bodyLocal = message.getBodyBuffer(); - bodyLocal.writeBytes(body); + bodyLocal.writeBytes(body); - message.putIntProperty("propTest", i % 2 == 0 ? 1 : 2); + message.putIntProperty("propTest", i % 2 == 0 ? 1 : 2); - producer.send(message); - if (i % 1000 == 0) - { - session.commit(); - } + producer.send(message); + if (i % 1000 == 0) + { + session.commit(); } + } - session.commit(); + session.commit(); - session.start(); + session.start(); - session.deleteQueue(PagingTest.ADDRESS.concat("=1")); + session.deleteQueue(PagingTest.ADDRESS.concat("=1")); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - session = sf.createSession(false, false, false); + session = sf.createSession(false, false, false); - session.start(); + session.start(); - ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS.concat("=2")); + ClientConsumer consumer = session.createConsumer(PagingTest.ADDRESS.concat("=2")); - for (int i = 0; i < numberOfMessages; i++) - { - message = consumer.receive(500000); - assertNotNull(message); - message.acknowledge(); - } + for (int i = 0; i < numberOfMessages; i++) + { + message = consumer.receive(500000); + assertNotNull(message); + message.acknowledge(); + } - session.commit(); + session.commit(); - assertNull(consumer.receiveImmediate()); + assertNull(consumer.receiveImmediate()); - consumer.close(); + consumer.close(); - long timeout = System.currentTimeMillis() + 10000; + long timeout = System.currentTimeMillis() + 10000; - PagingStore store = server.getPagingManager().getPageStore(ADDRESS); + PagingStore store = server.getPagingManager().getPageStore(ADDRESS); - // It's async, so need to wait a bit for it happening - while (timeout > System.currentTimeMillis() && store.isPaging()) - { - Thread.sleep(100); - } + // It's async, so need to wait a bit for it happening + while (timeout > System.currentTimeMillis() && store.isPaging()) + { + Thread.sleep(100); + } - assertFalse(server.getPagingManager().getPageStore(ADDRESS).isPaging()); + assertFalse(server.getPagingManager().getPageStore(ADDRESS).isPaging()); - server.stop(); + server.stop(); - server.start(); + server.start(); - server.stop(); - server.start(); - } + server.stop(); + server.start(); + } public void testDLAOnLargeMessageAndPaging() throws Exception { @@ -4080,8 +4082,8 @@ public void write(int b) throws IOException log.info("output bytes = " + bytesOutput); log.info(threadDump("dump")); fail("Couldn't finish large message receiving for id=" + message.getStringProperty("id") + - " with messageID=" + - message.getMessageID()); + " with messageID=" + + message.getMessageID()); } } @@ -4214,127 +4216,230 @@ public void testExpireLargeMessageOnPaging() throws Exception final int MESSAGE_SIZE = 20; - locator = createInVMNonHALocator(); + locator = createInVMNonHALocator(); - locator.setBlockOnNonDurableSend(true); - locator.setBlockOnDurableSend(true); - locator.setBlockOnAcknowledge(true); + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - ClientSession session = sf.createSession(false, false, false); + ClientSession session = sf.createSession(false, false, false); - session.createQueue(ADDRESS, ADDRESS, true); + session.createQueue(ADDRESS, ADDRESS, true); - session.createQueue("DLA", "DLA"); + session.createQueue("DLA", "DLA"); - PagingStore pgStoreAddress = server.getPagingManager().getPageStore(ADDRESS); - pgStoreAddress.startPaging(); - PagingStore pgStoreDLA = server.getPagingManager().getPageStore(new SimpleString("DLA")); + PagingStore pgStoreAddress = server.getPagingManager().getPageStore(ADDRESS); + pgStoreAddress.startPaging(); + PagingStore pgStoreDLA = server.getPagingManager().getPageStore(new SimpleString("DLA")); - ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); - ClientMessage message = null; + ClientMessage message = null; - for (int i = 0; i < 500; i++) + for (int i = 0; i < 500; i++) + { + if (i % 100 == 0) { - if (i % 100 == 0) - log.info("send message #" + i); - message = session.createMessage(true); + log.info("send message #" + i); + } + message = session.createMessage(true); - message.putStringProperty("id", "str" + i); + message.putStringProperty("id", "str" + i); - message.setExpiration(System.currentTimeMillis() + 2000); + message.setExpiration(System.currentTimeMillis() + 2000); - if (i % 2 == 0) - { - message.setBodyInputStream(createFakeLargeStream(MESSAGE_SIZE)); - } - else + if (i % 2 == 0) + { + message.setBodyInputStream(createFakeLargeStream(MESSAGE_SIZE)); + } + else + { + byte bytes[] = new byte[MESSAGE_SIZE]; + for (int s = 0; s < bytes.length; s++) { - byte bytes[] = new byte[MESSAGE_SIZE]; - for (int s = 0; s < bytes.length; s++) - { - bytes[s] = getSamplebyte(s); - } - message.getBodyBuffer().writeBytes(bytes); + bytes[s] = getSamplebyte(s); } + message.getBodyBuffer().writeBytes(bytes); + } - producer.send(message); + producer.send(message); - if ((i + 1) % 2 == 0) + if ((i + 1) % 2 == 0) + { + session.commit(); + if (i < 400) { - session.commit(); - if (i < 400) - { - pgStoreAddress.forceAnotherPage(); - } + pgStoreAddress.forceAnotherPage(); } } + } - session.commit(); + session.commit(); - sf.close(); + sf.close(); - locator.close(); + locator.close(); - server.stop(); + server.stop(); - Thread.sleep(3000); + Thread.sleep(3000); - server.start(); + server.start(); - locator = createInVMNonHALocator(); + locator = createInVMNonHALocator(); - sf = createSessionFactory(locator); + sf = createSessionFactory(locator); - session = sf.createSession(false, false); + session = sf.createSession(false, false); - session.start(); + session.start(); - ClientConsumer consAddr = session.createConsumer(ADDRESS); + ClientConsumer consAddr = session.createConsumer(ADDRESS); - assertNull(consAddr.receive(1000)); + assertNull(consAddr.receive(1000)); - ClientConsumer cons = session.createConsumer("DLA"); + ClientConsumer cons = session.createConsumer("DLA"); - for (int i = 0; i < 500; i++) - { - log.info("Received message " + i); - message = cons.receive(10000); - assertNotNull(message); - message.acknowledge(); + for (int i = 0; i < 500; i++) + { + log.info("Received message " + i); + message = cons.receive(10000); + assertNotNull(message); + message.acknowledge(); - message.saveToOutputStream(new OutputStream() + message.saveToOutputStream(new OutputStream() + { + @Override + public void write(int b) throws IOException { - @Override - public void write(int b) throws IOException - { - } - }); - } + } + }); + } - assertNull(cons.receiveImmediate()); + assertNull(cons.receiveImmediate()); - session.commit(); + session.commit(); - cons.close(); + cons.close(); - long timeout = System.currentTimeMillis() + 5000; + long timeout = System.currentTimeMillis() + 5000; - pgStoreAddress = server.getPagingManager().getPageStore(ADDRESS); + pgStoreAddress = server.getPagingManager().getPageStore(ADDRESS); - while (timeout > System.currentTimeMillis() && pgStoreAddress.isPaging()) - { - Thread.sleep(50); - } + while (timeout > System.currentTimeMillis() && pgStoreAddress.isPaging()) + { + Thread.sleep(50); + } - assertFalse(pgStoreAddress.isPaging()); + assertFalse(pgStoreAddress.isPaging()); session.close(); } + + public void testFailMessages() throws Exception + { + clearData(); + + Configuration config = createDefaultConfig(); + + HashMap settings = new HashMap(); + + AddressSettings set = new AddressSettings(); + set.setAddressFullMessagePolicy(AddressFullMessagePolicy.FAIL); + + settings.put(PagingTest.ADDRESS.toString(), set); + + server = createServer(true, config, 1024, 5 * 1024, settings); + + server.start(); + + locator.setBlockOnNonDurableSend(true); + locator.setBlockOnDurableSend(true); + locator.setBlockOnAcknowledge(true); + + sf = createSessionFactory(locator); + ClientSession session = sf.createSession(true, true, 0); + + session.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true); + + ClientProducer producer = session.createProducer(PagingTest.ADDRESS); + + ClientMessage message = null; + + int biggerMessageSize = 1024; + byte[] body = new byte[biggerMessageSize]; + ByteBuffer bb = ByteBuffer.wrap(body); + for (int j = 1; j <= biggerMessageSize; j++) + { + bb.put(getSamplebyte(j)); + } + + // Send enough messages to fill up the address. + // The address will actually fill up after 3 messages or so, but it takes 32 messages for the client's + // credits to run out. The client will finally receive the fail message when it requests more credits + // and the address is full. + for (int i = 0; i < 32; i++) + { + message = session.createMessage(true); + message.getBodyBuffer().writeBytes(body); + producer.send(message); + } + + ClientConsumer consumer = session.createConsumer(ADDRESS); + + session.start(); + + for (int i = 0 ; i < 10; i++) + { + validateExceptionOnSending(producer, message); + } + + // Receive a message.. this should release credits + ClientMessage msgReceived = consumer.receive(5000); + assertNotNull(msgReceived); + msgReceived.acknowledge(); + session.commit(); // to make sure it's on the server (roundtrip) + + // this send will succeed on the server + producer.send(message); + + // this send will fail on the server, but the client won't realize it because it has + // enough credits to send the message (i.e. the same situation as above when we + // sent 32 messages) + producer.send(message); + + for (int i = 0; i < 10; i++) + { + // at this point the first call here will fail because the client has enough credits + validateExceptionOnSending(producer, message); + } + } + + /** + * This method validates if sending a message will throw an exception + * */ + private void validateExceptionOnSending(ClientProducer producer, ClientMessage message) + { + HornetQException expected = null; + + try + { + // after the address is full this send should fail (since the address full policy is FAIL) + producer.send(message); + } + catch (HornetQException e) + { + expected = e; + } + + assertNotNull(expected); + assertEquals(HornetQExceptionType.ADDRESS_FULL, expected.getType()); + } + // Package protected --------------------------------------------- // Protected ----------------------------------------------------- @@ -4407,5 +4512,7 @@ public void executeOnCompletion(IOAsyncTask runnable) { } - }; + } + + ; } diff --git a/tests/integration-tests/src/test/java/org/hornetq/tests/integration/client/ProducerFlowControlTest.java b/tests/integration-tests/src/test/java/org/hornetq/tests/integration/client/ProducerFlowControlTest.java index ba4560677a5..28833e890cb 100644 --- a/tests/integration-tests/src/test/java/org/hornetq/tests/integration/client/ProducerFlowControlTest.java +++ b/tests/integration-tests/src/test/java/org/hornetq/tests/integration/client/ProducerFlowControlTest.java @@ -21,6 +21,7 @@ import junit.framework.Assert; +import org.hornetq.api.core.HornetQObjectClosedException; import org.hornetq.api.core.SimpleString; import org.hornetq.api.core.client.ClientConsumer; import org.hornetq.api.core.client.ClientMessage; @@ -359,53 +360,62 @@ public void testClosingSessionUnblocksBlockedProducer() throws Exception server.start(); waitForServer(server); - locator.setProducerWindowSize(1024); - locator.setConsumerWindowSize(1024); - locator.setAckBatchSize(1024); + locator.setProducerWindowSize(1024); + locator.setConsumerWindowSize(1024); + locator.setAckBatchSize(1024); sf = createSessionFactory(locator); - session = sf.createSession(false, true, true, true); + session = sf.createSession(false, true, true, true); - final SimpleString queueName = new SimpleString("testqueue"); + final SimpleString queueName = new SimpleString("testqueue"); - session.createQueue(address, queueName, null, false); + session.createQueue(address, queueName, null, false); - ClientProducer producer = session.createProducer(address); + ClientProducer producer = session.createProducer(address); - byte[] bytes = new byte[2000]; + byte[] bytes = new byte[2000]; - ClientMessage message = session.createMessage(false); + ClientMessage message = session.createMessage(false); - message.getBodyBuffer().writeBytes(bytes); + message.getBodyBuffer().writeBytes(bytes); - final AtomicBoolean closed = new AtomicBoolean(false); + final AtomicBoolean closed = new AtomicBoolean(false); - Thread t = new Thread(new Runnable() + Thread t = new Thread(new Runnable() + { + public void run() { - public void run() + try { - try - { - Thread.sleep(500); + Thread.sleep(500); - closed.set(true); + closed.set(true); - session.close(); - } - catch (Exception e) - { - } + session.close(); } - }); + catch (Exception e) + { + } + } + }); - t.start(); + t.start(); + try + { // This will block - producer.send(message); + for (int i = 0 ; i < 10; i++) + { + producer.send(message); + } + } + catch (HornetQObjectClosedException expected) + { + } - Assert.assertTrue(closed.get()); + Assert.assertTrue(closed.get()); - t.join(); + t.join(); } public void testFlowControlMessageNotRouted() throws Exception diff --git a/tests/integration-tests/src/test/java/org/hornetq/tests/integration/client/TemporaryQueueTest.java b/tests/integration-tests/src/test/java/org/hornetq/tests/integration/client/TemporaryQueueTest.java index 5d31f252b52..ec9106577b2 100644 --- a/tests/integration-tests/src/test/java/org/hornetq/tests/integration/client/TemporaryQueueTest.java +++ b/tests/integration-tests/src/test/java/org/hornetq/tests/integration/client/TemporaryQueueTest.java @@ -319,9 +319,6 @@ public void testQueueWithWildcard3() throws Exception session.deleteQueue("queue2"); } - /** - * @see org.hornetq.core.server.impl.ServerSessionImpl#doHandleCreateQueue(org.hornetq.core.remoting.impl.wireformat.CreateQueueMessage) - */ public void testDeleteTemporaryQueueAfterConnectionIsClosed_2() throws Exception { SimpleString queue = RandomUtil.randomSimpleString(); @@ -644,7 +641,7 @@ public void run() ClientConsumer newConsumer = newConsumerSession.createConsumer("Q2"); newConsumerSession.start(); - int toReceive = TOTAL_MSG - msgs.get() - 1; + int toReceive = TOTAL_MSG - msgs.get(); for (ServerSession sessionIterator: server.getSessions()) {