Index: src/IceGrid/AdapterCache.cpp =================================================================== RCS file: /home/cvsroot/ice/src/IceGrid/AdapterCache.cpp,v retrieving revision 1.22 diff -r1.22 AdapterCache.cpp 23c23 < struct ServerLoadCI : binary_function --- > struct ReplicaLoadComp : binary_function 25c25,26 < ServerLoadCI(LoadSample loadSample) : _loadSample(loadSample) { } --- > typedef ReplicaGroupEntry::ReplicaSeq::value_type Replica; > typedef pair ReplicaLoad; 27c28 < bool operator()(const pair& lhs, const pair& rhs) --- > bool operator()(const ReplicaLoad& lhs, const ReplicaLoad& rhs) 29,39c30,36 < float lhsl = 1.0f; < try < { < lhsl = lhs.second->getLeastLoadedNodeLoad(_loadSample); < } < catch(const ServerNotExistException&) < { < } < catch(const NodeUnreachableException&) < { < } --- > return lhs.first < rhs.first; > } > }; > > struct ToReplicaLoad : public unary_function > { > ToReplicaLoad(LoadSample loadSample) : _loadSample(loadSample) { } 41c38,40 < float rhsl = 1.0f; --- > ReplicaLoadComp::ReplicaLoad > operator()(const ReplicaLoadComp::Replica& value) > { 44,47c43 < rhsl = rhs.second->getLeastLoadedNodeLoad(_loadSample); < } < catch(const ServerNotExistException&) < { --- > return make_pair(value.second->getLeastLoadedNodeLoad(_loadSample), value); 49c45 < catch(const NodeUnreachableException&) --- > catch(const Ice::Exception&) 50a47 > return make_pair(1.0f, value); 52d48 < return lhsl < rhsl; 57a54,62 > struct ToReplica : public unary_function > { > ReplicaLoadComp::Replica > operator()(const ReplicaLoadComp::ReplicaLoad& value) > { > return value.second; > } > }; > 292c297 < for(ReplicaSeq::iterator p = _replicas.begin(); p != _replicas.end(); ++p) --- > for(ReplicaGroupEntry::ReplicaSeq::iterator p = _replicas.begin(); p != _replicas.end(); ++p) 351c356,361 < sort(replicas.begin(), replicas.end(), ServerLoadCI(loadSample)); --- > > vector rl; > transform(replicas.begin(), replicas.end(), back_inserter(rl), ToReplicaLoad(loadSample)); > sort(rl.begin(), rl.end(), ReplicaLoadComp()); > replicas.clear(); > transform(rl.begin(), rl.end(), back_inserter(replicas), ToReplica()); 394c404,406 < AdapterEntryPtr adpt = min_element(replicas.begin(), replicas.end(), ServerLoadCI(loadSample))->second; --- > vector rl; > transform(replicas.begin(), replicas.end(), back_inserter(rl), ToReplicaLoad(loadSample)); > AdapterEntryPtr adpt = min_element(rl.begin(), rl.end(), ReplicaLoadComp())->second.second; Index: src/IceGrid/AdapterCache.h =================================================================== RCS file: /home/cvsroot/ice/src/IceGrid/AdapterCache.h,v retrieving revision 1.14.2.1 diff -r1.14.2.1 AdapterCache.h 87a88,89 > typedef std::vector > ReplicaSeq; > 94d95 < typedef std::vector > ReplicaSeq;