diff options
author | Benoit Foucher <benoit@zeroc.com> | 2005-10-06 15:15:02 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2005-10-06 15:15:02 +0000 |
commit | 0520bfc67149d75fbf2dffbeac27c43164f16e14 (patch) | |
tree | 962c18a611b2c530984ab89dc882061e0a335c20 /cpp/src/IceGrid/Database.cpp | |
parent | IceGrid.ObjectNotExist -> IceGrid.ObjectNotregistered (diff) | |
download | ice-0520bfc67149d75fbf2dffbeac27c43164f16e14.tar.bz2 ice-0520bfc67149d75fbf2dffbeac27c43164f16e14.tar.xz ice-0520bfc67149d75fbf2dffbeac27c43164f16e14.zip |
Added support for default templates.
Added support for default parameters.
Added support for findObjectByTypeOnLeastLoadedNode
Added default templates descriptor (config/templates.xml)
Diffstat (limited to 'cpp/src/IceGrid/Database.cpp')
-rw-r--r-- | cpp/src/IceGrid/Database.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp index fa65046637c..3523a17614c 100644 --- a/cpp/src/IceGrid/Database.cpp +++ b/cpp/src/IceGrid/Database.cpp @@ -112,6 +112,14 @@ private: const AdapterPtr _adapter; }; +struct ObjectLoadCI : binary_function<pair<Ice::ObjectPrx, float>&, pair<Ice::ObjectPrx, float>&, bool> +{ + bool operator()(const pair<Ice::ObjectPrx, float>& lhs, const pair<Ice::ObjectPrx, float>& rhs) + { + return lhs.second < rhs.second; + } +}; + } Database::Database(const Ice::ObjectAdapterPtr& adapter, @@ -843,6 +851,32 @@ Database::getObjectByType(const string& type) return objs[rand() % objs.size()]; } +Ice::ObjectPrx +Database::getObjectByTypeOnLeastLoadedNode(const string& type, LoadSample sample) +{ + Ice::ObjectProxySeq objs = getObjectsWithType(type); + random_shuffle(objs.begin(), objs.end()); + vector<pair<Ice::ObjectPrx, float> > objectsWithLoad; + objectsWithLoad.reserve(objs.size()); + for(Ice::ObjectProxySeq::const_iterator p = objs.begin(); p != objs.end(); ++p) + { + float load = 1.0f; + if(!(*p)->ice_getAdapterId().empty()) + { + try + { + load = _adapterCache.get((*p)->ice_getAdapterId())->getLeastLoadedNodeLoad(sample); + } + catch(const AdapterNotExistException&) + { + } + } + objectsWithLoad.push_back(make_pair(*p, load)); + } + return min_element(objectsWithLoad.begin(), objectsWithLoad.end(), ObjectLoadCI())->first; +} + + Ice::ObjectProxySeq Database::getObjectsWithType(const string& type) { |