Author: rgodfrey Date: Tue Feb 21 20:54:07 2012 New Revision: 1292008 URL: http://svn.apache.org/viewvc?rev=1292008&view=rev Log: QPID-3595 : Python Alternate Exchange tests fail against the Java Broker
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java?rev=1292008&r1=1292007&r2=1292008&view=diff ============================================================================== --- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java (original) +++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java Tue Feb 21 20:54:07 2012 @@ -417,11 +417,19 @@ public abstract class QueueEntryImpl imp if (alternateExchange != null) { - final List<? extends BaseQueue> rerouteQueues = alternateExchange.route(new InboundMessageAdapter(this)); + InboundMessageAdapter inboundMessageAdapter = new InboundMessageAdapter(this); + List<? extends BaseQueue> queues = alternateExchange.route(inboundMessageAdapter); final ServerMessage message = getMessage(); - if (rerouteQueues != null && rerouteQueues.size() != 0) + if ((queues == null || queues.size() == 0) && alternateExchange.getAlternateExchange() != null) { + queues = alternateExchange.getAlternateExchange().route(inboundMessageAdapter); + } + + + if (queues != null && queues.size() != 0) + { + final List<? extends BaseQueue> rerouteQueues = queues; ServerTransaction txn = new LocalTransaction(getQueue().getVirtualHost().getMessageStore()); txn.enqueue(rerouteQueues, message, new ServerTransaction.Action() Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java?rev=1292008&r1=1292007&r2=1292008&view=diff ============================================================================== --- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java (original) +++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java Tue Feb 21 20:54:07 2012 @@ -1515,10 +1515,16 @@ public class SimpleAMQQueue implements A for(final QueueEntry entry : entries) { adapter.setEntry(entry); - final List<? extends BaseQueue> rerouteQueues = _alternateExchange.route(adapter); + List<? extends BaseQueue> queues = _alternateExchange.route(adapter); + if((queues == null || queues.size() == 0) && _alternateExchange.getAlternateExchange() != null) + { + queues = _alternateExchange.getAlternateExchange().route(adapter); + } + final ServerMessage message = entry.getMessage(); - if(rerouteQueues != null && rerouteQueues.size() != 0) + if(queues != null && queues.size() != 0) { + final List<? extends BaseQueue> rerouteQueues = queues; txn.enqueue(rerouteQueues, entry.getMessage(), new ServerTransaction.Action() { Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java?rev=1292008&r1=1292007&r2=1292008&view=diff ============================================================================== --- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java (original) +++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java Tue Feb 21 20:54:07 2012 @@ -505,19 +505,40 @@ public class ServerSessionDelegate exten method.getAutoDelete()); String alternateExchangeName = method.getAlternateExchange(); + boolean validAlternate; if(alternateExchangeName != null && alternateExchangeName.length() != 0) { Exchange alternate = getExchange(session, alternateExchangeName); - exchange.setAlternateExchange(alternate); + if(alternate == null) + { + validAlternate = false; + } + else + { + exchange.setAlternateExchange(alternate); + validAlternate = true; + } } - - if (exchange.isDurable()) + else { - DurableConfigurationStore store = virtualHost.getDurableConfigurationStore(); - store.createExchange(exchange); + validAlternate = true; } - exchangeRegistry.registerExchange(exchange); + if(validAlternate) + { + if (exchange.isDurable()) + { + DurableConfigurationStore store = virtualHost.getDurableConfigurationStore(); + store.createExchange(exchange); + } + + exchangeRegistry.registerExchange(exchange); + } + else + { + exception(session, method, ExecutionErrorCode.NOT_FOUND, + "Unknown alternate exchange " + alternateExchangeName); + } } catch(AMQUnknownExchangeType e) { @@ -539,7 +560,8 @@ public class ServerSessionDelegate exten + " to " + method.getType() +"."); } else if(method.hasAlternateExchange() - && !(method.getAlternateExchange().equals(exchange.getAlternateExchange().getName()))) + && (exchange.getAlternateExchange() == null || + !method.getAlternateExchange().equals(exchange.getAlternateExchange().getName()))) { exception(session, method, ExecutionErrorCode.NOT_ALLOWED, "Attempt to change alternate exchange of: " + exchangeName Modified: qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes?rev=1292008&r1=1292007&r2=1292008&view=diff ============================================================================== --- qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes (original) +++ qpid/trunk/qpid/java/test-profiles/python_tests/Java010PythonExcludes Tue Feb 21 20:54:07 2012 @@ -63,12 +63,6 @@ qpid_tests.broker_0_10.message.MessageTe #QPID-3605 Durable subscriber with no-local true receives messages on re-connection qpid_tests.broker_0_10.message.MessageTests.test_no_local_awkward -#QPID-3595 Alternate Exchanges support requires work to be spec compliant. -qpid_tests.broker_0_10.alternate_exchange.AlternateExchangeTests.test_queue_delete_no_match -qpid_tests.broker_0_10.alternate_exchange.AlternateExchangeTests.test_reject_no_match -qpid_tests.broker_0_10.alternate_exchange.AlternateExchangeTests.test_add_alternate_to_exchange -qpid_tests.broker_0_10.new_api.GeneralTests.test_qpid_3481_acquired_to_alt_exchange - #QPID-3599 Tests fail due to differences in expected message Redelivered status qpid.tests.messaging.endpoints.SessionTests.testCommitAck qpid.tests.messaging.endpoints.SessionTests.testRelease Modified: qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py?rev=1292008&r1=1292007&r2=1292008&view=diff ============================================================================== --- qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py (original) +++ qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py Tue Feb 21 20:54:07 2012 @@ -74,7 +74,7 @@ class GeneralTests(Base): self.assertEqual(rx_alt.available(), 0, "No messages should have been routed to the alt_exchange") sess1.close() - + sleep(1) self.assertEqual(rx_alt.available(), 5, "All 5 messages should have been routed to the alt_exchange") sess2.close() @@ -108,6 +108,7 @@ class GeneralTests(Base): # Close sess1; This will cause the queue to be deleted sess1.close() + sleep(1) self.assertEqual(rx_alt.available(), 2, "2 of the messages should have been routed to the alt_exchange") # Close sess2; This will cause the acquired messages to be requeued and routed to the alternate --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:commits-subscr...@qpid.apache.org