diff options
author | Benoit Foucher <benoit@zeroc.com> | 2014-04-15 09:41:21 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2014-04-15 09:41:21 +0200 |
commit | 54884a0b4c139118fc49498b6d6715d7d9ab718c (patch) | |
tree | 1f00091ad68543b3dc9828f27e32c0d9f7d072fe /cpp/src/IceGrid/AdapterCache.cpp | |
parent | VC11 fixes for PHP 5.5 (diff) | |
download | ice-54884a0b4c139118fc49498b6d6715d7d9ab718c.tar.bz2 ice-54884a0b4c139118fc49498b6d6715d7d9ab718c.tar.xz ice-54884a0b4c139118fc49498b6d6715d7d9ab718c.zip |
Added support for IceGrid custom load balancing
Diffstat (limited to 'cpp/src/IceGrid/AdapterCache.cpp')
-rw-r--r-- | cpp/src/IceGrid/AdapterCache.cpp | 57 |
1 files changed, 41 insertions, 16 deletions
diff --git a/cpp/src/IceGrid/AdapterCache.cpp b/cpp/src/IceGrid/AdapterCache.cpp index cb0b68c99b3..235d2f9f30c 100644 --- a/cpp/src/IceGrid/AdapterCache.cpp +++ b/cpp/src/IceGrid/AdapterCache.cpp @@ -206,7 +206,7 @@ AdapterCache::addServerAdapter(const AdapterDescriptor& desc, const ServerEntryP // Add an un-assigned replica group, the replica group will in theory be added // shortly after when its application is loaded. // - repEntry = new ReplicaGroupEntry(*this, desc.replicaGroupId, "", new RandomLoadBalancingPolicy("0")); + repEntry = new ReplicaGroupEntry(*this, desc.replicaGroupId, "", new RandomLoadBalancingPolicy("0"), ""); addImpl(desc.replicaGroupId, repEntry); } repEntry->addReplica(desc.id, entry); @@ -226,7 +226,7 @@ AdapterCache::addReplicaGroup(const ReplicaGroupDescriptor& desc, const string& // if(repEntry->getApplication().empty()) { - repEntry->update(app, desc.loadBalancing); + repEntry->update(app, desc.loadBalancing, desc.filter); } else { @@ -235,7 +235,7 @@ AdapterCache::addReplicaGroup(const ReplicaGroupDescriptor& desc, const string& } return; } - addImpl(desc.id, new ReplicaGroupEntry(*this, desc.id, app, desc.loadBalancing)); + addImpl(desc.id, new ReplicaGroupEntry(*this, desc.id, app, desc.loadBalancing, desc.filter)); } AdapterEntryPtr @@ -375,15 +375,12 @@ ServerAdapterEntry::addSyncCallback(const SynchronizationCallbackPtr& callback, void ServerAdapterEntry::getLocatorAdapterInfo(LocatorAdapterInfoSeq& adapters, int& nReplicas, bool& replicaGroup, - bool& roundRobin, const set<string>&) + bool& roundRobin, string& filter, const set<string>&) { nReplicas = 1; replicaGroup = false; roundRobin = false; - LocatorAdapterInfo info; - info.id = _id; - info.proxy = _server->getAdapter(info.activationTimeout, info.deactivationTimeout, _id, true); - adapters.push_back(info); + getLocatorAdapterInfo(adapters); } float @@ -450,21 +447,50 @@ ServerAdapterEntry::getProxy(const string& replicaGroupId, bool upToDate) const } } +void +ServerAdapterEntry::getLocatorAdapterInfo(LocatorAdapterInfoSeq& adapters) const +{ + LocatorAdapterInfo info; + info.id = _id; + info.proxy = _server->getAdapter(info.activationTimeout, info.deactivationTimeout, _id, true); + adapters.push_back(info); +} + int ServerAdapterEntry::getPriority() const { return _priority; } +string +ServerAdapterEntry::getServerId() const +{ + return _server->getId(); +} + +string +ServerAdapterEntry::getNodeName() const +{ + try + { + return _server->getInfo().node; + } + catch(const ServerNotExistException&) + { + return ""; + } +} + ReplicaGroupEntry::ReplicaGroupEntry(AdapterCache& cache, const string& id, const string& application, - const LoadBalancingPolicyPtr& policy) : + const LoadBalancingPolicyPtr& policy, + const string& filter) : AdapterEntry(cache, id, application), _lastReplica(0), _requestInProgress(false) { - update(application, policy); + update(application, policy, filter); } bool @@ -546,13 +572,14 @@ ReplicaGroupEntry::removeReplica(const string& replicaId) } void -ReplicaGroupEntry::update(const string& application, const LoadBalancingPolicyPtr& policy) +ReplicaGroupEntry::update(const string& application, const LoadBalancingPolicyPtr& policy, const string& filter) { Lock sync(*this); assert(policy); _application = application; _loadBalancing = policy; + _filter = filter; istringstream is(_loadBalancing->nReplicas); int nReplicas = 0; @@ -582,7 +609,7 @@ ReplicaGroupEntry::update(const string& application, const LoadBalancingPolicyPt void ReplicaGroupEntry::getLocatorAdapterInfo(LocatorAdapterInfoSeq& adapters, int& nReplicas, bool& replicaGroup, - bool& roundRobin, const set<string>& excludes) + bool& roundRobin, string& filter, const set<string>& excludes) { vector<ServerAdapterEntryPtr> replicas; bool adaptive = false; @@ -591,6 +618,7 @@ ReplicaGroupEntry::getLocatorAdapterInfo(LocatorAdapterInfoSeq& adapters, int& n Lock sync(*this); replicaGroup = true; roundRobin = false; + filter = _filter; nReplicas = _loadBalancingNReplicas > 0 ? _loadBalancingNReplicas : static_cast<int>(_replicas.size()); if(_replicas.empty()) @@ -668,10 +696,7 @@ ReplicaGroupEntry::getLocatorAdapterInfo(LocatorAdapterInfoSeq& adapters, int& n { try { - int dummy; - bool dummy2; - bool dummy3; - (*p)->getLocatorAdapterInfo(adapters, dummy, dummy2, dummy3, emptyExcludes); + (*p)->getLocatorAdapterInfo(adapters); firstUnreachable = false; } catch(const SynchronizationException&) |