You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Keith Wall (JIRA)" <ji...@apache.org> on 2015/08/20 00:05:45 UTC

[jira] [Commented] (QPID-6701) [Regression btw 0.30 - 0.32] If address doesn't resolve an exception is not thrown

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

Keith Wall commented on QPID-6701:
----------------------------------

Against the Java Broker with a 0-30 client, the underlying exception reports "The name 'non-existing-node' supplied in the address doesn't resolve to an exchange or a queue".  The pertinent part of the code is  AMQSession#resolveAddress which identifies dest as of type 1 (QUEUE_TYPE), but then the control falls all the way through the switch to hit the default and throw the AMQException.  The exception bubbles up as AMQException " Exception occured while verifying destination" and finally as a JMSException "Error creating producer". 

{noformat}
Exception in thread "main" javax.jms.JMSException: Error creating producer
	at org.apache.qpid.client.AMQSession.toJMSException(AMQSession.java:3719)
	at org.apache.qpid.client.AMQSession_0_10.createMessageProducer(AMQSession_0_10.java:696)
	at org.apache.qpid.client.AMQSession_0_10.createMessageProducer(AMQSession_0_10.java:69)
	at org.apache.qpid.client.AMQSession$7.execute(AMQSession.java:2791)
	at org.apache.qpid.client.AMQSession$7.execute(AMQSession.java:2782)
	at org.apache.qpid.client.AMQConnectionDelegate_0_10.executeRetrySupport(AMQConnectionDelegate_0_10.java:371)
	at org.apache.qpid.client.AMQConnection.executeRetrySupport(AMQConnection.java:652)
	at org.apache.qpid.client.failover.FailoverRetrySupport.execute(FailoverRetrySupport.java:96)
	at org.apache.qpid.client.AMQSession.createProducerImpl(AMQSession.java:2780)
	at org.apache.qpid.client.AMQSession.createProducer(AMQSession.java:1305)
	at org.apache.qpid.client.AMQSession.createProducer(AMQSession.java:97)
	at org.apache.qpid.example.Spout.<init>(Spout.java:91)
	at org.apache.qpid.example.Spout.main(Spout.java:147)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: org.apache.qpid.AMQException: Exception occured while verifying destination
	at org.apache.qpid.client.BasicMessageProducer_0_10.declareDestination(BasicMessageProducer_0_10.java:96)
	at org.apache.qpid.client.BasicMessageProducer.<init>(BasicMessageProducer.java:139)
	at org.apache.qpid.client.BasicMessageProducer_0_10.<init>(BasicMessageProducer_0_10.java:65)
	at org.apache.qpid.client.AMQSession_0_10.createMessageProducer(AMQSession_0_10.java:691)
	... 16 more
Caused by: org.apache.qpid.AMQException: The name 'nonexistent' supplied in the address doesn't resolve to an exchange or a queue
	at org.apache.qpid.client.AMQSession.resolveAddress(AMQSession.java:722)
	at org.apache.qpid.client.BasicMessageProducer_0_10.declareDestination(BasicMessageProducer_0_10.java:90)
	... 19 more
{noformat}

QPID-6040 (rev 1620659) changed the algorithm in  AMQSession#resolveAddress  so that the two switch blocks (QUEUE_TYPE and TOPIC_TYPE) 'break' regardless of whether they consider the destination to be resolved.  It is not immediately clear to me why QPID-6040 required this, but I see that currently AddressBasedDestinationTest will fail (against the Java Broker - with "The name '$virtualhostProperties' supplied in the address doesn't resolve to an exchange or a queue") if this part is reverted.



https://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java?r1=1620659&r2=1620658&pathrev=1620659

> [Regression btw 0.30 - 0.32] If address doesn't resolve an exception is not thrown
> ----------------------------------------------------------------------------------
>
>                 Key: QPID-6701
>                 URL: https://issues.apache.org/jira/browse/QPID-6701
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Client
>    Affects Versions: 0.32
>            Reporter: Rajith Attapattu
>            Priority: Blocker
>             Fix For: qpid-java-6.0
>
>
> If you run "java -cp $CP org.apache.qpid.example.Spout non-existing-node",
> 1. In 0.30 you get an exception with the cause "org.apache.qpid.AMQException: Exception occured while verifying destination"
> 2. In 0.32 no such exception is thrown.
> The issue is in the resolveAddress method in AMQSession class.
> If resolved is false no action is taken. There are a couple issues with this.
> 1. A producer can be created to a non existent queue or exchange.
> 2. Messages being dropped -  While sending to a non existing exchange will result in an error, sending to a non existent queue via an exchange will simply result in messages being dropped. 
> 3. The address will continue to be resolved as there was no error the previous time.
> We should throw an exception if resolved == false.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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