You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2011/02/25 18:30:59 UTC

svn commit: r1074642 - in /qpid/trunk/qpid: cpp/src/qpid/broker/SemanticState.cpp cpp/src/qpid/broker/SemanticState.h cpp/src/qpid/broker/SessionAdapter.cpp tests/src/py/qpid_tests/broker_0_10/message.py

Author: gsim
Date: Fri Feb 25 17:30:59 2011
New Revision: 1074642

URL: http://svn.apache.org/viewvc?rev=1074642&view=rev
Log:
QPID-2324: Raise 404 on cancellation if no such subscription exists.

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp
    qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.h
    qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp
    qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/message.py

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp?rev=1074642&r1=1074641&r2=1074642&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.cpp Fri Feb 25 17:30:59 2011
@@ -116,7 +116,8 @@ void SemanticState::consume(const string
     consumers[tag] = c;
 }
 
-void SemanticState::cancel(const string& tag){
+bool SemanticState::cancel(const string& tag)
+{
     ConsumerImplMap::iterator i = consumers.find(tag);
     if (i != consumers.end()) {
         cancel(i->second);
@@ -124,7 +125,9 @@ void SemanticState::cancel(const string&
         //should cancel all unacked messages for this consumer so that
         //they are not redelivered on recovery
         for_each(unacked.begin(), unacked.end(), boost::bind(&DeliveryRecord::cancel, _1, tag));
-        
+        return true;
+    } else {
+        return false;
     }
 }
 

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.h?rev=1074642&r1=1074641&r2=1074642&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/SemanticState.h Fri Feb 25 17:30:59 2011
@@ -205,7 +205,7 @@ class SemanticState : private boost::non
                  const std::string& resumeId=std::string(), uint64_t resumeTtl=0,
                  const framing::FieldTable& = framing::FieldTable());
 
-    void cancel(const std::string& tag);
+    bool cancel(const std::string& tag);
 
     void setWindowMode(const std::string& destination);
     void setCreditMode(const std::string& destination);

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp?rev=1074642&r1=1074641&r2=1074642&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/SessionAdapter.cpp Fri Feb 25 17:30:59 2011
@@ -431,7 +431,9 @@ SessionAdapter::MessageHandlerImpl::subs
 void
 SessionAdapter::MessageHandlerImpl::cancel(const string& destination )
 {
-    state.cancel(destination);
+    if (!state.cancel(destination)) {
+        throw NotFoundException(QPID_MSG("No such subscription: " << destination));
+    }
 
     ManagementAgent* agent = getBroker().getManagementAgent();
     if (agent)

Modified: qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/message.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/message.py?rev=1074642&r1=1074641&r2=1074642&view=diff
==============================================================================
--- qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/message.py (original)
+++ qpid/trunk/qpid/tests/src/py/qpid_tests/broker_0_10/message.py Fri Feb 25 17:30:59 2011
@@ -245,9 +245,19 @@ class MessageTests(TestBase010):
             self.fail("Got message after cancellation: " + msg)
         except Empty: None
 
-        #cancellation of non-existant consumers should be handled without error
-        session.message_cancel(destination="my-consumer")
-        session.message_cancel(destination="this-never-existed")
+        #cancellation of non-existant consumers should be result in 404s
+        try:
+            session.message_cancel(destination="my-consumer")
+            self.fail("Expected 404 for recancellation of subscription.")
+        except SessionException, e:
+            self.assertEquals(404, e.args[0].error_code)
+
+        session = self.conn.session("alternate-session", timeout=10)
+        try:
+            session.message_cancel(destination="this-never-existed")
+            self.fail("Expected 404 for cancellation of unknown subscription.")
+        except SessionException, e:
+            self.assertEquals(404, e.args[0].error_code)
 
 
     def test_ack(self):



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