diff options
author | Ted Ross <tross@apache.org> | 2008-09-10 19:14:01 +0000 |
---|---|---|
committer | Ted Ross <tross@apache.org> | 2008-09-10 19:14:01 +0000 |
commit | 51ea054146d0af71640bd44e8e75494847216a31 (patch) | |
tree | f262995946ace31dbb3d3660db9df58e4f412ac3 /cpp | |
parent | 0b778c328001d25b3118450c0bfabb3e0b918971 (diff) | |
download | qpid-python-51ea054146d0af71640bd44e8e75494847216a31.tar.gz |
QPID-1279 Implementations of management methods can now return error strings along with its own error codes
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@693933 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/examples/qmf-agent/example.cpp | 4 | ||||
-rwxr-xr-x | cpp/managementgen/qmf/schema.py | 4 | ||||
-rw-r--r-- | cpp/managementgen/qmf/templates/Class.cpp | 5 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Bridge.cpp | 4 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Bridge.h | 4 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Broker.cpp | 5 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Broker.h | 4 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Connection.cpp | 2 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Connection.h | 2 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Exchange.cpp | 6 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Exchange.h | 5 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Link.cpp | 2 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Link.h | 4 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Queue.cpp | 3 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Queue.h | 2 | ||||
-rw-r--r-- | cpp/src/qpid/broker/SessionState.cpp | 3 | ||||
-rw-r--r-- | cpp/src/qpid/broker/SessionState.h | 2 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Vhost.h | 3 | ||||
-rw-r--r-- | cpp/src/qpid/management/Manageable.cpp | 8 | ||||
-rw-r--r-- | cpp/src/qpid/management/Manageable.h | 11 |
20 files changed, 42 insertions, 41 deletions
diff --git a/cpp/examples/qmf-agent/example.cpp b/cpp/examples/qmf-agent/example.cpp index c8d63a62b9..3422704d60 100644 --- a/cpp/examples/qmf-agent/example.cpp +++ b/cpp/examples/qmf-agent/example.cpp @@ -65,7 +65,7 @@ public: { return mgmtObject; } void doLoop(); - status_t ManagementMethod (uint32_t methodId, Args& args); + status_t ManagementMethod (uint32_t methodId, Args& args, string& text); }; class ChildClass : public Manageable @@ -116,7 +116,7 @@ void CoreClass::doLoop() } } -Manageable::status_t CoreClass::ManagementMethod(uint32_t methodId, Args& args) +Manageable::status_t CoreClass::ManagementMethod(uint32_t methodId, Args& args, string& /*text*/) { Mutex::ScopedLock _lock(vectorLock); diff --git a/cpp/managementgen/qmf/schema.py b/cpp/managementgen/qmf/schema.py index 9263c29543..26bad618f7 100755 --- a/cpp/managementgen/qmf/schema.py +++ b/cpp/managementgen/qmf/schema.py @@ -1004,9 +1004,9 @@ class SchemaClass: arg.name, "inBuf") + ";\n") stream.write (" status = coreObject->ManagementMethod (METHOD_" +\ - method.getName().upper() + ", ioArgs);\n") + method.getName().upper() + ", ioArgs, text);\n") stream.write (" outBuf.putLong (status);\n") - stream.write (" outBuf.putShortString (Manageable::StatusText (status));\n") + stream.write (" outBuf.putShortString (Manageable::StatusText (status, text));\n") for arg in method.args: if arg.getDir () == "O" or arg.getDir () == "IO": stream.write (" " +\ diff --git a/cpp/managementgen/qmf/templates/Class.cpp b/cpp/managementgen/qmf/templates/Class.cpp index 2a0e55b34d..018f325ff1 100644 --- a/cpp/managementgen/qmf/templates/Class.cpp +++ b/cpp/managementgen/qmf/templates/Class.cpp @@ -172,9 +172,10 @@ void /*MGEN:Class.NameCap*/::writeStatistics (Buffer& buf, bool skipHeaders) void /*MGEN:Class.NameCap*/::doMethod (/*MGEN:Class.DoMethodArgs*/) { Manageable::status_t status = Manageable::STATUS_UNKNOWN_METHOD; + std::string text; /*MGEN:Class.MethodHandlers*/ - outBuf.putLong (status); - outBuf.putShortString (Manageable::StatusText (status)); + outBuf.putLong(status); + outBuf.putShortString(Manageable::StatusText(status, text)); } /*MGEN:Class.EventMethodBodies*/ diff --git a/cpp/src/qpid/broker/Bridge.cpp b/cpp/src/qpid/broker/Bridge.cpp index 53bed020e2..6e8dd818e5 100644 --- a/cpp/src/qpid/broker/Bridge.cpp +++ b/cpp/src/qpid/broker/Bridge.cpp @@ -178,7 +178,9 @@ management::ManagementObject* Bridge::GetManagementObject (void) const return (management::ManagementObject*) mgmtObject; } -management::Manageable::status_t Bridge::ManagementMethod(uint32_t methodId, management::Args& /*args*/) +management::Manageable::status_t Bridge::ManagementMethod(uint32_t methodId, + management::Args& /*args*/, + string&) { if (methodId == management::Bridge::METHOD_CLOSE) { //notify that we are closed diff --git a/cpp/src/qpid/broker/Bridge.h b/cpp/src/qpid/broker/Bridge.h index 06fba25268..8286f080d5 100644 --- a/cpp/src/qpid/broker/Bridge.h +++ b/cpp/src/qpid/broker/Bridge.h @@ -54,7 +54,9 @@ public: bool isDurable() { return args.i_durable; } management::ManagementObject* GetManagementObject() const; - management::Manageable::status_t ManagementMethod(uint32_t methodId, management::Args& args); + management::Manageable::status_t ManagementMethod(uint32_t methodId, + management::Args& args, + std::string& text); // PersistableConfig: void setPersistenceId(uint64_t id) const; diff --git a/cpp/src/qpid/broker/Broker.cpp b/cpp/src/qpid/broker/Broker.cpp index 94a392b921..d07517fee2 100644 --- a/cpp/src/qpid/broker/Broker.cpp +++ b/cpp/src/qpid/broker/Broker.cpp @@ -321,7 +321,8 @@ Manageable* Broker::GetVhostObject(void) const } Manageable::status_t Broker::ManagementMethod (uint32_t methodId, - Args& args) + Args& args, + string&) { Manageable::status_t status = Manageable::STATUS_UNKNOWN_METHOD; @@ -332,7 +333,7 @@ Manageable::status_t Broker::ManagementMethod (uint32_t methodId, case management::Broker::METHOD_ECHO : status = Manageable::STATUS_OK; break; - case management::Broker::METHOD_CONNECT : { + case management::Broker::METHOD_CONNECT : { management::ArgsBrokerConnect& hp= dynamic_cast<management::ArgsBrokerConnect&>(args); diff --git a/cpp/src/qpid/broker/Broker.h b/cpp/src/qpid/broker/Broker.h index bd17d1bb00..5b701e8513 100644 --- a/cpp/src/qpid/broker/Broker.h +++ b/cpp/src/qpid/broker/Broker.h @@ -156,7 +156,9 @@ class Broker : public sys::Runnable, public Plugin::Target, management::ManagementObject* GetManagementObject (void) const; management::Manageable* GetVhostObject (void) const; - management::Manageable::status_t ManagementMethod (uint32_t methodId, management::Args& args); + management::Manageable::status_t ManagementMethod (uint32_t methodId, + management::Args& args, + std::string& text); /** Add to the broker's protocolFactorys */ void registerProtocolFactory(boost::shared_ptr<sys::ProtocolFactory>); diff --git a/cpp/src/qpid/broker/Connection.cpp b/cpp/src/qpid/broker/Connection.cpp index 8ed3ce84c8..4be831a9cb 100644 --- a/cpp/src/qpid/broker/Connection.cpp +++ b/cpp/src/qpid/broker/Connection.cpp @@ -222,7 +222,7 @@ ManagementObject* Connection::GetManagementObject(void) const return (ManagementObject*) mgmtObject; } -Manageable::status_t Connection::ManagementMethod(uint32_t methodId, Args&) +Manageable::status_t Connection::ManagementMethod(uint32_t methodId, Args&, string&) { Manageable::status_t status = Manageable::STATUS_UNKNOWN_METHOD; diff --git a/cpp/src/qpid/broker/Connection.h b/cpp/src/qpid/broker/Connection.h index 8c23e64edf..137a829f7f 100644 --- a/cpp/src/qpid/broker/Connection.h +++ b/cpp/src/qpid/broker/Connection.h @@ -83,7 +83,7 @@ class Connection : public sys::ConnectionInputHandler, // Manageable entry points management::ManagementObject* GetManagementObject (void) const; management::Manageable::status_t - ManagementMethod (uint32_t methodId, management::Args& args); + ManagementMethod (uint32_t methodId, management::Args& args, std::string&); void requestIOProcessing (boost::function0<void>); void recordFromServer (framing::AMQFrame& frame); diff --git a/cpp/src/qpid/broker/Exchange.cpp b/cpp/src/qpid/broker/Exchange.cpp index b40d6f9ed9..3c0f3b14e9 100644 --- a/cpp/src/qpid/broker/Exchange.cpp +++ b/cpp/src/qpid/broker/Exchange.cpp @@ -149,12 +149,6 @@ ManagementObject* Exchange::Binding::GetManagementObject () const return (ManagementObject*) mgmtBinding; } -Manageable::status_t Exchange::Binding::ManagementMethod (uint32_t, Args&) -{ - return Manageable::STATUS_UNKNOWN_METHOD; -} - - Exchange::MatchQueue::MatchQueue(Queue::shared_ptr q) : queue(q) {} bool Exchange::MatchQueue::operator()(Exchange::Binding::shared_ptr b) diff --git a/cpp/src/qpid/broker/Exchange.h b/cpp/src/qpid/broker/Exchange.h index 2e3b5ba13a..4f46741bfe 100644 --- a/cpp/src/qpid/broker/Exchange.h +++ b/cpp/src/qpid/broker/Exchange.h @@ -60,7 +60,6 @@ namespace qpid { framing::FieldTable args = framing::FieldTable ()); ~Binding (); management::ManagementObject* GetManagementObject () const; - management::Manageable::status_t ManagementMethod (uint32_t methodId, management::Args& args); }; struct MatchQueue { @@ -104,9 +103,7 @@ namespace qpid { static Exchange::shared_ptr decode(ExchangeRegistry& exchanges, framing::Buffer& buffer); // Manageable entry points - management::ManagementObject* GetManagementObject (void) const; - management::Manageable::status_t - ManagementMethod (uint32_t, management::Args&) { return management::Manageable::STATUS_UNKNOWN_METHOD; } + management::ManagementObject* GetManagementObject(void) const; }; } } diff --git a/cpp/src/qpid/broker/Link.cpp b/cpp/src/qpid/broker/Link.cpp index 05b759f695..a53bf9e983 100644 --- a/cpp/src/qpid/broker/Link.cpp +++ b/cpp/src/qpid/broker/Link.cpp @@ -324,7 +324,7 @@ ManagementObject* Link::GetManagementObject (void) const return (ManagementObject*) mgmtObject; } -Manageable::status_t Link::ManagementMethod (uint32_t op, management::Args& args) +Manageable::status_t Link::ManagementMethod (uint32_t op, management::Args& args, string&) { switch (op) { diff --git a/cpp/src/qpid/broker/Link.h b/cpp/src/qpid/broker/Link.h index d425c49800..0422141ec7 100644 --- a/cpp/src/qpid/broker/Link.h +++ b/cpp/src/qpid/broker/Link.h @@ -123,8 +123,8 @@ namespace qpid { static Link::shared_ptr decode(LinkRegistry& links, framing::Buffer& buffer); // Manageable entry points - management::ManagementObject* GetManagementObject (void) const; - management::Manageable::status_t ManagementMethod (uint32_t, management::Args&); + management::ManagementObject* GetManagementObject(void) const; + management::Manageable::status_t ManagementMethod(uint32_t, management::Args&, std::string&); }; } } diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp index 4b94cd32b0..2dbaef1b13 100644 --- a/cpp/src/qpid/broker/Queue.cpp +++ b/cpp/src/qpid/broker/Queue.cpp @@ -724,8 +724,7 @@ ManagementObject* Queue::GetManagementObject (void) const return (ManagementObject*) mgmtObject; } -Manageable::status_t Queue::ManagementMethod (uint32_t methodId, - Args& args) +Manageable::status_t Queue::ManagementMethod (uint32_t methodId, Args& args, string&) { Manageable::status_t status = Manageable::STATUS_UNKNOWN_METHOD; diff --git a/cpp/src/qpid/broker/Queue.h b/cpp/src/qpid/broker/Queue.h index 274a29e9eb..1cf33b665f 100644 --- a/cpp/src/qpid/broker/Queue.h +++ b/cpp/src/qpid/broker/Queue.h @@ -207,7 +207,7 @@ namespace qpid { // Manageable entry points management::ManagementObject* GetManagementObject (void) const; management::Manageable::status_t - ManagementMethod (uint32_t methodId, management::Args& args); + ManagementMethod (uint32_t methodId, management::Args& args, std::string& text); /** Apply f to each Message on the queue. */ template <class F> void eachMessage(const F& f) const { diff --git a/cpp/src/qpid/broker/SessionState.cpp b/cpp/src/qpid/broker/SessionState.cpp index 42f6b78521..913188845f 100644 --- a/cpp/src/qpid/broker/SessionState.cpp +++ b/cpp/src/qpid/broker/SessionState.cpp @@ -122,7 +122,8 @@ ManagementObject* SessionState::GetManagementObject (void) const } Manageable::status_t SessionState::ManagementMethod (uint32_t methodId, - Args& /*args*/) + Args& /*args*/, + string& /*text*/) { Manageable::status_t status = Manageable::STATUS_UNKNOWN_METHOD; diff --git a/cpp/src/qpid/broker/SessionState.h b/cpp/src/qpid/broker/SessionState.h index d72d1974c2..83d79a617d 100644 --- a/cpp/src/qpid/broker/SessionState.h +++ b/cpp/src/qpid/broker/SessionState.h @@ -96,7 +96,7 @@ class SessionState : public qpid::SessionState, // Manageable entry points management::ManagementObject* GetManagementObject (void) const; management::Manageable::status_t - ManagementMethod (uint32_t methodId, management::Args& args); + ManagementMethod (uint32_t methodId, management::Args& args, std::string&); void readyToSend(); diff --git a/cpp/src/qpid/broker/Vhost.h b/cpp/src/qpid/broker/Vhost.h index e56cc61272..bdc64e71be 100644 --- a/cpp/src/qpid/broker/Vhost.h +++ b/cpp/src/qpid/broker/Vhost.h @@ -41,9 +41,6 @@ class Vhost : public management::Manageable management::ManagementObject* GetManagementObject (void) const { return mgmtObject; } - - management::Manageable::status_t ManagementMethod (uint32_t, management::Args&) - { return management::Manageable::STATUS_OK; } }; }} diff --git a/cpp/src/qpid/management/Manageable.cpp b/cpp/src/qpid/management/Manageable.cpp index 19fba87fde..08bb541fc7 100644 --- a/cpp/src/qpid/management/Manageable.cpp +++ b/cpp/src/qpid/management/Manageable.cpp @@ -20,9 +20,13 @@ #include "Manageable.h" using namespace qpid::management; +using std::string; -std::string Manageable::StatusText (status_t status) +string Manageable::StatusText (status_t status, string text) { + if ((status & STATUS_USER) == STATUS_USER) + return text; + switch (status) { case STATUS_OK : return "OK"; @@ -37,7 +41,7 @@ std::string Manageable::StatusText (status_t status) return "??"; } -Manageable::status_t Manageable::ManagementMethod (uint32_t, Args&) +Manageable::status_t Manageable::ManagementMethod (uint32_t, Args&, std::string&) { return STATUS_UNKNOWN_METHOD; } diff --git a/cpp/src/qpid/management/Manageable.h b/cpp/src/qpid/management/Manageable.h index 4e2f33b625..afa5c968f7 100644 --- a/cpp/src/qpid/management/Manageable.h +++ b/cpp/src/qpid/management/Manageable.h @@ -31,12 +31,12 @@ class Manageable { public: - virtual ~Manageable (void) = 0; + virtual ~Manageable(void) = 0; // status_t is a type used to pass completion status from the method handler. // typedef uint32_t status_t; - static std::string StatusText (status_t status); + static std::string StatusText(status_t status, std::string text = std::string()); static const status_t STATUS_OK = 0; static const status_t STATUS_UNKNOWN_OBJECT = 1; @@ -45,6 +45,7 @@ class Manageable static const status_t STATUS_INVALID_PARAMETER = 4; static const status_t STATUS_FEATURE_NOT_IMPLEMENTED = 5; static const status_t STATUS_FORBIDDEN = 6; + static const status_t STATUS_USER = 0x00010000; // Every "Manageable" object must hold a reference to exactly one // management object. This object is always of a class derived from @@ -52,17 +53,17 @@ class Manageable // // This accessor function returns a pointer to the management object. // - virtual ManagementObject* GetManagementObject (void) const = 0; + virtual ManagementObject* GetManagementObject(void) const = 0; // Every "Manageable" object must implement ManagementMethod. This // function is called when a remote management client invokes a method // on this object. The input and output arguments are specific to the // method being called and must be down-cast to the appropriate sub class // before use. - virtual status_t ManagementMethod (uint32_t methodId, Args& args); + virtual status_t ManagementMethod(uint32_t methodId, Args& args, std::string& text); }; -inline Manageable::~Manageable (void) {} +inline Manageable::~Manageable(void) {} }} |