diff options
author | Benoit Foucher <benoit@zeroc.com> | 2012-09-13 15:33:46 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2012-09-13 15:33:46 +0200 |
commit | 0ed3e3fff565b80f84ec7e23d821fd30fac89b86 (patch) | |
tree | c9f4157f23727413b34d33f12f67e891879d3a77 /cpp/src/Ice/PropertiesAdminI.cpp | |
parent | Merge remote-tracking branch 'origin/mx' into mx (diff) | |
download | ice-0ed3e3fff565b80f84ec7e23d821fd30fac89b86.tar.bz2 ice-0ed3e3fff565b80f84ec7e23d821fd30fac89b86.tar.xz ice-0ed3e3fff565b80f84ec7e23d821fd30fac89b86.zip |
Added Ice/metrics test
Diffstat (limited to 'cpp/src/Ice/PropertiesAdminI.cpp')
-rw-r--r-- | cpp/src/Ice/PropertiesAdminI.cpp | 179 |
1 files changed, 89 insertions, 90 deletions
diff --git a/cpp/src/Ice/PropertiesAdminI.cpp b/cpp/src/Ice/PropertiesAdminI.cpp index 898f0414f13..64d55718568 100644 --- a/cpp/src/Ice/PropertiesAdminI.cpp +++ b/cpp/src/Ice/PropertiesAdminI.cpp @@ -24,14 +24,14 @@ Ice::PropertiesAdminI::PropertiesAdminI(const string& name, const PropertiesPtr& string Ice::PropertiesAdminI::getProperty(const string& name, const Ice::Current&) { - IceUtil::Mutex::Lock sync(*this); + Lock sync(*this); return _properties->getProperty(name); } Ice::PropertyDict Ice::PropertiesAdminI::getPropertiesForPrefix(const string& prefix, const Ice::Current&) { - IceUtil::Mutex::Lock sync(*this); + Lock sync(*this); return _properties->getPropertiesForPrefix(prefix); } @@ -39,122 +39,117 @@ void Ice::PropertiesAdminI::setProperties_async(const AMD_PropertiesAdmin_setPropertiesPtr& cb, const PropertyDict& props, const Ice::Current&) { + Lock sync(*this); + + PropertyDict old = _properties->getPropertiesForPrefix(""); + PropertyDict::const_iterator p; + const int traceLevel = _properties->getPropertyAsInt("Ice.Trace.Admin.Properties"); + + // + // Compute the difference between the new property set and the existing property set: + // + // 1) Any properties in the new set that were not defined in the existing set. + // + // 2) Any properties that appear in both sets but with different values. + // + // 3) Any properties not present in the new set but present in the existing set. + // In other words, the property has been removed. + // PropertyDict added, changed, removed; - vector<PropertiesAdminUpdateCallbackPtr> callbacks; + for(p = props.begin(); p != props.end(); ++p) { - IceUtil::Mutex::Lock sync(*this); - - PropertyDict old = _properties->getPropertiesForPrefix(""); - PropertyDict::const_iterator p; - const int traceLevel = _properties->getPropertyAsInt("Ice.Trace.Admin.Properties"); - - // - // Compute the difference between the new property set and the existing property set: - // - // 1) Any properties in the new set that were not defined in the existing set. - // - // 2) Any properties that appear in both sets but with different values. - // - // 3) Any properties not present in the new set but present in the existing set. - // In other words, the property has been removed. - // - for(p = props.begin(); p != props.end(); ++p) + PropertyDict::iterator q = old.find(p->first); + if(q == old.end()) { - PropertyDict::iterator q = old.find(p->first); - if(q == old.end()) + if(!p->second.empty()) { - if(!p->second.empty()) + // + // This property is new. + // + added.insert(*p); + } + } + else + { + if(p->second != q->second) + { + if(p->second.empty()) { // - // This property is new. + // This property was removed. // - added.insert(*p); + removed.insert(*p); } - } - else - { - if(p->second != q->second) + else { - if(p->second.empty()) - { - // - // This property was removed. - // - removed.insert(*p); - } - else - { - // - // This property has changed. - // - changed.insert(*p); - } + // + // This property has changed. + // + changed.insert(*p); } } } - - if(traceLevel > 0 && (!added.empty() || !changed.empty() || !removed.empty())) + } + + if(traceLevel > 0 && (!added.empty() || !changed.empty() || !removed.empty())) + { + Trace out(_logger, _name); + + out << "Summary of property changes"; + + if(!added.empty()) { - Trace out(_logger, _name); - - out << "Summary of property changes"; - - if(!added.empty()) + out << "\nNew properties:"; + for(p = added.begin(); p != added.end(); ++p) { - out << "\nNew properties:"; - for(p = added.begin(); p != added.end(); ++p) + out << "\n " << p->first; + if(traceLevel > 1) { - out << "\n " << p->first; - if(traceLevel > 1) - { - out << " = " << p->second; - } + out << " = " << p->second; } } + } - if(!changed.empty()) + if(!changed.empty()) + { + out << "\nChanged properties:"; + for(p = changed.begin(); p != changed.end(); ++p) { - out << "\nChanged properties:"; - for(p = changed.begin(); p != changed.end(); ++p) + out << "\n " << p->first; + if(traceLevel > 1) { - out << "\n " << p->first; - if(traceLevel > 1) - { - out << " = " << p->second << " (old value = " << _properties->getProperty(p->first) << ")"; - } + out << " = " << p->second << " (old value = " << _properties->getProperty(p->first) << ")"; } } + } - if(!removed.empty()) + if(!removed.empty()) + { + out << "\nRemoved properties:"; + for(p = removed.begin(); p != removed.end(); ++p) { - out << "\nRemoved properties:"; - for(p = removed.begin(); p != removed.end(); ++p) - { - out << "\n " << p->first; - } + out << "\n " << p->first; } } + } - // - // Update the property set. - // - - for(p = added.begin(); p != added.end(); ++p) - { - _properties->setProperty(p->first, p->second); - } + // + // Update the property set. + // - for(p = changed.begin(); p != changed.end(); ++p) - { - _properties->setProperty(p->first, p->second); - } + for(p = added.begin(); p != added.end(); ++p) + { + _properties->setProperty(p->first, p->second); + } - for(p = removed.begin(); p != removed.end(); ++p) - { - _properties->setProperty(p->first, ""); - } + for(p = changed.begin(); p != changed.end(); ++p) + { + _properties->setProperty(p->first, p->second); + } - callbacks = _updateCallbacks; + for(p = removed.begin(); p != removed.end(); ++p) + { + _properties->setProperty(p->first, ""); } // @@ -163,6 +158,10 @@ Ice::PropertiesAdminI::setProperties_async(const AMD_PropertiesAdmin_setProperti // cb->ice_response(); + // + // Copy the callbacks to allow callbacks to update the callbacks. + // + vector<PropertiesAdminUpdateCallbackPtr> callbacks = _updateCallbacks; if(!callbacks.empty()) { PropertyDict changes = added; @@ -185,13 +184,13 @@ Ice::PropertiesAdminI::setProperties_async(const AMD_PropertiesAdmin_setProperti void Ice::PropertiesAdminI::addUpdateCallback(const PropertiesAdminUpdateCallbackPtr& cb) { - IceUtil::Mutex::Lock sync(*this); + Lock sync(*this); _updateCallbacks.push_back(cb); } void Ice::PropertiesAdminI::removeUpdateCallback(const PropertiesAdminUpdateCallbackPtr& cb) { - IceUtil::Mutex::Lock sync(*this); + Lock sync(*this); _updateCallbacks.erase(remove(_updateCallbacks.begin(), _updateCallbacks.end(), cb), _updateCallbacks.end()); } |