You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "James Birdsall (JIRA)" <qp...@incubator.apache.org> on 2009/10/29 02:12:59 UTC

[jira] Created: (QPID-2167) Attempting to query or declare(passive=true) a nonexistent exchange renders session unusable

Attempting to query or declare(passive=true) a nonexistent exchange renders session unusable
--------------------------------------------------------------------------------------------

                 Key: QPID-2167
                 URL: https://issues.apache.org/jira/browse/QPID-2167
             Project: Qpid
          Issue Type: Bug
          Components: C++ Client
    Affects Versions: 0.6
         Environment: Windows Server 2008
            Reporter: James Birdsall
             Fix For: 0.6


In a program using the C++ client, running against the C++ broker, trying to do a session.exchangeQuery or session.exchangeDeclare (with passive=true) on a nonexistent exchange throws a not-found exception. Thereafter, any other operations on the same session throw the same exception again, including trying to close the session.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


[jira] Commented: (QPID-2167) Attempting to query or declare(passive=true) a nonexistent exchange renders session unusable

Posted by "James Birdsall (JIRA)" <qp...@incubator.apache.org>.
    [ https://issues.apache.org/jira/browse/QPID-2167?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12771726#action_12771726 ] 

James Birdsall commented on QPID-2167:
--------------------------------------

Trying to check whether an exchange exists, actually.

It looks like this is expected behavior for declare(passive=true), yes, based on page 217 of the AMQP 0-10 spec. Sorry about the false alarm there.

However, exchange.query, on page 219, is not documented as raising a not-found exception  -- it's not documented as raising any exceptions at all. It does have a "not-found" field in the return structure, though, and there's a getNotExists() method on the return type for session.queryExchange() in the Qpid C++ client. Am I missing something?

> Attempting to query or declare(passive=true) a nonexistent exchange renders session unusable
> --------------------------------------------------------------------------------------------
>
>                 Key: QPID-2167
>                 URL: https://issues.apache.org/jira/browse/QPID-2167
>             Project: Qpid
>          Issue Type: Bug
>          Components: C++ Client
>    Affects Versions: 0.6
>         Environment: Windows Server 2008
>            Reporter: James Birdsall
>             Fix For: 0.6
>
>
> In a program using the C++ client, running against the C++ broker, trying to do a session.exchangeQuery or session.exchangeDeclare (with passive=true) on a nonexistent exchange throws a not-found exception. Thereafter, any other operations on the same session throw the same exception again, including trying to close the session.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


[jira] Commented: (QPID-2167) Attempting to query or declare(passive=true) a nonexistent exchange renders session unusable

Posted by "Gordon Sim (JIRA)" <qp...@incubator.apache.org>.
    [ https://issues.apache.org/jira/browse/QPID-2167?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12771949#action_12771949 ] 

Gordon Sim commented on QPID-2167:
----------------------------------

Sorry, you did say it was an exchange in the title, I didn't read it properly! I agree that exchangeQuery() should not throw an exception; it doesn't in my test. The returned type (ExchangeQueryResult) has a getNotFound() method that can be used to test whether the exchange exists or not. E.g.

#include <qpid/client/Connection.h>
#include <qpid/client/Session.h>
#include <qpid/framing/ExchangeQueryResult.h>

#include <cstdlib>
#include <iostream>

using namespace qpid::client;
using namespace qpid::sys;
using namespace qpid::framing;

using std::string;

int main(int argc, char** argv) {
    std::string name = argc>1 ? argv[1] : "amq.topic";
    ConnectionSettings settings;
    settings.tcpNoDelay = true;
    if (argc>2) settings.host = argv[2];
    if (argc>3) settings.port = atoi(argv[3]);
    Connection connection;
    try {
        connection.open(settings);
        Session session =  connection.newSession();
        ExchangeQueryResult result = session.exchangeQuery(name);
        if (result.getNotFound()) {
            std::cout << name << ": does not exist" << std::endl;
        } else {
            std::cout << name << ": is of type " << result.getType() << std::endl;
        }
        connection.close();
        return 0;
    } catch(const std::exception& error) {
        std::cout << error.what() << std::endl;
    }
    return 1;
}


> Attempting to query or declare(passive=true) a nonexistent exchange renders session unusable
> --------------------------------------------------------------------------------------------
>
>                 Key: QPID-2167
>                 URL: https://issues.apache.org/jira/browse/QPID-2167
>             Project: Qpid
>          Issue Type: Bug
>          Components: C++ Client
>    Affects Versions: 0.6
>         Environment: Windows Server 2008
>            Reporter: James Birdsall
>             Fix For: 0.6
>
>
> In a program using the C++ client, running against the C++ broker, trying to do a session.exchangeQuery or session.exchangeDeclare (with passive=true) on a nonexistent exchange throws a not-found exception. Thereafter, any other operations on the same session throw the same exception again, including trying to close the session.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


[jira] Closed: (QPID-2167) Attempting to query or declare(passive=true) a nonexistent exchange renders session unusable

Posted by "James Birdsall (JIRA)" <qp...@incubator.apache.org>.
     [ https://issues.apache.org/jira/browse/QPID-2167?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

James Birdsall closed QPID-2167.
--------------------------------

    Resolution: Cannot Reproduce

I can't reproduce the problem with exchangeQuery anymore. I guess I must have been doing something wrong in my original code.

> Attempting to query or declare(passive=true) a nonexistent exchange renders session unusable
> --------------------------------------------------------------------------------------------
>
>                 Key: QPID-2167
>                 URL: https://issues.apache.org/jira/browse/QPID-2167
>             Project: Qpid
>          Issue Type: Bug
>          Components: C++ Client
>    Affects Versions: 0.6
>         Environment: Windows Server 2008
>            Reporter: James Birdsall
>             Fix For: 0.6
>
>
> In a program using the C++ client, running against the C++ broker, trying to do a session.exchangeQuery or session.exchangeDeclare (with passive=true) on a nonexistent exchange throws a not-found exception. Thereafter, any other operations on the same session throw the same exception again, including trying to close the session.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


[jira] Commented: (QPID-2167) Attempting to query or declare(passive=true) a nonexistent exchange renders session unusable

Posted by "Gordon Sim (JIRA)" <qp...@incubator.apache.org>.
    [ https://issues.apache.org/jira/browse/QPID-2167?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12771567#action_12771567 ] 

Gordon Sim commented on QPID-2167:
----------------------------------

That is actually expected behaviour. The amqp spec dictates that the session is destroyed with a not-found 'exception'. The c++ client will throw the exception that destroyed the session on any subsequent call.

If you want to test that a queue exists without destroying your session you can use queueQuery() or exchangeBound() (the latter is preferable where the queue may have a lot of messages due to a currently suboptimal impl of queueQuery()).

> Attempting to query or declare(passive=true) a nonexistent exchange renders session unusable
> --------------------------------------------------------------------------------------------
>
>                 Key: QPID-2167
>                 URL: https://issues.apache.org/jira/browse/QPID-2167
>             Project: Qpid
>          Issue Type: Bug
>          Components: C++ Client
>    Affects Versions: 0.6
>         Environment: Windows Server 2008
>            Reporter: James Birdsall
>             Fix For: 0.6
>
>
> In a program using the C++ client, running against the C++ broker, trying to do a session.exchangeQuery or session.exchangeDeclare (with passive=true) on a nonexistent exchange throws a not-found exception. Thereafter, any other operations on the same session throw the same exception again, including trying to close the session.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org