Author: kpvdr
Date: Thu Apr  3 05:41:40 2008
New Revision: 644287

URL: http://svn.apache.org/viewvc?rev=644287&view=rev
Log:
Patch from Ted Ross (see QPID-893): This patch enables management of plugged-in 
store modules.

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/PersistableQueue.h
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h
    incubator/qpid/trunk/qpid/cpp/src/qpid/management/Manageable.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/management/Manageable.h
    incubator/qpid/trunk/qpid/specs/management-schema.xml

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/PersistableQueue.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/PersistableQueue.h?rev=644287&r1=644286&r2=644287&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/PersistableQueue.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/PersistableQueue.h Thu Apr  3 
05:41:40 2008
@@ -24,6 +24,7 @@
 
 #include <string>
 #include "Persistable.h"
+#include "qpid/management/Manageable.h"
 #include <boost/shared_ptr.hpp>
 
 namespace qpid {
@@ -35,7 +36,7 @@
 * persistableQueue
 */
 
-class ExternalQueueStore
+class ExternalQueueStore : public management::Manageable
 {
 public:
     virtual ~ExternalQueueStore() {};
@@ -58,11 +59,7 @@
              delete externalQueueStore;
     };
 
-    inline void setExternalQueueStore(ExternalQueueStore* inst){
-        if (externalQueueStore!=inst && externalQueueStore) 
-             delete externalQueueStore; 
-        externalQueueStore = inst;
-    };
+    virtual void setExternalQueueStore(ExternalQueueStore* inst) = 0;
     
     inline ExternalQueueStore* getExternalQueueStore() const {return 
externalQueueStore;};
     

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp?rev=644287&r1=644286&r2=644287&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Thu Apr  3 05:41:40 
2008
@@ -632,6 +632,18 @@
     return exclusive; 
 }
 
+void Queue::setExternalQueueStore(ExternalQueueStore* inst) {
+    if (externalQueueStore!=inst && externalQueueStore) 
+        delete externalQueueStore; 
+    externalQueueStore = inst;
+
+    if (inst) {
+        ManagementObject::shared_ptr childObj = inst->GetManagementObject();
+        if (childObj.get() != 0)
+            mgmtObject->set_storeRef(childObj->getObjectId());
+    }
+}
+
 ManagementObject::shared_ptr Queue::GetManagementObject (void) const
 {
     return dynamic_pointer_cast<ManagementObject> (mgmtObject);

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h?rev=644287&r1=644286&r2=644287&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.h Thu Apr  3 05:41:40 
2008
@@ -60,7 +60,8 @@
          * registered consumers or be stored until dequeued or until one
          * or more consumers registers.
          */
-        class Queue : public boost::enable_shared_from_this<Queue>, public 
PersistableQueue, public management::Manageable {
+        class Queue : public boost::enable_shared_from_this<Queue>,
+            public PersistableQueue, public management::Manageable {
             typedef std::set<Consumer*> Listeners;
             typedef std::deque<QueuedMessage> Messages;
 
@@ -106,7 +107,7 @@
             Queue(const string& name, bool autodelete = false, 
                   MessageStore* const store = 0, 
                   const OwnershipToken* const owner = 0,
-                  Manageable* parent = 0);
+                  management::Manageable* parent = 0);
             ~Queue();
 
             bool dispatch(Consumer&);
@@ -182,6 +183,8 @@
 
             static Queue::shared_ptr decode(QueueRegistry& queues, 
framing::Buffer& buffer);
             static void tryAutoDelete(Broker& broker, Queue::shared_ptr);
+
+            virtual void setExternalQueueStore(ExternalQueueStore* inst);
 
             // Manageable entry points
             management::ManagementObject::shared_ptr GetManagementObject 
(void) const;

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/management/Manageable.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/management/Manageable.cpp?rev=644287&r1=644286&r2=644287&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/management/Manageable.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/management/Manageable.cpp Thu Apr  3 
05:41:40 2008
@@ -29,6 +29,7 @@
     case STATUS_UNKNOWN_OBJECT  : return "UnknownObject";
     case STATUS_UNKNOWN_METHOD  : return "UnknownMethod";
     case STATUS_NOT_IMPLEMENTED : return "NotImplemented";
+    case STATUS_INVALID_PARAMETER : return "InvalidParameter";
     }
 
     return "??";

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/management/Manageable.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/management/Manageable.h?rev=644287&r1=644286&r2=644287&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/management/Manageable.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/management/Manageable.h Thu Apr  3 
05:41:40 2008
@@ -39,10 +39,11 @@
     typedef uint32_t status_t;
     static std::string StatusText (status_t status);
 
-    static const status_t STATUS_OK              = 0;
-    static const status_t STATUS_UNKNOWN_OBJECT  = 1;
-    static const status_t STATUS_UNKNOWN_METHOD  = 2;
-    static const status_t STATUS_NOT_IMPLEMENTED = 3;
+    static const status_t STATUS_OK                = 0;
+    static const status_t STATUS_UNKNOWN_OBJECT    = 1;
+    static const status_t STATUS_UNKNOWN_METHOD    = 2;
+    static const status_t STATUS_NOT_IMPLEMENTED   = 3;
+    static const status_t STATUS_INVALID_PARAMETER = 4;
 
     //  Every "Manageable" object must hold a reference to exactly one
     //  management object.  This object is always of a class derived from

Modified: incubator/qpid/trunk/qpid/specs/management-schema.xml
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/specs/management-schema.xml?rev=644287&r1=644286&r2=644287&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/specs/management-schema.xml (original)
+++ incubator/qpid/trunk/qpid/specs/management-schema.xml Thu Apr  3 05:41:40 
2008
@@ -122,6 +122,7 @@
     <configElement name="durable"         type="bool"   access="RC"/>
     <configElement name="autoDelete"      type="bool"   access="RC"/>
     <configElement name="exclusive"       type="bool"   access="RC"/>
+    <configElement name="storeRef"        type="objId"  access="RO" 
desc="Reference to persistent queue (if durable)"/>
 
     <instElement name="msgTotalEnqueues"    type="count64" unit="message"     
desc="Total messages enqueued"/>
     <instElement name="msgTotalDequeues"    type="count64" unit="message"     
desc="Total messages dequeued"/>


Reply via email to