summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Anthony Giusti <kgiusti@apache.org>2010-03-26 21:03:31 +0000
committerKenneth Anthony Giusti <kgiusti@apache.org>2010-03-26 21:03:31 +0000
commitc614014627bec840f754b964a42c01cf140cb611 (patch)
treec2e66f5de2c7bb53aeb0ac9ad40a27ec73182aa9
parentb35a5177786f7a4bb9642f9bcff60f17f1065370 (diff)
downloadqpid-python-c614014627bec840f754b964a42c01cf140cb611.tar.gz
qmf v1 tests pass
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/qmf-devel0.7a@928059 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/include/qpid/management/ManagementObject.h7
-rw-r--r--qpid/cpp/src/qpid/management/ManagementAgent.cpp37
-rw-r--r--qpid/cpp/src/qpid/management/ManagementObject.cpp32
-rw-r--r--qpid/cpp/src/tests/ManagementTest.cpp8
4 files changed, 53 insertions, 31 deletions
diff --git a/qpid/cpp/include/qpid/management/ManagementObject.h b/qpid/cpp/include/qpid/management/ManagementObject.h
index 130b0b2f07..98ef886cd1 100644
--- a/qpid/cpp/include/qpid/management/ManagementObject.h
+++ b/qpid/cpp/include/qpid/management/ManagementObject.h
@@ -53,18 +53,21 @@ class ObjectId {
protected:
const AgentAttachment* agent;
uint64_t first;
+ uint64_t second;
uint64_t agentEpoch;
std::string v2Key;
std::string agentName;
void fromString(const std::string&);
public:
- QPID_COMMON_EXTERN ObjectId() : agent(0), first(0) {}
+ QPID_COMMON_EXTERN ObjectId() : agent(0), first(0), second(0), agentEpoch(0) {}
QPID_COMMON_EXTERN ObjectId(const messaging::Variant& map) :
- agent(0), first(0), agentEpoch(0) { mapDecode(map.asMap()); }
+ agent(0), first(0), second(0), agentEpoch(0) { mapDecode(map.asMap()); }
QPID_COMMON_EXTERN ObjectId(uint8_t flags, uint16_t seq, uint32_t broker);
QPID_COMMON_EXTERN ObjectId(AgentAttachment* _agent, uint8_t flags, uint16_t seq);
QPID_COMMON_EXTERN ObjectId(std::istream&);
QPID_COMMON_EXTERN ObjectId(const std::string&);
+ // Deprecated:
+ QPID_COMMON_EXTERN ObjectId(uint8_t flags, uint16_t seq, uint32_t broker, uint64_t object);
QPID_COMMON_EXTERN bool operator==(const ObjectId &other) const;
QPID_COMMON_EXTERN bool operator<(const ObjectId &other) const;
QPID_COMMON_EXTERN void mapEncode(messaging::VariantMap& map) const;
diff --git a/qpid/cpp/src/qpid/management/ManagementAgent.cpp b/qpid/cpp/src/qpid/management/ManagementAgent.cpp
index 10c16a39f0..1ee5671c6d 100644
--- a/qpid/cpp/src/qpid/management/ManagementAgent.cpp
+++ b/qpid/cpp/src/qpid/management/ManagementAgent.cpp
@@ -221,11 +221,42 @@ void ManagementAgent::registerEvent (const string& packageName,
addClassLH(ManagementItem::CLASS_KIND_EVENT, pIter, eventName, md5Sum, schemaCall);
}
-// Deprecated:
+// Deprecated: V1 objects
ObjectId ManagementAgent::addObject(ManagementObject* object, uint64_t persistId)
{
- // always force object to generate key string
- return addObject(object, std::string(), persistId != 0);
+ uint16_t sequence;
+ uint64_t objectNum;
+
+ if (persistId == 0) {
+ sequence = bootSequence;
+ objectNum = nextObjectId++;
+ } else {
+ sequence = 0;
+ objectNum = persistId;
+ }
+
+ ObjectId objId(0 /*flags*/, sequence, brokerBank, objectNum);
+ objId.setV2Key(*object); // let object generate the v2 key
+
+ object->setObjectId(objId);
+
+ {
+ Mutex::ScopedLock lock (addLock);
+ ManagementObjectMap::iterator destIter = newManagementObjects.find(objId);
+ if (destIter != newManagementObjects.end()) {
+ if (destIter->second->isDeleted()) {
+ newDeletedManagementObjects.push_back(destIter->second);
+ newManagementObjects.erase(destIter);
+ } else {
+ QPID_LOG(error, "ObjectId collision in addObject. class=" << object->getClassName() <<
+ " key=" << objId.getV2Key());
+ return objId;
+ }
+ }
+ newManagementObjects[objId] = object;
+ }
+
+ return objId;
}
diff --git a/qpid/cpp/src/qpid/management/ManagementObject.cpp b/qpid/cpp/src/qpid/management/ManagementObject.cpp
index 9d6ff8dfb9..183763a417 100644
--- a/qpid/cpp/src/qpid/management/ManagementObject.cpp
+++ b/qpid/cpp/src/qpid/management/ManagementObject.cpp
@@ -39,22 +39,20 @@ void AgentAttachment::setBanks(uint32_t broker, uint32_t bank)
((uint64_t) (bank & 0x0fffffff));
}
-#if 0
// Deprecated
-ObjectId::ObjectId(uint8_t flags, uint16_t seq, uint32_t broker, uint32_t bank, uint64_t object)
- : agent(0)
+ObjectId::ObjectId(uint8_t flags, uint16_t seq, uint32_t broker, uint64_t object)
+ : agent(0), agentEpoch(seq)
{
first =
((uint64_t) (flags & 0x0f)) << 60 |
((uint64_t) (seq & 0x0fff)) << 48 |
- ((uint64_t) (broker & 0x000fffff)) << 28 |
- ((uint64_t) (bank & 0x0fffffff));
+ ((uint64_t) (broker & 0x000fffff)) << 28;
second = object;
}
-#endif
+
ObjectId::ObjectId(uint8_t flags, uint16_t seq, uint32_t broker)
- : agent(0), agentEpoch(seq)
+ : agent(0), second(0), agentEpoch(seq)
{
first =
((uint64_t) (flags & 0x0f)) << 60 |
@@ -63,7 +61,7 @@ ObjectId::ObjectId(uint8_t flags, uint16_t seq, uint32_t broker)
}
ObjectId::ObjectId(AgentAttachment* _agent, uint8_t flags, uint16_t seq)
- : agent(_agent), agentEpoch(seq)
+ : agent(_agent), second(0), agentEpoch(seq)
{
first =
@@ -93,7 +91,7 @@ void ObjectId::fromString(const std::string& text)
// format:
// V1: <flags>-<sequence>-<broker-bank>-<agent-bank>-<uint64-app-id>
- // V2: <flags>-<epoch>-<1>-<agent-name>-<str-app-id>
+ // V2: Not used
std::string copy(text.c_str());
char* cText;
@@ -126,7 +124,7 @@ void ObjectId::fromString(const std::string& text)
(atoll(field[2]) << 28);
agentName = std::string(field[3]);
- v2Key = std::string(field[4]);
+ second = atoll(field[4]);
}
@@ -143,13 +141,12 @@ bool ObjectId::operator<(const ObjectId &other) const
bool ObjectId::equalV1(const ObjectId &other) const
{
uint64_t otherFirst = agent == 0 ? other.first : other.first & 0xffff000000000000LL;
- return first == otherFirst && v2Key == other.v2Key;
+ return first == otherFirst && second == other.second;
}
// encode as V1-format binary
void ObjectId::encode(std::string& buffer) const
{
- uint64_t second;
const uint32_t len = 16;
char _data[len];
qpid::framing::Buffer body(_data, len);
@@ -158,14 +155,6 @@ void ObjectId::encode(std::string& buffer) const
body.putLongLong(first);
else
body.putLongLong(first | agent->first);
-
- try {
- second = boost::lexical_cast<uint64_t>(v2Key);
- } catch(const boost::bad_lexical_cast&) {
- second = 0;
- QPID_LOG(error, "Badly formatted QMF Object Id v2Key:" << v2Key);
- }
-
body.putLongLong(second);
body.reset();
@@ -175,7 +164,6 @@ void ObjectId::encode(std::string& buffer) const
// decode as V1-format binary
void ObjectId::decode(const std::string& buffer)
{
- uint64_t second;
const uint32_t len = 16;
char _data[len];
qpid::framing::Buffer body(_data, len);
@@ -252,7 +240,7 @@ std::ostream& operator<<(std::ostream& out, const ObjectId& i)
"-" << ((virtFirst & 0x0FFF000000000000LL) >> 48) <<
"-" << ((virtFirst & 0x0000FFFFF0000000LL) >> 28) <<
"-" << i.agentName <<
- "-" << i.v2Key;
+ "-" << i.second;
return out;
}
diff --git a/qpid/cpp/src/tests/ManagementTest.cpp b/qpid/cpp/src/tests/ManagementTest.cpp
index d0141f796f..58497eefcd 100644
--- a/qpid/cpp/src/tests/ManagementTest.cpp
+++ b/qpid/cpp/src/tests/ManagementTest.cpp
@@ -58,14 +58,14 @@ QPID_AUTO_TEST_CASE(testObjectIdSerializeString) {
QPID_AUTO_TEST_CASE(testObjectIdEncode) {
qpid::messaging::Variant::Map oidMap;
- ObjectId oid(1, 2, 3);
+ ObjectId oid(1, 2, 3, 9999);
oid.setV2Key("testkey");
oid.setAgentName("myAgent");
std::stringstream out1;
out1 << oid;
- BOOST_CHECK_EQUAL(out1.str(), "1-2-3-myAgent-testkey");
+ BOOST_CHECK_EQUAL(out1.str(), "1-2-3-myAgent-9999");
}
QPID_AUTO_TEST_CASE(testObjectIdAttach) {
@@ -77,13 +77,13 @@ QPID_AUTO_TEST_CASE(testObjectIdAttach) {
std::stringstream out1;
out1 << oid;
- BOOST_CHECK_EQUAL(out1.str(), "10-20-0-MrSmith-GabbaGabbaHey");
+ BOOST_CHECK_EQUAL(out1.str(), "10-20-0-MrSmith-0");
agent.setBanks(30, 40);
std::stringstream out2;
out2 << oid;
- BOOST_CHECK_EQUAL(out2.str(), "10-20-30-MrSmith-GabbaGabbaHey");
+ BOOST_CHECK_EQUAL(out2.str(), "10-20-30-MrSmith-0");
}
QPID_AUTO_TEST_CASE(testConsoleObjectId) {