diff options
author | Marc Laukien <marc@zeroc.com> | 2004-08-11 15:16:48 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2004-08-11 15:16:48 +0000 |
commit | cf4f48c92865a0ee086402f238c8b510d1c9d43a (patch) | |
tree | 702367a199509c4f2a321e60f9f51d54c1d546af /cpp/src | |
parent | more glacier2 stuff (diff) | |
download | ice-cf4f48c92865a0ee086402f238c8b510d1c9d43a.tar.bz2 ice-cf4f48c92865a0ee086402f238c8b510d1c9d43a.tar.xz ice-cf4f48c92865a0ee086402f238c8b510d1c9d43a.zip |
more glacier 2 and reverse proxy work
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Glacier2/Blobject.cpp | 8 | ||||
-rw-r--r-- | cpp/src/Glacier2/Blobject.h | 1 | ||||
-rw-r--r-- | cpp/src/Glacier2/Request.cpp | 8 | ||||
-rw-r--r-- | cpp/src/Glacier2/Request.h | 1 | ||||
-rw-r--r-- | cpp/src/Ice/ObjectAdapterI.cpp | 37 | ||||
-rw-r--r-- | cpp/src/Ice/ObjectAdapterI.h | 2 | ||||
-rw-r--r-- | cpp/src/Ice/Reference.cpp | 138 | ||||
-rw-r--r-- | cpp/src/Ice/Reference.h | 5 | ||||
-rw-r--r-- | cpp/src/Ice/ReferenceFactory.cpp | 7 | ||||
-rw-r--r-- | cpp/src/Ice/ReferenceFactory.h | 3 | ||||
-rwxr-xr-x | cpp/src/Ice/TransportInfoI.cpp | 7 | ||||
-rw-r--r-- | cpp/src/Ice/TransportInfoI.h | 5 |
12 files changed, 98 insertions, 124 deletions
diff --git a/cpp/src/Glacier2/Blobject.cpp b/cpp/src/Glacier2/Blobject.cpp index 779dc292615..7f1f5244ca5 100644 --- a/cpp/src/Glacier2/Blobject.cpp +++ b/cpp/src/Glacier2/Blobject.cpp @@ -13,8 +13,14 @@ using namespace std; using namespace Ice; using namespace Glacier; +static const string serverAlwaysBatch = "Glacier2.Server.AlwaysBatch"; +static const string clientAlwaysBatch = "Glacier2.Client.AlwaysBatch"; + Glacier::Blobject::Blobject(const CommunicatorPtr& communicator, bool reverse) : - _logger(communicator->getLogger()) + _logger(communicator->getLogger()), + _alwaysBatch(reverse ? + communicator->getProperties()->getPropertyAsInt(serverAlwaysBatch) > 0 : + communicator->getProperties()->getPropertyAsInt(clientAlwaysBatch) > 0) { _requestQueue = new RequestQueue(communicator, reverse); _requestQueueControl = _requestQueue->start(); diff --git a/cpp/src/Glacier2/Blobject.h b/cpp/src/Glacier2/Blobject.h index 79eeea4c41e..3cafcd503f7 100644 --- a/cpp/src/Glacier2/Blobject.h +++ b/cpp/src/Glacier2/Blobject.h @@ -36,6 +36,7 @@ private: void modifyProxy(Ice::ObjectPrx&, const Ice::Current&) const; + const bool _alwaysBatch; RequestQueuePtr _requestQueue; IceUtil::ThreadControl _requestQueueControl; }; diff --git a/cpp/src/Glacier2/Request.cpp b/cpp/src/Glacier2/Request.cpp index 091299bdb65..fbfcd87e6c1 100644 --- a/cpp/src/Glacier2/Request.cpp +++ b/cpp/src/Glacier2/Request.cpp @@ -119,16 +119,16 @@ static const string clientSleepTime = "Glacier2.Client.SleepTime"; Glacier::RequestQueue::RequestQueue(const Ice::CommunicatorPtr& communicator, bool reverse) : _logger(communicator->getLogger()), _reverse(reverse), - _traceLevelRequest(_reverse ? + _traceLevelRequest(reverse ? communicator->getProperties()->getPropertyAsInt(serverTraceRequest) : communicator->getProperties()->getPropertyAsInt(clientTraceRequest)), - _traceLevelOverride(_reverse ? + _traceLevelOverride(reverse ? communicator->getProperties()->getPropertyAsInt(serverTraceOverride) : communicator->getProperties()->getPropertyAsInt(clientTraceOverride)), - _forwardContext(_reverse ? + _forwardContext(reverse ? communicator->getProperties()->getPropertyAsInt(serverForwardContext) > 0 : communicator->getProperties()->getPropertyAsInt(clientForwardContext) > 0), - _sleepTime(_reverse ? + _sleepTime(reverse ? IceUtil::Time::milliSeconds(communicator->getProperties()->getPropertyAsInt(serverSleepTime)) : IceUtil::Time::milliSeconds(communicator->getProperties()->getPropertyAsInt(clientSleepTime))), _destroy(false) diff --git a/cpp/src/Glacier2/Request.h b/cpp/src/Glacier2/Request.h index 90d10243636..5d26d3f56f2 100644 --- a/cpp/src/Glacier2/Request.h +++ b/cpp/src/Glacier2/Request.h @@ -69,7 +69,6 @@ private: const IceUtil::Time _sleepTime; std::vector<RequestPtr> _requests; - std::vector<RequestPtr> _batchRequests; bool _destroy; }; diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp index a5c62cbfe95..82a02f9ea1e 100644 --- a/cpp/src/Ice/ObjectAdapterI.cpp +++ b/cpp/src/Ice/ObjectAdapterI.cpp @@ -15,6 +15,7 @@ #include <Ice/ReferenceFactory.h> #include <Ice/Endpoint.h> #include <Ice/EndpointFactoryManager.h> +#include <Ice/Connection.h> // For Connection::getTransportInfo() #include <Ice/ConnectionFactory.h> #include <Ice/ServantManager.h> #include <Ice/RouterInfo.h> @@ -451,12 +452,40 @@ Ice::ObjectAdapterI::createReverseProxy(const Identity& ident, const TransportIn checkIdentity(ident); // + // If no connection is specified, we use the first connection of + // this object adapter. + // + TransportInfoPtr tr = transport; + if(!tr) + { + vector<IncomingConnectionFactoryPtr>::const_iterator p; + for(p = _incomingConnectionFactories.begin(); p != _incomingConnectionFactories.end(); ++p) + { + list<ConnectionPtr> connections = (*p)->connections(); + if(!connections.empty()) + { + tr = (*connections.begin())->getTransportInfo(); + break; + } + } + + // + // If there is no incoming connection for the object adapter, + // we return a null proxy. + // + if(!tr) + { + return 0; + } + } + + // // Create a reference and return a reverse proxy for this // reference. // vector<EndpointPtr> endpoints; ReferencePtr ref = _instance->referenceFactory()->create(ident, Context(), "", Reference::ModeTwoway, - false, "", endpoints, 0, 0, this, transport, true); + false, "", endpoints, 0, 0, tr, true); return _instance->proxyFactory()->referenceToProxy(ref); } @@ -575,6 +604,7 @@ Ice::ObjectAdapterI::isLocal(const ObjectPrx& proxy) const return false; } +/* list<ConnectionPtr> Ice::ObjectAdapterI::getIncomingConnections() const { @@ -591,6 +621,7 @@ Ice::ObjectAdapterI::getIncomingConnections() const } return connections; } +*/ void Ice::ObjectAdapterI::flushBatchRequests() @@ -792,7 +823,7 @@ Ice::ObjectAdapterI::newProxy(const Identity& ident) const vector<EndpointPtr> endpoints; ReferencePtr ref = _instance->referenceFactory()->create(ident, Context(), "", Reference::ModeTwoway, false, _id, - endpoints, 0, _locatorInfo, 0, 0, true); + endpoints, 0, _locatorInfo, 0, true); // // Return a proxy for the reference. @@ -824,7 +855,7 @@ Ice::ObjectAdapterI::newDirectProxy(const Identity& ident) const // Create a reference and return a proxy for this reference. // ReferencePtr ref = _instance->referenceFactory()->create(ident, Context(), "", Reference::ModeTwoway, - false, "", endpoints, 0, _locatorInfo, 0, 0, true); + false, "", endpoints, 0, _locatorInfo, 0, true); return _instance->proxyFactory()->referenceToProxy(ref); } diff --git a/cpp/src/Ice/ObjectAdapterI.h b/cpp/src/Ice/ObjectAdapterI.h index 4176c12ddba..67e265eafa3 100644 --- a/cpp/src/Ice/ObjectAdapterI.h +++ b/cpp/src/Ice/ObjectAdapterI.h @@ -74,7 +74,7 @@ public: bool isLocal(const ObjectPrx&) const; - std::list<IceInternal::ConnectionPtr> getIncomingConnections() const; +// std::list<IceInternal::ConnectionPtr> getIncomingConnections() const; void flushBatchRequests(); diff --git a/cpp/src/Ice/Reference.cpp b/cpp/src/Ice/Reference.cpp index 93bfb1d602e..9e03acceef5 100644 --- a/cpp/src/Ice/Reference.cpp +++ b/cpp/src/Ice/Reference.cpp @@ -19,9 +19,9 @@ #include <Ice/LocatorInfo.h> #include <Ice/Locator.h> #include <Ice/Functional.h> -#include <Ice/ObjectAdapterI.h> // For getIncomingConnections(). #include <Ice/Connection.h> #include <Ice/ConnectionFactory.h> +#include <Ice/TransportInfoI.h> #include <Ice/LoggerUtil.h> #include <Ice/TraceLevels.h> #include <IceUtil/StringUtil.h> @@ -86,11 +86,6 @@ IceInternal::Reference::operator==(const Reference& r) const return false; } - if(reverseAdapter != r.reverseAdapter) - { - return false; - } - if(reverseTransport != r.reverseTransport) { return false; @@ -199,15 +194,6 @@ IceInternal::Reference::operator<(const Reference& r) const return false; } - if(reverseAdapter < r.reverseAdapter) - { - return true; - } - else if(r.reverseAdapter < reverseAdapter) - { - return false; - } - if(reverseTransport < r.reverseTransport) { return true; @@ -398,8 +384,8 @@ IceInternal::Reference::changeIdentity(const Identity& newIdentity) const else { return instance->referenceFactory()->create(newIdentity, context, facet, mode, secure, adapterId, - endpoints, routerInfo, locatorInfo, reverseAdapter, - reverseTransport, collocationOptimization); + endpoints, routerInfo, locatorInfo, reverseTransport, + collocationOptimization); } } @@ -413,8 +399,8 @@ IceInternal::Reference::changeContext(const Context& newContext) const else { return instance->referenceFactory()->create(identity, newContext, facet, mode, secure, adapterId, - endpoints, routerInfo, locatorInfo, reverseAdapter, - reverseTransport, collocationOptimization); + endpoints, routerInfo, locatorInfo, reverseTransport, + collocationOptimization); } } @@ -428,8 +414,8 @@ IceInternal::Reference::changeFacet(const string& newFacet) const else { return instance->referenceFactory()->create(identity, context, newFacet, mode, secure, adapterId, - endpoints, routerInfo, locatorInfo, reverseAdapter, - reverseTransport, collocationOptimization); + endpoints, routerInfo, locatorInfo, reverseTransport, + collocationOptimization); } } @@ -479,8 +465,8 @@ IceInternal::Reference::changeTimeout(int newTimeout) const } return instance->referenceFactory()->create(identity, context, facet, mode, secure, adapterId, - newEndpoints, newRouterInfo, newLocatorInfo, reverseAdapter, - reverseTransport, collocationOptimization); + newEndpoints, newRouterInfo, newLocatorInfo, reverseTransport, + collocationOptimization); } ReferencePtr @@ -493,8 +479,8 @@ IceInternal::Reference::changeMode(Mode newMode) const else { return instance->referenceFactory()->create(identity, context, facet, newMode, secure, adapterId, - endpoints, routerInfo, locatorInfo, reverseAdapter, - reverseTransport, collocationOptimization); + endpoints, routerInfo, locatorInfo, reverseTransport, + collocationOptimization); } } @@ -508,8 +494,8 @@ IceInternal::Reference::changeSecure(bool newSecure) const else { return instance->referenceFactory()->create(identity, context, facet, mode, newSecure, adapterId, - endpoints, routerInfo, locatorInfo, reverseAdapter, - reverseTransport, collocationOptimization); + endpoints, routerInfo, locatorInfo, reverseTransport, + collocationOptimization); } } @@ -559,8 +545,8 @@ IceInternal::Reference::changeCompress(bool newCompress) const } return instance->referenceFactory()->create(identity, context, facet, mode, secure, adapterId, - newEndpoints, newRouterInfo, newLocatorInfo, reverseAdapter, - reverseTransport, collocationOptimization); + newEndpoints, newRouterInfo, newLocatorInfo, reverseTransport, + collocationOptimization); } ReferencePtr @@ -573,8 +559,8 @@ IceInternal::Reference::changeAdapterId(const string& newAdapterId) const else { return instance->referenceFactory()->create(identity, context, facet, mode, secure, newAdapterId, - endpoints, routerInfo, locatorInfo, reverseAdapter, - reverseTransport, collocationOptimization); + endpoints, routerInfo, locatorInfo, reverseTransport, + collocationOptimization); } } @@ -588,8 +574,8 @@ IceInternal::Reference::changeEndpoints(const vector<EndpointPtr>& newEndpoints) else { return instance->referenceFactory()->create(identity, context, facet, mode, secure, adapterId, - newEndpoints, routerInfo, locatorInfo, reverseAdapter, - reverseTransport, collocationOptimization); + newEndpoints, routerInfo, locatorInfo, reverseTransport, + collocationOptimization); } } @@ -605,8 +591,8 @@ IceInternal::Reference::changeRouter(const RouterPrx& newRouter) const else { return instance->referenceFactory()->create(identity, context, facet, mode, secure, adapterId, - endpoints, newRouterInfo, locatorInfo, reverseAdapter, - reverseTransport, collocationOptimization); + endpoints, newRouterInfo, locatorInfo, reverseTransport, + collocationOptimization); } } @@ -622,8 +608,8 @@ IceInternal::Reference::changeLocator(const LocatorPrx& newLocator) const else { return instance->referenceFactory()->create(identity, context, facet, mode, secure, adapterId, - endpoints, routerInfo, newLocatorInfo, reverseAdapter, - reverseTransport, collocationOptimization); + endpoints, routerInfo, newLocatorInfo, reverseTransport, + collocationOptimization); } } @@ -637,8 +623,8 @@ IceInternal::Reference::changeCollocationOptimization(bool newCollocationOptimiz else { return instance->referenceFactory()->create(identity, context, facet, mode, secure, adapterId, - endpoints, routerInfo, locatorInfo, reverseAdapter, - reverseTransport, newCollocationOptimization); + endpoints, routerInfo, locatorInfo, reverseTransport, + newCollocationOptimization); } } @@ -651,7 +637,7 @@ IceInternal::Reference::changeDefault() const get(instance->referenceFactory()->getDefaultLocator()); return instance->referenceFactory()->create(identity, context, "", ModeTwoway, false, adapterId, - endpoints, defaultRouterInfo, defaultLocatorInfo, 0, 0, true); + endpoints, defaultRouterInfo, defaultLocatorInfo, 0, true); } ConnectionPtr @@ -659,71 +645,17 @@ IceInternal::Reference::getConnection(bool& compress) const { ConnectionPtr connection; - if(reverseAdapter) + if(reverseTransport) { - // - // If we have a reverse object adapter, we use the incoming - // connections from such object adapter. - // - ObjectAdapterIPtr adapter = ObjectAdapterIPtr::dynamicCast(reverseAdapter); - assert(adapter); - - list<ConnectionPtr> connections = adapter->getIncomingConnections(); - list<ConnectionPtr>::iterator p; - - // - // If we have a reverse transport, then we only use the - // incoming connection that corresponds to this - // transport. Otherwise we use the first suitable incoming - // connections. - // - if(reverseTransport) - { - // - // TODO: This doesn't scale if we have many connections!! - // - for(p = connections.begin(); p != connections.end(); ++p) - { - if((*p)->getTransportInfo() == reverseTransport) - { - break; - } - } - - if(p == connections.end()) - { - NoEndpointException ex(__FILE__, __LINE__); - ex.proxy = toString(); - throw ex; - } - } - else + connection = dynamic_cast<TransportInfoI*>(reverseTransport.get())->getConnection(); + + if(!connection) { - vector<EndpointPtr> endpts; - endpts.reserve(connections.size()); - transform(connections.begin(), connections.end(), back_inserter(endpts), - ::Ice::constMemFun(&Connection::endpoint)); - - endpts = filterEndpoints(endpts); - - if(endpts.empty()) - { - NoEndpointException ex(__FILE__, __LINE__); - ex.proxy = toString(); - throw ex; - } - - for(p = connections.begin(); p != connections.end(); ++p) - { - if((*p)->endpoint() == endpts.front()) - { - break; - } - } - assert(p != connections.end()); + NoEndpointException ex(__FILE__, __LINE__); + ex.proxy = toString(); + throw ex; } - - connection = *p; + compress = connection->endpoint()->compress(); } else @@ -887,7 +819,6 @@ IceInternal::Reference::Reference(const InstancePtr& inst, const vector<EndpointPtr>& endpts, const RouterInfoPtr& rtrInfo, const LocatorInfoPtr& locInfo, - const ObjectAdapterPtr& rvAdapter, const TransportInfoPtr& rvTransport, bool collocationOpt) : instance(inst), @@ -900,7 +831,6 @@ IceInternal::Reference::Reference(const InstancePtr& inst, endpoints(endpts), routerInfo(rtrInfo), locatorInfo(locInfo), - reverseAdapter(rvAdapter), reverseTransport(rvTransport), collocationOptimization(collocationOpt), hashValue(0) diff --git a/cpp/src/Ice/Reference.h b/cpp/src/Ice/Reference.h index 831f7a648d7..11a7a2efd52 100644 --- a/cpp/src/Ice/Reference.h +++ b/cpp/src/Ice/Reference.h @@ -19,7 +19,6 @@ #include <Ice/LocatorF.h> #include <Ice/RouterInfoF.h> #include <Ice/LocatorInfoF.h> -#include <Ice/ObjectAdapterF.h> #include <Ice/TransportInfoF.h> #include <Ice/ConnectionF.h> #include <Ice/Identity.h> @@ -70,7 +69,6 @@ public: const std::vector<EndpointPtr> endpoints; const RouterInfoPtr routerInfo; // Null if no router is used. const LocatorInfoPtr locatorInfo; // Null if no locator is used. - const Ice::ObjectAdapterPtr reverseAdapter; // For reverse communications using the adapter's incoming connections. const Ice::TransportInfoPtr reverseTransport; // If not null, use this transport for reverse communications. const bool collocationOptimization; const Ice::Int hashValue; @@ -107,8 +105,7 @@ private: Reference(const InstancePtr&, const Ice::Identity&, const Ice::Context&, const std::string&, Mode, bool, const std::string&, const std::vector<EndpointPtr>&, - const RouterInfoPtr&, const LocatorInfoPtr&, const Ice::ObjectAdapterPtr&, const Ice::TransportInfoPtr&, - bool); + const RouterInfoPtr&, const LocatorInfoPtr&, const Ice::TransportInfoPtr&, bool); friend class ReferenceFactory; }; diff --git a/cpp/src/Ice/ReferenceFactory.cpp b/cpp/src/Ice/ReferenceFactory.cpp index d50672ab0f3..883a0832ba1 100644 --- a/cpp/src/Ice/ReferenceFactory.cpp +++ b/cpp/src/Ice/ReferenceFactory.cpp @@ -35,7 +35,6 @@ IceInternal::ReferenceFactory::create(const Identity& ident, const vector<EndpointPtr>& endpoints, const RouterInfoPtr& routerInfo, const LocatorInfoPtr& locatorInfo, - const ObjectAdapterPtr& reverseAdapter, const TransportInfoPtr& reverseTransport, bool collocationOptimization) { @@ -55,7 +54,7 @@ IceInternal::ReferenceFactory::create(const Identity& ident, // Create new reference // ReferencePtr ref = new Reference(_instance, ident, context, facet, mode, secure, adapterId, - endpoints, routerInfo, locatorInfo, reverseAdapter, reverseTransport, + endpoints, routerInfo, locatorInfo, reverseTransport, collocationOptimization); @@ -455,7 +454,7 @@ IceInternal::ReferenceFactory::create(const string& str) RouterInfoPtr routerInfo = _instance->routerManager()->get(getDefaultRouter()); LocatorInfoPtr locatorInfo = _instance->locatorManager()->get(getDefaultLocator()); - return create(ident, Context(), facet, mode, secure, adapter, endpoints, routerInfo, locatorInfo, 0, 0, true); + return create(ident, Context(), facet, mode, secure, adapter, endpoints, routerInfo, locatorInfo, 0, true); } ReferencePtr @@ -519,7 +518,7 @@ IceInternal::ReferenceFactory::create(const Identity& ident, BasicStream* s) RouterInfoPtr routerInfo = _instance->routerManager()->get(getDefaultRouter()); LocatorInfoPtr locatorInfo = _instance->locatorManager()->get(getDefaultLocator()); - return create(ident, Context(), facet, mode, secure, adapterId, endpoints, routerInfo, locatorInfo, 0, 0, true); + return create(ident, Context(), facet, mode, secure, adapterId, endpoints, routerInfo, locatorInfo, 0, true); } void diff --git a/cpp/src/Ice/ReferenceFactory.h b/cpp/src/Ice/ReferenceFactory.h index 94b0d5fee32..b49b416ffb9 100644 --- a/cpp/src/Ice/ReferenceFactory.h +++ b/cpp/src/Ice/ReferenceFactory.h @@ -25,8 +25,7 @@ public: ReferencePtr create(const Ice::Identity&, const Ice::Context&, const std::string&, Reference::Mode, bool, const std::string&, const std::vector<EndpointPtr>&, - const RouterInfoPtr&, const LocatorInfoPtr&, const Ice::ObjectAdapterPtr&, - const Ice::TransportInfoPtr&, bool); + const RouterInfoPtr&, const LocatorInfoPtr&, const Ice::TransportInfoPtr&, bool); ReferencePtr create(const std::string&); ReferencePtr create(const Ice::Identity&, BasicStream*); diff --git a/cpp/src/Ice/TransportInfoI.cpp b/cpp/src/Ice/TransportInfoI.cpp index 8b035e94195..1a70ac0a44f 100755 --- a/cpp/src/Ice/TransportInfoI.cpp +++ b/cpp/src/Ice/TransportInfoI.cpp @@ -39,3 +39,10 @@ Ice::TransportInfoI::setConnection(const ConnectionPtr& connection) IceUtil::Mutex::Lock sync(_connectionMutex); _connection = connection; } + +ConnectionPtr +Ice::TransportInfoI::getConnection() const +{ + IceUtil::Mutex::Lock sync(_connectionMutex); + return _connection; +} diff --git a/cpp/src/Ice/TransportInfoI.h b/cpp/src/Ice/TransportInfoI.h index affc9dccf9e..a9dba694372 100644 --- a/cpp/src/Ice/TransportInfoI.h +++ b/cpp/src/Ice/TransportInfoI.h @@ -12,6 +12,7 @@ #include <IceUtil/Mutex.h> #include <Ice/ConnectionF.h> +#include <Ice/ReferenceF.h> #include <Ice/TransportInfo.h> namespace Ice @@ -29,6 +30,10 @@ private: friend class IceInternal::Connection; void setConnection(const IceInternal::ConnectionPtr&); + // IceInternal::Reference needs this method. + friend class IceInternal::Reference; + IceInternal::ConnectionPtr getConnection() const; + IceInternal::ConnectionPtr _connection; IceUtil::Mutex _connectionMutex; }; |