From a49decc7d56bdb704a5d1580058c0da57e9a9353 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Tue, 22 Jun 2010 13:29:52 +0000 Subject: Fix cluster broker crashes when management is active. Cluser brokers were exiting with errors "modified cluster state outside cluster context" and "confirmed < (50+0) but only sent < (49+0)" Fix was to: - delay completion of incoming update till update connection closes. - delay addding new connections to managment until connection is announced. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@956882 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/management/ManagementAgent.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'cpp/src/qpid/management') diff --git a/cpp/src/qpid/management/ManagementAgent.cpp b/cpp/src/qpid/management/ManagementAgent.cpp index b1c27804db..8818a4c3ac 100644 --- a/cpp/src/qpid/management/ManagementAgent.cpp +++ b/cpp/src/qpid/management/ManagementAgent.cpp @@ -2321,6 +2321,23 @@ void ManagementAgent::importAgents(qpid::framing::Buffer& inBuf) { } } +namespace { +bool isNotDeleted(const ManagementObjectMap::value_type& value) { + return !value.second->isDeleted(); +} + +size_t countNotDeleted(const ManagementObjectMap& map) { + return std::count_if(map.begin(), map.end(), isNotDeleted); +} + +void dumpMap(std::ostream& o, const ManagementObjectMap& map) { + for (ManagementObjectMap::const_iterator i = map.begin(); i != map.end(); ++i) { + if (!i->second->isDeleted()) + o << endl << " " << i->second->getObjectId().getV2Key(); + } +} +} // namespace + string ManagementAgent::debugSnapshot() { ostringstream msg; msg << " management snapshot:"; @@ -2328,8 +2345,8 @@ string ManagementAgent::debugSnapshot() { i != remoteAgents.end(); ++i) msg << " " << i->second->routingKey; msg << " packages: " << packages.size(); - msg << " objects: " << managementObjects.size(); - msg << " new objects: " << newManagementObjects.size(); + msg << " objects: " << countNotDeleted(managementObjects); + msg << " new objects: " << countNotDeleted(newManagementObjects); return msg.str(); } -- cgit v1.2.1