summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2005-09-12 15:27:46 +0000
committerBenoit Foucher <benoit@zeroc.com>2005-09-12 15:27:46 +0000
commitd7b2c19bdc7bf86c6a183b77e3fc286f0319c986 (patch)
treea980bb70577452be6a737ef5c8e1628101a971c1 /cpp/src
parentadding para for bug 458 (diff)
downloadice-d7b2c19bdc7bf86c6a183b77e3fc286f0319c986.tar.bz2
ice-d7b2c19bdc7bf86c6a183b77e3fc286f0319c986.tar.xz
ice-d7b2c19bdc7bf86c6a183b77e3fc286f0319c986.zip
Added configuration for the number of replicas to use for replication.
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/IceGrid/AdapterCache.cpp17
-rw-r--r--cpp/src/IceGrid/AdapterCache.h1
-rw-r--r--cpp/src/IceGrid/DescriptorBuilder.cpp1
-rw-r--r--cpp/src/IceGrid/LocatorI.cpp1
4 files changed, 15 insertions, 5 deletions
diff --git a/cpp/src/IceGrid/AdapterCache.cpp b/cpp/src/IceGrid/AdapterCache.cpp
index 67a2b438fcc..854b2815417 100644
--- a/cpp/src/IceGrid/AdapterCache.cpp
+++ b/cpp/src/IceGrid/AdapterCache.cpp
@@ -85,6 +85,16 @@ AdapterEntry::enableReplication(const LoadBalancingPolicyPtr& policy)
Lock sync(*this);
_replicated = true;
_loadBalancing = policy;
+ istringstream is(policy->nReplicas);
+ is >> _loadBalancingNReplicas;
+ if(_loadBalancingNReplicas < 1)
+ {
+ _loadBalancingNReplicas = 1;
+ }
+ else if(_loadBalancingNReplicas > static_cast<int>(_servers.size()))
+ {
+ _loadBalancingNReplicas = _servers.size();
+ }
}
}
@@ -134,7 +144,7 @@ AdapterEntry::removeServer(const ServerEntryPtr& entry)
}
vector<pair<string, AdapterPrx> >
-AdapterEntry::getProxies(int& endpointCount)
+AdapterEntry::getProxies(int& nReplicas)
{
vector<ServerEntryPtr> servers;
bool adaptive = false;
@@ -201,10 +211,7 @@ AdapterEntry::getProxies(int& endpointCount)
throw NodeUnreachableException();
}
- //
- // TODO: Set to a configurable number of replicas.
- //
- endpointCount = 1; //servers.size();
+ nReplicas = _replicated ? _loadBalancingNReplicas : 1;
return adapters;
}
diff --git a/cpp/src/IceGrid/AdapterCache.h b/cpp/src/IceGrid/AdapterCache.h
index 5c23dae5b38..32d5211900c 100644
--- a/cpp/src/IceGrid/AdapterCache.h
+++ b/cpp/src/IceGrid/AdapterCache.h
@@ -50,6 +50,7 @@ private:
const std::string _id;
bool _replicated;
LoadBalancingPolicyPtr _loadBalancing;
+ int _loadBalancingNReplicas;
ServerEntrySeq _servers;
int _lastServer;
};
diff --git a/cpp/src/IceGrid/DescriptorBuilder.cpp b/cpp/src/IceGrid/DescriptorBuilder.cpp
index d64aca9b59a..054646079c0 100644
--- a/cpp/src/IceGrid/DescriptorBuilder.cpp
+++ b/cpp/src/IceGrid/DescriptorBuilder.cpp
@@ -107,6 +107,7 @@ ApplicationDescriptorBuilder::addReplicatedAdapter(const XmlAttributesHelper& at
{
throw "invalid load balancing policy `" + policy + "'";
}
+ adapter.loadBalancing->nReplicas = attrs("load-balancing-nreplicas", "0");
_descriptor.replicatedAdapters.push_back(adapter);
}
diff --git a/cpp/src/IceGrid/LocatorI.cpp b/cpp/src/IceGrid/LocatorI.cpp
index 9918cdfacb7..985863972f4 100644
--- a/cpp/src/IceGrid/LocatorI.cpp
+++ b/cpp/src/IceGrid/LocatorI.cpp
@@ -163,6 +163,7 @@ LocatorI::Request::Request(const Ice::AMD_Locator_findAdapterByIdPtr& amdCB,
_count(count),
_lastAdapter(_adapters.begin())
{
+ assert(_count > 0);
}
void