[ 
https://issues.apache.org/jira/browse/QPIDJMS-395?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16517273#comment-16517273
 ] 

Timothy Bish commented on QPIDJMS-395:
--------------------------------------

Having a JMS client specific exception would mean that those using it are now 
tied to that client implementation.  The other question I'd ask would be, what 
exception that is thrown from send would indicate that a resend wasn't needed? 

> connection:forced leads to JMSException even though reconnect is enabled
> ------------------------------------------------------------------------
>
>                 Key: QPIDJMS-395
>                 URL: https://issues.apache.org/jira/browse/QPIDJMS-395
>             Project: Qpid JMS
>          Issue Type: Bug
>          Components: qpid-jms-client
>    Affects Versions: 0.33.0
>            Reporter: Jiri Daněk
>            Priority: Major
>
> Based on 
> http://qpid.2158936.n2.nabble.com/Reconnect-and-amqp-connection-forced-td7659043.html,
>  I believe that reconnect:force error should not be propagated to library 
> user and the library should silently reconnect. This does not happen in the 
> test below, when I am sending messages fast--I do get exception caused by 
> connection:forced. Notice the commented out sleep() call.
> In ActiveMQ Artemis testsuite:
> {noformat}
> diff --git 
> a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFailoverEndpointDiscoveryTest.java
>  
> b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFailoverEndpointDiscoveryTest.java
> index 81c28855ef..888171227b 100644
> --- 
> a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFailoverEndpointDiscoveryTest.java
> +++ 
> b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFailoverEndpointDiscoveryTest.java
> @@ -86,6 +86,32 @@ public class AmqpFailoverEndpointDiscoveryTest extends 
> FailoverTestBase {
>        }
>     }
>  
> +   @Test(timeout = 120000)
> +   public void testReconnectWhileSendingWithAMQP() throws Exception {
> +      JmsConnectionFactory factory = getJmsConnectionFactory();
> +      try (Connection connection = factory.createConnection()) {
> +         connection.start();
> +         Session session = connection.createSession(false, 
> Session.AUTO_ACKNOWLEDGE);
> +         javax.jms.Queue queue = session.createQueue(ADDRESS.toString());
> +         MessageProducer producer = session.createProducer(queue);
> +         Thread t = new Thread(() -> {
> +            try {
> +               while(true) {
> +                  System.out.println("sending message");
> +                  producer.send(session.createTextMessage("hello before 
> failover"));
> +//                  Thread.sleep(1000);  // comment out to send messages 
> quickly
> +               }
> +            } catch (Exception e ) {
> +               e.printStackTrace();
> +            }
> +         });
> +         t.start();
> +         Thread.sleep(2000);  // simpler to read than actual synchronization
> +         liveServer.crash(true, true);
> +         Thread.sleep(2000);
> +      }
> +   }
> +
>     private JmsConnectionFactory getJmsConnectionFactory() {
>        if (protocol == 0) {
>           return new 
> JmsConnectionFactory("failover:(amqp://localhost:61616)");
> {noformat}
> The above will print (only print, there aren't asserts)
> {noformat}
> javax.jms.JMSException: Received error from remote peer without description 
> [condition = amqp:connection:forced]
>       at 
> org.apache.qpid.jms.provider.amqp.AmqpSupport.convertToException(AmqpSupport.java:164)
>       at 
> org.apache.qpid.jms.provider.amqp.AmqpSupport.convertToException(AmqpSupport.java:117)
>       at 
> org.apache.qpid.jms.provider.amqp.AmqpAbstractResource.processRemoteClose(AmqpAbstractResource.java:262)
>       at 
> org.apache.qpid.jms.provider.amqp.AmqpProvider.processUpdates(AmqpProvider.java:971)
>       at 
> org.apache.qpid.jms.provider.amqp.AmqpProvider.access$1900(AmqpProvider.java:105)
>       at 
> org.apache.qpid.jms.provider.amqp.AmqpProvider$17.run(AmqpProvider.java:854)
>       at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>       at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
>       at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>       at java.lang.Thread.run(Thread.java:748)
> {noformat}
> The PN_TRACE_FRM log for this is
> {noformat}
> [...]
> [1476077082:1] -> Transfer{handle=0, deliveryId=221, deliveryTag=\x00, 
> messageFormat=0, settled=null, more=false, rcvSettleMode=null, state=null, 
> resume=false, aborted=false, batchable=false} (179) 
> "\x00Sp\xc0\x02\x01A\x00Sr\xc1)\x04\xa3\x0ex-opt-jms-destQ\x00\xa3\x12x-opt-jms-msg-typeQ\x05\x00Ss\xd0\x00\x00\x00\x5c\x00\x00\x00\x0a\xa11ID:bc37e33f-5706-4fe3-b953-c5be80e38b52:1:1:1-222@\xa1\x13FailoverTestAddress@@@@@@\x83\x00\x00\x01d\x12f\x06\xac\x00Sw\xa1\x15hello
>  before failover"
> [913923932:1] <- Transfer{handle=0, deliveryId=221, deliveryTag=\x00, 
> messageFormat=0, settled=null, more=false, rcvSettleMode=null, state=null, 
> resume=false, aborted=false, batchable=false} (179) 
> "\x00Sp\xc0\x02\x01A\x00Sr\xc1)\x04\xa3\x0ex-opt-jms-destQ\x00\xa3\x12x-opt-jms-msg-typeQ\x05\x00Ss\xd0\x00\x00\x00\x5c\x00\x00\x00\x0a\xa11ID:bc37e33f-5706-4fe3-b953-c5be80e38b52:1:1:1-222@\xa1\x13FailoverTestAddress@@@@@@\x83\x00\x00\x01d\x12f\x06\xac\x00Sw\xa1\x15hello
>  before failover"
> [913923932:1] -> Disposition{role=RECEIVER, first=221, last=221, 
> settled=true, state=Accepted{}, batchable=false}
> [1476077082:1] <- Disposition{role=RECEIVER, first=221, last=221, 
> settled=true, state=Accepted{}, batchable=false}
> sending message
> [1476077082:1] -> Transfer{handle=0, deliveryId=222, deliveryTag=\x00, 
> messageFormat=0, settled=null, more=false, rcvSettleMode=null, state=null, 
> resume=false, aborted=false, batchable=false} (179) 
> "\x00Sp\xc0\x02\x01A\x00Sr\xc1)\x04\xa3\x0ex-opt-jms-destQ\x00\xa3\x12x-opt-jms-msg-typeQ\x05\x00Ss\xd0\x00\x00\x00\x5c\x00\x00\x00\x0a\xa11ID:bc37e33f-5706-4fe3-b953-c5be80e38b52:1:1:1-223@\xa1\x13FailoverTestAddress@@@@@@\x83\x00\x00\x01d\x12f\x06\xb0\x00Sw\xa1\x15hello
>  before failover"
> [913923932:0] -> Close{error=Error{condition=amqp:connection:forced, 
> description='null', info=null}}
> [913923932:1] <- Transfer{handle=0, deliveryId=222, deliveryTag=\x00, 
> messageFormat=0, settled=null, more=false, rcvSettleMode=null, state=null, 
> resume=false, aborted=false, batchable=false} (179) 
> "\x00Sp\xc0\x02\x01A\x00Sr\xc1)\x04\xa3\x0ex-opt-jms-destQ\x00\xa3\x12x-opt-jms-msg-typeQ\x05\x00Ss\xd0\x00\x00\x00\x5c\x00\x00\x00\x0a\xa11ID:bc37e33f-5706-4fe3-b953-c5be80e38b52:1:1:1-223@\xa1\x13FailoverTestAddress@@@@@@\x83\x00\x00\x01d\x12f\x06\xb0\x00Sw\xa1\x15hello
>  before failover"
> [1476077082:0] <- Close{error=Error{condition=amqp:connection:forced, 
> description='null', info=null}}
> [1476077082:0] -> Close{error=null}
> [913923932:0] <- Close{error=null}
> javax.jms.JMSException: Received error from remote peer without description 
> [condition = amqp:connection:forced]
>       at 
> org.apache.qpid.jms.provider.amqp.AmqpSupport.convertToException(AmqpSupport.java:164)
>       at 
> org.apache.qpid.jms.provider.amqp.AmqpSupport.convertToException(AmqpSupport.java:117)
>       at 
> org.apache.qpid.jms.provider.amqp.AmqpAbstractResource.processRemoteClose(AmqpAbstractResource.java:262)
>       at 
> org.apache.qpid.jms.provider.amqp.AmqpProvider.processUpdates(AmqpProvider.java:971)
>       at 
> org.apache.qpid.jms.provider.amqp.AmqpProvider.access$1900(AmqpProvider.java:105)
>       at 
> org.apache.qpid.jms.provider.amqp.AmqpProvider$17.run(AmqpProvider.java:854)
>       at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>       at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
>       at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>       at java.lang.Thread.run(Thread.java:748)
> [Thread-8 
> (ActiveMQ-server-org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl$5@343570b7)]
>  12:17:13,704 WARN  [org.apache.activemq.artemis.core.client] AMQ212037: 
> Connection failure has been detected: AMQ119015: The connection was 
> disconnected because of server shutdown [code=DISCONNECTED]
> [Thread-6 (ActiveMQ-client-global-threads)] 12:17:13,704 WARN  
> [org.apache.activemq.artemis.core.client] AMQ212037: Connection failure has 
> been detected: AMQ119015: The connection was disconnected because of server 
> shutdown [code=DISCONNECTED]
> [Thread-2] 12:17:13,731 INFO  [org.apache.activemq.artemis.core.server] 
> AMQ221002: Apache ActiveMQ Artemis Message Broker version 
> identity=AmqpFailoverEndpointDiscoveryTest/liveServer,version=2.7.0-SNAPSHOT 
> [c1f0e25e-72e0-11e8-acbd-b6cd2f5fd8dd] stopped, uptime 4.323 seconds
> [Thread-6 (ActiveMQ-client-global-threads)] 12:17:13,737 WARN  
> [org.apache.activemq.artemis.core.client] AMQ212004: Failed to connect to 
> server.
> [AMQ119000: Activation for server 
> ActiveMQServerImpl::AmqpFailoverEndpointDiscoveryTest/backupServers] 
> 12:17:13,831 INFO  [org.apache.activemq.artemis.core.server] AMQ221020: 
> Started EPOLL Acceptor at localhost:61617 for protocols 
> [CORE,MQTT,AMQP,STOMP,HORNETQ,OPENWIRE]
> [AMQ119000: Activation for server 
> ActiveMQServerImpl::AmqpFailoverEndpointDiscoveryTest/backupServers] 
> 12:17:13,831 INFO  [org.apache.activemq.artemis.core.server] AMQ221010: 
> Backup Server is now live
> [737743497:0] -> Open{ 
> containerId='ID:b8e3f0c3-0810-41d0-a087-c69de89f017f:1', 
> hostname='localhost', maxFrameSize=1048576, channelMax=32767, 
> idleTimeOut=30000, outgoingLocales=null, incomingLocales=null, 
> offeredCapabilities=null, desiredCapabilities=[sole-connection-for-container, 
> DELAYED_DELIVERY, ANONYMOUS-RELAY, SHARED-SUBS], properties={product=QpidJMS, 
> version=0.32.0, platform=JVM: 1.8.0_172, 25.172-b11, Oracle Corporation, OS: 
> Linux, 4.14.43, amd64}}
> [1583552999:0] <- Open{ 
> containerId='ID:b8e3f0c3-0810-41d0-a087-c69de89f017f:1', 
> hostname='localhost', maxFrameSize=1048576, channelMax=32767, 
> idleTimeOut=30000, outgoingLocales=null, incomingLocales=null, 
> offeredCapabilities=null, desiredCapabilities=[sole-connection-for-container, 
> DELAYED_DELIVERY, ANONYMOUS-RELAY, SHARED-SUBS], properties={product=QpidJMS, 
> version=0.32.0, platform=JVM: 1.8.0_172, 25.172-b11, Oracle Corporation, OS: 
> Linux, 4.14.43, amd64}}
> [1583552999:0] -> Open{ containerId='localhost', hostname='null', 
> maxFrameSize=131072, channelMax=65535, idleTimeOut=30000, 
> outgoingLocales=null, incomingLocales=null, 
> offeredCapabilities=[sole-connection-for-container, DELAYED_DELIVERY, 
> SHARED-SUBS, ANONYMOUS-RELAY], desiredCapabilities=null, 
> properties={product=apache-activemq-artemis, version=2.7.0-SNAPSHOT}}
> [737743497:0] <- Open{ containerId='localhost', hostname='null', 
> maxFrameSize=131072, channelMax=65535, idleTimeOut=30000, 
> outgoingLocales=null, incomingLocales=null, 
> offeredCapabilities=[sole-connection-for-container, DELAYED_DELIVERY, 
> SHARED-SUBS, ANONYMOUS-RELAY], desiredCapabilities=null, 
> properties={product=apache-activemq-artemis, version=2.7.0-SNAPSHOT}}
> [737743497:0] -> Begin{remoteChannel=null, nextOutgoingId=1, 
> incomingWindow=2047, outgoingWindow=2147483647, handleMax=65535, 
> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> [1583552999:0] <- Begin{remoteChannel=null, nextOutgoingId=1, 
> incomingWindow=2047, outgoingWindow=2147483647, handleMax=65535, 
> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> [1583552999:0] -> Begin{remoteChannel=0, nextOutgoingId=1, 
> incomingWindow=2147483647, outgoingWindow=2147483647, handleMax=65535, 
> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> [737743497:0] <- Begin{remoteChannel=0, nextOutgoingId=1, 
> incomingWindow=2147483647, outgoingWindow=2147483647, handleMax=65535, 
> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> [737743497:1] -> Begin{remoteChannel=null, nextOutgoingId=1, 
> incomingWindow=2047, outgoingWindow=2147483647, handleMax=65535, 
> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> [1583552999:1] <- Begin{remoteChannel=null, nextOutgoingId=1, 
> incomingWindow=2047, outgoingWindow=2147483647, handleMax=65535, 
> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> [1583552999:1] -> Begin{remoteChannel=1, nextOutgoingId=1, 
> incomingWindow=2147483647, outgoingWindow=2147483647, handleMax=65535, 
> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> [737743497:1] <- Begin{remoteChannel=1, nextOutgoingId=1, 
> incomingWindow=2147483647, outgoingWindow=2147483647, handleMax=65535, 
> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> [737743497:1] -> 
> Attach{name='qpid-jms:sender:ID:bc37e33f-5706-4fe3-b953-c5be80e38b52:1:1:1:FailoverTestAddress',
>  handle=0, role=SENDER, sndSettleMode=UNSETTLED, rcvSettleMode=FIRST, 
> source=Source{address='ID:bc37e33f-5706-4fe3-b953-c5be80e38b52:1:1:1', 
> durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false, 
> dynamicNodeProperties=null, distributionMode=null, filter=null, 
> defaultOutcome=null, outcomes=[amqp:accepted:list, amqp:rejected:list, 
> amqp:released:list, amqp:modified:list], capabilities=null}, 
> target=Target{address='FailoverTestAddress', durable=NONE, 
> expiryPolicy=SESSION_END, timeout=0, dynamic=false, 
> dynamicNodeProperties=null, capabilities=[queue]}, unsettled=null, 
> incompleteUnsettled=false, initialDeliveryCount=0, maxMessageSize=null, 
> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> [...]
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to