summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/AdapterCache.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2005-07-28 16:11:09 +0000
committerBenoit Foucher <benoit@zeroc.com>2005-07-28 16:11:09 +0000
commit352f20b1b7aeb93164164e6c77356dbdcd708cef (patch)
tree16391b09de940b4037c6c00568ecb48ccb5d2a78 /cpp/src/IceGrid/AdapterCache.cpp
parentFix compiler warnings (diff)
downloadice-352f20b1b7aeb93164164e6c77356dbdcd708cef.tar.bz2
ice-352f20b1b7aeb93164164e6c77356dbdcd708cef.tar.xz
ice-352f20b1b7aeb93164164e6c77356dbdcd708cef.zip
Lots of descriptor changes.
Diffstat (limited to 'cpp/src/IceGrid/AdapterCache.cpp')
-rw-r--r--cpp/src/IceGrid/AdapterCache.cpp31
1 files changed, 21 insertions, 10 deletions
diff --git a/cpp/src/IceGrid/AdapterCache.cpp b/cpp/src/IceGrid/AdapterCache.cpp
index 919da48a9d7..26c8fb67973 100644
--- a/cpp/src/IceGrid/AdapterCache.cpp
+++ b/cpp/src/IceGrid/AdapterCache.cpp
@@ -40,15 +40,26 @@ AdapterEntry::AdapterEntry(Cache<string, AdapterEntry>& cache, const std::string
void
AdapterEntry::enableReplication(LoadBalancingPolicy policy)
{
- Lock sync(*this);
- _replicated = true;
- _loadBalancing = policy;
+ {
+ Lock sync(*this);
+ _replicated = true;
+ _loadBalancing = policy;
+ }
}
void
AdapterEntry::disableReplication()
{
- _replicated = false;
+ bool remove;
+ {
+ Lock sync(*this);
+ _replicated = false;
+ remove = _servers.empty();
+ }
+ if(remove)
+ {
+ _cache.remove(_id);
+ }
}
void
@@ -73,12 +84,12 @@ AdapterEntry::removeServer(const ServerEntryPtr& entry)
break;
}
}
- remove = _servers.empty();
+ remove = _servers.empty() && !_replicated;
}
if(remove)
{
_cache.remove(_id);
- }
+ }
}
vector<pair<string, AdapterPrx> >
@@ -126,7 +137,7 @@ AdapterEntry::getProxies(int& endpointCount)
{
try
{
- adapters.push_back(make_pair((*p)->getName(), (*p)->getAdapter(_id)));
+ adapters.push_back(make_pair((*p)->getId(), (*p)->getAdapter(_id)));
}
catch(const NodeUnreachableException&)
{
@@ -161,7 +172,7 @@ AdapterEntry::getProxy(const string& serverId) const
{
for(ServerEntrySeq::const_iterator p = _servers.begin(); p != _servers.end(); ++p)
{
- if((*p)->getName() == serverId)
+ if((*p)->getId() == serverId)
{
server = *p;
break;
@@ -173,7 +184,7 @@ AdapterEntry::getProxy(const string& serverId) const
if(!server)
{
ServerNotExistException ex;
- ex.name = serverId;
+ ex.id = serverId;
throw ex;
}
@@ -184,5 +195,5 @@ bool
AdapterEntry::canRemove()
{
Lock sync(*this);
- return _servers.empty();
+ return _servers.empty() && !_replicated;
}