You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Pavel Moravec (JIRA)" <ji...@apache.org> on 2012/08/07 15:35:08 UTC

[jira] [Commented] (QPID-4177) Writing wrong filter in a QMF method causes the filter is ignored

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

Pavel Moravec commented on QPID-4177:
-------------------------------------

Preliminary patch that does not resolve adjacent problem when 0 messages matching a filter cause "invalid parameter" error, though the filter is a valid parameter:


diff -rup _qpid-0.14-orig/cpp/src/qpid/broker/Queue.cpp _qpid-0.14-new/cpp/src/qpid/broker/Queue.cpp
--- _qpid-0.14-orig/cpp/src/qpid/broker/Queue.cpp	2012-08-01 20:03:04.337170947 +0200
+++ _qpid-0.14-new/cpp/src/qpid/broker/Queue.cpp	2012-08-07 14:17:38.705071078 +0200
@@ -623,6 +623,8 @@ uint32_t Queue::purge(const uint32_t pur
                       const qpid::types::Variant::Map *filter)
 {
     std::auto_ptr<MessageFilter> mf(MessageFilter::create(filter));
+    if (typeid(*mf.get()) == typeid(MessageFilter))
+        return 0;
     Collector c(*mf.get(), purge_request);
 
     Mutex::ScopedLock locker(messageLock);
@@ -646,6 +648,8 @@ uint32_t Queue::move(const Queue::shared
                      const qpid::types::Variant::Map *filter)
 {
     std::auto_ptr<MessageFilter> mf(MessageFilter::create(filter));
+    if (typeid(*mf.get()) == typeid(MessageFilter))
+        return 0;
     Collector c(*mf.get(), qty);
 
     Mutex::ScopedLock locker(messageLock);
@@ -1295,8 +1299,12 @@ Manageable::status_t Queue::ManagementMe
     case _qmf::Queue::METHOD_PURGE :
         {
             _qmf::ArgsQueuePurge& purgeArgs = (_qmf::ArgsQueuePurge&) args;
-            purge(purgeArgs.i_request, boost::shared_ptr<Exchange>(), &purgeArgs.i_filter);
-            status = Manageable::STATUS_OK;
+            if (purge(purgeArgs.i_request, boost::shared_ptr<Exchange>(), &purgeArgs.i_filter))
+                status = Manageable::STATUS_OK;
+	    else {
+	        status = Manageable::STATUS_PARAMETER_INVALID;
+	        etext = "Wrong filter syntax";
+	    }
         }
         break;
 
@@ -1316,8 +1324,12 @@ Manageable::status_t Queue::ManagementMe
                 }
             }
 
-            purge(rerouteArgs.i_request, dest, &rerouteArgs.i_filter);
-            status = Manageable::STATUS_OK;
+            if (purge(rerouteArgs.i_request, dest, &rerouteArgs.i_filter))
+                status = Manageable::STATUS_OK;
+	    else {
+	        status = Manageable::STATUS_PARAMETER_INVALID;
+		etext = "Wrong filter syntax";
+	    }
         }
         break;
     }

                
> Writing wrong filter in a QMF method causes the filter is ignored
> -----------------------------------------------------------------
>
>                 Key: QPID-4177
>                 URL: https://issues.apache.org/jira/browse/QPID-4177
>             Project: Qpid
>          Issue Type: Bug
>          Components: Qpid Managment Framework
>    Affects Versions: 0.14
>            Reporter: Pavel Moravec
>            Assignee: Ted Ross
>            Priority: Minor
>
> Invoking e.g. method for moving messages from a queue to another with an invalid filter like:
> (in qpid-tool)
> call 120 queueMoveMessages SrcQueue DstQueue 0 {'qpid.subject':'key2'}
> will produce an error in qpidd log:
> 2012-07-31 11:50:14 error Ignoring unrecognized message filter: '{qpid.subject:key2}'
> but the messages are moved from SrcQueue to DstQueue. So having an invalid filter in a QMF method raises an error log but otherwise the filter is ignored and method applied. And the method returns zero as usual.
> The correct way would be not performing the method, as invalid parameter has been supplied.
> See http://qpid.2158936.n2.nabble.com/Writing-wrong-filter-in-a-QMF-method-causes-the-filter-is-ignored-td7580393.html#none for a discussion on the topic.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

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