diff options
author | Benoit Foucher <benoit@zeroc.com> | 2007-07-10 14:36:46 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2007-07-10 14:36:46 +0200 |
commit | 869aeffd3663e026f469ae373de3122bcc5ea7bb (patch) | |
tree | 6dbc8ff6a7ff515eade6f045c10f9973d61f283f /cpp | |
parent | Commited fix to fix 2286 (diff) | |
download | ice-869aeffd3663e026f469ae373de3122bcc5ea7bb.tar.bz2 ice-869aeffd3663e026f469ae373de3122bcc5ea7bb.tar.xz ice-869aeffd3663e026f469ae373de3122bcc5ea7bb.zip |
Fixed bug 2292
Diffstat (limited to 'cpp')
-rwxr-xr-x | cpp/config/PropertyNames.xml | 2 | ||||
-rw-r--r-- | cpp/src/Ice/PropertyNames.cpp | 4 | ||||
-rw-r--r-- | cpp/src/Ice/PropertyNames.h | 2 | ||||
-rw-r--r-- | cpp/src/IceGrid/AdminSessionI.cpp | 33 | ||||
-rw-r--r-- | cpp/src/IceGrid/AdminSessionI.h | 3 | ||||
-rw-r--r-- | cpp/src/IceGrid/AllocatableObjectCache.cpp | 66 | ||||
-rw-r--r-- | cpp/src/IceGrid/ServerCache.cpp | 126 | ||||
-rw-r--r-- | cpp/src/IceGrid/SessionI.cpp | 34 | ||||
-rw-r--r-- | cpp/src/IceGrid/SessionI.h | 11 |
9 files changed, 162 insertions, 119 deletions
diff --git a/cpp/config/PropertyNames.xml b/cpp/config/PropertyNames.xml index 5fba0da3f5e..461c75dfb41 100755 --- a/cpp/config/PropertyNames.xml +++ b/cpp/config/PropertyNames.xml @@ -382,6 +382,7 @@ generated from the section label. <property name="Node.WaitTime" /> <property name="Registry.AdminCryptPasswords" /> <property name="Registry.AdminPermissionsVerifier" class="proxy" /> + <property name="Registry.AdminSessionFilters" /> <property name="Registry.AdminSSLPermissionsVerifier" class="proxy" /> <property name="Registry.Client" class="objectadapter" /> <property name="Registry.CryptPasswords" /> @@ -394,6 +395,7 @@ generated from the section label. <property name="Registry.ReplicaName" /> <property name="Registry.ReplicaSessionTimeout" /> <property name="Registry.Server" class="objectadapter" /> + <property name="Registry.SessionFilters" /> <property name="Registry.SessionManager" class="objectadapter" /> <property name="Registry.SessionTimeout" /> <property name="Registry.SSLPermissionsVerifier" class="proxy" /> diff --git a/cpp/src/Ice/PropertyNames.cpp b/cpp/src/Ice/PropertyNames.cpp index b381bf1b4df..221ce52fc09 100644 --- a/cpp/src/Ice/PropertyNames.cpp +++ b/cpp/src/Ice/PropertyNames.cpp @@ -7,7 +7,7 @@ // // ********************************************************************** // -// Generated by makeprops.py from file ../config/PropertyNames.xml, Fri Jun 22 15:28:01 2007 +// Generated by makeprops.py from file ../config/PropertyNames.xml, Mon Jul 9 14:48:13 2007 // IMPORTANT: Do not edit this file -- any edits made here will be lost! @@ -201,6 +201,7 @@ const IceInternal::Property IceGridPropsData[] = IceInternal::Property("IceGrid.Registry.AdminPermissionsVerifier.CollocationOptimized", false, 0), IceInternal::Property("IceGrid.Registry.AdminPermissionsVerifier.ThreadPerConnection", false, 0), IceInternal::Property("IceGrid.Registry.AdminPermissionsVerifier", false, 0), + IceInternal::Property("IceGrid.Registry.AdminSessionFilters", false, 0), IceInternal::Property("IceGrid.Registry.AdminSSLPermissionsVerifier.EndpointSelection", false, 0), IceInternal::Property("IceGrid.Registry.AdminSSLPermissionsVerifier.ConnectionCached", false, 0), IceInternal::Property("IceGrid.Registry.AdminSSLPermissionsVerifier.PreferSecure", false, 0), @@ -267,6 +268,7 @@ const IceInternal::Property IceGridPropsData[] = IceInternal::Property("IceGrid.Registry.Server.ThreadPool.SizeMax", false, 0), IceInternal::Property("IceGrid.Registry.Server.ThreadPool.SizeWarn", false, 0), IceInternal::Property("IceGrid.Registry.Server.ThreadPool.StackSize", false, 0), + IceInternal::Property("IceGrid.Registry.SessionFilters", false, 0), IceInternal::Property("IceGrid.Registry.SessionManager.AdapterId", false, 0), IceInternal::Property("IceGrid.Registry.SessionManager.Endpoints", false, 0), IceInternal::Property("IceGrid.Registry.SessionManager.Locator", false, 0), diff --git a/cpp/src/Ice/PropertyNames.h b/cpp/src/Ice/PropertyNames.h index dec96776a5f..916310fa30e 100644 --- a/cpp/src/Ice/PropertyNames.h +++ b/cpp/src/Ice/PropertyNames.h @@ -7,7 +7,7 @@ // // ********************************************************************** // -// Generated by makeprops.py from file ../config/PropertyNames.xml, Fri Jun 22 15:28:01 2007 +// Generated by makeprops.py from file ../config/PropertyNames.xml, Mon Jul 9 14:48:13 2007 // IMPORTANT: Do not edit this file -- any edits made here will be lost! diff --git a/cpp/src/IceGrid/AdminSessionI.cpp b/cpp/src/IceGrid/AdminSessionI.cpp index c8e49df1858..87d445f2abb 100644 --- a/cpp/src/IceGrid/AdminSessionI.cpp +++ b/cpp/src/IceGrid/AdminSessionI.cpp @@ -54,8 +54,9 @@ FileIteratorI::destroy(const Ice::Current& current) _session->removeFileIterator(current.id, current); } -AdminSessionI::AdminSessionI(const string& id, const DatabasePtr& db, int timeout, const string& replicaName) : - BaseSessionI(id, "admin", db), +AdminSessionI::AdminSessionI(const string& id, const DatabasePtr& db, bool filters, int timeout, + const string& replicaName) : + BaseSessionI(id, "admin", db, filters), _timeout(timeout), _replicaName(replicaName) { @@ -475,8 +476,15 @@ AdminSessionFactory::AdminSessionFactory(const Ice::ObjectAdapterPtr& adapter, _database(database), _timeout(registry->getSessionTimeout()), _reaper(reaper), - _registry(registry) + _registry(registry), + _filters(false) { + if(_adapter) // Not set if Glacier2 session manager adapter not enabled + { + Ice::PropertiesPtr properties = adapter->getCommunicator()->getProperties(); + const_cast<bool&>(_filters) = + properties->getPropertyAsIntWithDefault("IceGrid.Registry.AdminSessionFilters", 1) > 0; + } } Glacier2::SessionPrx @@ -499,14 +507,17 @@ AdminSessionFactory::createGlacier2Session(const string& sessionId, const Glacie int timeout = 0; if(ctl) { - try + if(_filters) { - ctl->identities()->add(ids); - } - catch(const Ice::LocalException&) - { - session->destroy(Ice::Current()); - return 0; + try + { + ctl->identities()->add(ids); + } + catch(const Ice::LocalException&) + { + session->destroy(Ice::Current()); + return 0; + } } timeout = ctl->getSessionTimeout(); } @@ -522,7 +533,7 @@ AdminSessionFactory::createGlacier2Session(const string& sessionId, const Glacie AdminSessionIPtr AdminSessionFactory::createSessionServant(const string& id) { - return new AdminSessionI(id, _database, _timeout, _registry->getName()); + return new AdminSessionI(id, _database, _filters, _timeout, _registry->getName()); } const TraceLevelsPtr& diff --git a/cpp/src/IceGrid/AdminSessionI.h b/cpp/src/IceGrid/AdminSessionI.h index 0c40a8162bb..e7bcf02aa6d 100644 --- a/cpp/src/IceGrid/AdminSessionI.h +++ b/cpp/src/IceGrid/AdminSessionI.h @@ -28,7 +28,7 @@ class AdminSessionI : public BaseSessionI, public AdminSession { public: - AdminSessionI(const std::string&, const DatabasePtr&, int, const std::string&); + AdminSessionI(const std::string&, const DatabasePtr&, bool, int, const std::string&); virtual ~AdminSessionI(); virtual Ice::ObjectPrx registerWithServantLocator(const SessionServantLocatorIPtr&, const Ice::ConnectionPtr&, @@ -102,6 +102,7 @@ private: const WaitQueuePtr _waitQueue; const ReapThreadPtr _reaper; const RegistryIPtr _registry; + const bool _filters; }; typedef IceUtil::Handle<AdminSessionFactory> AdminSessionFactoryPtr; diff --git a/cpp/src/IceGrid/AllocatableObjectCache.cpp b/cpp/src/IceGrid/AllocatableObjectCache.cpp index 2c34d42603e..e8308ae4e8e 100644 --- a/cpp/src/IceGrid/AllocatableObjectCache.cpp +++ b/cpp/src/IceGrid/AllocatableObjectCache.cpp @@ -295,25 +295,28 @@ AllocatableObjectEntry::allocated(const SessionIPtr& session) << ")"; } - Glacier2::SessionControlPrx ctl = session->getSessionControl(); - if(ctl) + if(session->useFilters()) { - try - { - Ice::IdentitySeq seq(1); - seq.push_back(_info.proxy->ice_getIdentity()); - ctl->identities()->add(seq); - } - catch(const Ice::LocalException& ex) + Glacier2::SessionControlPrx ctl = session->getSessionControl(); + if(ctl) { - if(traceLevels && traceLevels->object > 0) + try { - Ice::Trace out(traceLevels->logger, traceLevels->objectCat); - out << "couldn't add Glacier2 filter for object `" << _info.proxy->ice_toString(); - out << "' allocated by `" << session->getId() << "':\n" << ex; - } - } - } + Ice::IdentitySeq seq(1); + seq.push_back(_info.proxy->ice_getIdentity()); + ctl->identities()->add(seq); + } + catch(const Ice::LocalException& ex) + { + if(traceLevels && traceLevels->object > 0) + { + Ice::Trace out(traceLevels->logger, traceLevels->objectCat); + out << "couldn't add Glacier2 filter for object `" << _info.proxy->ice_toString(); + out << "' allocated by `" << session->getId() << "':\n" << ex; + } + } + } + } } void @@ -326,23 +329,26 @@ AllocatableObjectEntry::released(const SessionIPtr& session) TraceLevelsPtr traceLevels = _cache.getTraceLevels(); - Glacier2::SessionControlPrx ctl = session->getSessionControl(); - if(ctl) + if(session->useFilters()) { - try - { - Ice::IdentitySeq seq(1); - seq.push_back(_info.proxy->ice_getIdentity()); - ctl->identities()->remove(seq); - } - catch(const Ice::LocalException& ex) + Glacier2::SessionControlPrx ctl = session->getSessionControl(); + if(ctl) { - if(traceLevels && traceLevels->object > 0) + try + { + Ice::IdentitySeq seq(1); + seq.push_back(_info.proxy->ice_getIdentity()); + ctl->identities()->remove(seq); + } + catch(const Ice::LocalException& ex) { - Ice::Trace out(traceLevels->logger, traceLevels->objectCat); - out << "couldn't remove Glacier2 filter for object `" << _info.proxy->ice_toString(); - out << "' allocated by `" << session->getId() << "':\n" << ex; - } + if(traceLevels && traceLevels->object > 0) + { + Ice::Trace out(traceLevels->logger, traceLevels->objectCat); + out << "couldn't remove Glacier2 filter for object `" << _info.proxy->ice_toString(); + out << "' allocated by `" << session->getId() << "':\n" << ex; + } + } } } diff --git a/cpp/src/IceGrid/ServerCache.cpp b/cpp/src/IceGrid/ServerCache.cpp index 14030eea69b..fefd0ed7ebe 100644 --- a/cpp/src/IceGrid/ServerCache.cpp +++ b/cpp/src/IceGrid/ServerCache.cpp @@ -833,41 +833,44 @@ ServerEntry::allocated(const SessionIPtr& session) _load->sessionId = session->getId(); } - Glacier2::SessionControlPrx ctl = session->getSessionControl(); - if(ctl) + if(session->useFilters()) { - ServerHelperPtr helper = createHelper(desc); - multiset<string> adapterIds; - multiset<Ice::Identity> identities; - helper->getIds(adapterIds, identities); - try + Glacier2::SessionControlPrx ctl = session->getSessionControl(); + if(ctl) { - // - // SunCC won't accept the following: - // - // ctl->adapterIds()->add(Ice::StringSeq(adapterIds.begin(), adapterIds.end())); - // ctl->identities()->add(Ice::IdentitySeq(identities.begin(), identities.end())); - // - Ice::StringSeq adapterIdSeq; - for(multiset<string>::iterator p = adapterIds.begin(); p != adapterIds.end(); ++p) + ServerHelperPtr helper = createHelper(desc); + multiset<string> adapterIds; + multiset<Ice::Identity> identities; + helper->getIds(adapterIds, identities); + try { - adapterIdSeq.push_back(*p); - } - Ice::IdentitySeq identitySeq; - for(multiset<Ice::Identity>::iterator q = identities.begin(); q != identities.end(); ++q) - { - identitySeq.push_back(*q); + // + // SunCC won't accept the following: + // + // ctl->adapterIds()->add(Ice::StringSeq(adapterIds.begin(), adapterIds.end())); + // ctl->identities()->add(Ice::IdentitySeq(identities.begin(), identities.end())); + // + Ice::StringSeq adapterIdSeq; + for(multiset<string>::iterator p = adapterIds.begin(); p != adapterIds.end(); ++p) + { + adapterIdSeq.push_back(*p); + } + Ice::IdentitySeq identitySeq; + for(multiset<Ice::Identity>::iterator q = identities.begin(); q != identities.end(); ++q) + { + identitySeq.push_back(*q); + } + ctl->adapterIds()->add(adapterIdSeq); + ctl->identities()->add(identitySeq); } - ctl->adapterIds()->add(adapterIdSeq); - ctl->identities()->add(identitySeq); - } - catch(const Ice::LocalException& ex) - { - if(traceLevels && traceLevels->server > 0) + catch(const Ice::LocalException& ex) { - Ice::Trace out(traceLevels->logger, traceLevels->serverCat); - out << "couldn't add Glacier2 filters for server `" << _id << "' allocated by `" << session->getId(); - out << ":\n" << ex; + if(traceLevels && traceLevels->server > 0) + { + Ice::Trace out(traceLevels->logger, traceLevels->serverCat); + out << "couldn't add Glacier2 filters for server `" << _id << "' allocated by `" + << session->getId() << ":\n" << ex; + } } } } @@ -920,41 +923,44 @@ ServerEntry::released(const SessionIPtr& session) TraceLevelsPtr traceLevels = _cache.getTraceLevels(); - Glacier2::SessionControlPrx ctl = session->getSessionControl(); - if(ctl) + if(session->useFilters()) { - ServerHelperPtr helper = createHelper(desc); - multiset<string> adapterIds; - multiset<Ice::Identity> identities; - helper->getIds(adapterIds, identities); - try + Glacier2::SessionControlPrx ctl = session->getSessionControl(); + if(ctl) { - // - // SunCC won't accept the following: - // - // ctl->adapterIds()->remove(Ice::StringSeq(adapterIds.begin(), adapterIds.end())); - // ctl->identities()->remove(Ice::IdentitySeq(identities.begin(), identities.end())); - // - Ice::StringSeq adapterIdSeq; - for(multiset<string>::iterator p = adapterIds.begin(); p != adapterIds.end(); ++p) + ServerHelperPtr helper = createHelper(desc); + multiset<string> adapterIds; + multiset<Ice::Identity> identities; + helper->getIds(adapterIds, identities); + try { - adapterIdSeq.push_back(*p); - } - Ice::IdentitySeq identitySeq; - for(multiset<Ice::Identity>::iterator q = identities.begin(); q != identities.end(); ++q) - { - identitySeq.push_back(*q); + // + // SunCC won't accept the following: + // + // ctl->adapterIds()->remove(Ice::StringSeq(adapterIds.begin(), adapterIds.end())); + // ctl->identities()->remove(Ice::IdentitySeq(identities.begin(), identities.end())); + // + Ice::StringSeq adapterIdSeq; + for(multiset<string>::iterator p = adapterIds.begin(); p != adapterIds.end(); ++p) + { + adapterIdSeq.push_back(*p); + } + Ice::IdentitySeq identitySeq; + for(multiset<Ice::Identity>::iterator q = identities.begin(); q != identities.end(); ++q) + { + identitySeq.push_back(*q); + } + ctl->adapterIds()->remove(adapterIdSeq); + ctl->identities()->remove(identitySeq); } - ctl->adapterIds()->remove(adapterIdSeq); - ctl->identities()->remove(identitySeq); - } - catch(const Ice::LocalException& ex) - { - if(traceLevels && traceLevels->server > 0) + catch(const Ice::LocalException& ex) { - Ice::Trace out(traceLevels->logger, traceLevels->serverCat); - out << "couldn't remove Glacier2 filters for server `" << _id << "' allocated by `"; - out << session->getId() << ":\n" << ex; + if(traceLevels && traceLevels->server > 0) + { + Ice::Trace out(traceLevels->logger, traceLevels->serverCat); + out << "couldn't remove Glacier2 filters for server `" << _id << "' allocated by `"; + out << session->getId() << ":\n" << ex; + } } } } diff --git a/cpp/src/IceGrid/SessionI.cpp b/cpp/src/IceGrid/SessionI.cpp index f27ded104d5..263331bae3e 100644 --- a/cpp/src/IceGrid/SessionI.cpp +++ b/cpp/src/IceGrid/SessionI.cpp @@ -66,11 +66,13 @@ newAllocateObject(const SessionIPtr& session, const IceUtil::Handle<T>& cb) BaseSessionI::BaseSessionI(const string& id, const string& prefix, - const DatabasePtr& database) : + const DatabasePtr& database, + bool filters) : _id(id), _prefix(prefix), _traceLevels(database->getTraceLevels()), _database(database), + _filters(filters), _destroyed(false), _timestamp(IceUtil::Time::now()) { @@ -181,9 +183,10 @@ BaseSessionI::registerWithObjectAdapter(const Ice::ObjectAdapterPtr& adapter) SessionI::SessionI(const string& id, const DatabasePtr& database, + bool filters, const WaitQueuePtr& waitQueue, const Glacier2::SessionControlPrx& sessionControl) : - BaseSessionI(id, "client", database), + BaseSessionI(id, "client", database, filters), _waitQueue(waitQueue), _sessionControl(sessionControl), _allocationTimeout(-1) @@ -318,8 +321,14 @@ ClientSessionFactory::ClientSessionFactory(const Ice::ObjectAdapterPtr& adapter, _adapter(adapter), _database(database), _waitQueue(waitQueue), - _reaper(reaper) + _reaper(reaper), + _filters(false) { + if(_adapter) // Not set if Glacier2 session manager adapter not enabled + { + Ice::PropertiesPtr properties = _adapter->getCommunicator()->getProperties(); + const_cast<bool&>(_filters) = properties->getPropertyAsIntWithDefault("IceGrid.Registry.SessionFilters", 1) > 0; + } } Glacier2::SessionPrx @@ -341,14 +350,17 @@ ClientSessionFactory::createGlacier2Session(const string& sessionId, const Glaci int timeout = 0; if(ctl) { - try + if(_filters) { - ctl->identities()->add(ids); - } - catch(const Ice::LocalException&) - { - session->destroy(Ice::Current()); - return 0; + try + { + ctl->identities()->add(ids); + } + catch(const Ice::LocalException&) + { + session->destroy(Ice::Current()); + return 0; + } } timeout = ctl->getSessionTimeout(); } @@ -364,7 +376,7 @@ ClientSessionFactory::createGlacier2Session(const string& sessionId, const Glaci SessionIPtr ClientSessionFactory::createSessionServant(const string& userId, const Glacier2::SessionControlPrx& ctl) { - return new SessionI(userId, _database, _waitQueue, ctl); + return new SessionI(userId, _database, _filters, _waitQueue, ctl); } const TraceLevelsPtr& diff --git a/cpp/src/IceGrid/SessionI.h b/cpp/src/IceGrid/SessionI.h index 9dbb5666b83..ed497046f68 100644 --- a/cpp/src/IceGrid/SessionI.h +++ b/cpp/src/IceGrid/SessionI.h @@ -52,17 +52,19 @@ public: virtual Ice::ObjectPrx registerWithObjectAdapter(const Ice::ObjectAdapterPtr&); const std::string& getId() const { return _id; } - + bool useFilters() const { return _filters; } + protected: virtual void destroyImpl(bool); - BaseSessionI(const std::string&, const std::string&, const DatabasePtr&); + BaseSessionI(const std::string&, const std::string&, const DatabasePtr&, bool); const std::string _id; const std::string _prefix; const TraceLevelsPtr _traceLevels; const DatabasePtr _database; + const bool _filters; SessionServantLocatorIPtr _servantLocator; Ice::ObjectAdapterPtr _adapter; Ice::Identity _identity; @@ -79,8 +81,8 @@ class SessionI : public BaseSessionI, public Session { public: - SessionI(const std::string&, const DatabasePtr&, const WaitQueuePtr&, const Glacier2::SessionControlPrx&); - SessionI(const std::string&, const DatabasePtr&, const WaitQueuePtr&, const Ice::ConnectionPtr&); + SessionI(const std::string&, const DatabasePtr&, bool, const WaitQueuePtr&, const Glacier2::SessionControlPrx&); + SessionI(const std::string&, const DatabasePtr&, bool, const WaitQueuePtr&, const Ice::ConnectionPtr&); virtual ~SessionI(); virtual void keepAlive(const Ice::Current& current) { BaseSessionI::keepAlive(current); } @@ -131,6 +133,7 @@ private: const DatabasePtr _database; const WaitQueuePtr _waitQueue; const ReapThreadPtr _reaper; + const bool _filters; }; typedef IceUtil::Handle<ClientSessionFactory> ClientSessionFactoryPtr; |