diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/demo/Glacier/session/config | 2 | ||||
-rw-r--r-- | cpp/demo/Ice/callback/Client.cpp | 4 | ||||
-rw-r--r-- | cpp/demo/Ice/callback/config | 10 | ||||
-rw-r--r-- | cpp/demo/Ice/callback/config.server | 5 | ||||
-rw-r--r-- | cpp/demo/Ice/hello/config | 2 | ||||
-rw-r--r-- | cpp/demo/IceBox/hello/config | 2 | ||||
-rw-r--r-- | cpp/doc/Properties.sgml | 40 | ||||
-rw-r--r-- | cpp/src/Glacier/.depend | 8 | ||||
-rw-r--r-- | cpp/src/Glacier/Blobject.cpp | 61 | ||||
-rw-r--r-- | cpp/src/Glacier/Blobject.h | 9 | ||||
-rw-r--r-- | cpp/src/Glacier/ClientBlobject.cpp | 51 | ||||
-rw-r--r-- | cpp/src/Glacier/ClientBlobject.h | 3 | ||||
-rw-r--r-- | cpp/src/Glacier/Missive.cpp | 106 | ||||
-rw-r--r-- | cpp/src/Glacier/Missive.h | 25 | ||||
-rw-r--r-- | cpp/src/Glacier/ServerBlobject.cpp | 46 | ||||
-rw-r--r-- | cpp/src/Glacier/ServerBlobject.h | 3 | ||||
-rw-r--r-- | cpp/src/Glacier/StarterI.cpp | 2 |
17 files changed, 244 insertions, 135 deletions
diff --git a/cpp/demo/Glacier/session/config b/cpp/demo/Glacier/session/config index 28a96a27aab..2f4a14c22d4 100644 --- a/cpp/demo/Glacier/session/config +++ b/cpp/demo/Glacier/session/config @@ -9,7 +9,7 @@ IceSSL.Client.CertPath=../../../certs IceSSL.Client.Config=sslconfig.xml IceSSL.Server.CertPath=../../../certs IceSSL.Server.Config=sslconfig.xml -#IceSSL.Trace.Security=4 +#IceSSL.Trace.Security=1 Glacier.Router.Endpoints=default Glacier.Router.SessionManager=HelloSessionManager:tcp -p 10000:ssl -p 10001 diff --git a/cpp/demo/Ice/callback/Client.cpp b/cpp/demo/Ice/callback/Client.cpp index 1f8cf7b2c16..82d926d84a3 100644 --- a/cpp/demo/Ice/callback/Client.cpp +++ b/cpp/demo/Ice/callback/Client.cpp @@ -107,7 +107,7 @@ CallbackClient::run(int argc, char* argv[]) else if (c == 'O') { Context context; - context["_fwd"] = "o" + secureStr; + context["_fwd"] = "O" + secureStr; batchOneway->initiateCallback(onewayR, context); } else if (c == 'd') @@ -119,7 +119,7 @@ CallbackClient::run(int argc, char* argv[]) else if (c == 'D') { Context context; - context["_fwd"] = "d" + secureStr; + context["_fwd"] = "D" + secureStr; batchDatagram->initiateCallback(datagramR, context); } else if (c == 'f') diff --git a/cpp/demo/Ice/callback/config b/cpp/demo/Ice/callback/config index 451eb54486a..af5e066343e 100644 --- a/cpp/demo/Ice/callback/config +++ b/cpp/demo/Ice/callback/config @@ -1,16 +1,16 @@ Callback.Callback=callback:tcp -p 10000:udp -p 10000:ssl -p 10001 Ice.Adapter.CallbackReceiverAdapter.Endpoints=tcp:udp:ssl -Ice.Trace.Network=1 -Ice.Trace.Protocol=1 +#Ice.Trace.Network=1 +#Ice.Trace.Protocol=1 Ice.ConnectionWarnings=1 Ice.Plugin.IceSSL=IceSSL:create -IceSSL.Trace.Security=1 IceSSL.Client.CertPath=../../../certs IceSSL.Client.Config=sslconfig.xml IceSSL.Server.CertPath=../../../certs IceSSL.Server.Config=sslconfig.xml +#IceSSL.Trace.Security=1 Glacier.Router.Endpoints=default -p 10005 Glacier.Router.Client.Endpoints=tcp:udp -c:ssl @@ -18,6 +18,10 @@ Glacier.Router.Server.Endpoints=tcp:udp:ssl Glacier.Router.Trace.Client=2 Glacier.Router.Trace.Server=2 Glacier.Router.Trace.RoutingTable=1 +Glacier.Router.Server.ForwardContext=1 +Glacier.Router.Client.ForwardContext=1 +Glacier.Router.Server.BatchSleepTime=2000 +Glacier.Router.Client.BatchSleepTime=2000 # Uncomment the following lines if you want to run this demo with Glacier Ice.Default.Router=Glacier/router:default -p 10005 diff --git a/cpp/demo/Ice/callback/config.server b/cpp/demo/Ice/callback/config.server index ed632afd5d9..d33b8c73dad 100644 --- a/cpp/demo/Ice/callback/config.server +++ b/cpp/demo/Ice/callback/config.server @@ -1,7 +1,7 @@ Ice.Adapter.CallbackAdapter.Endpoints=tcp -p 10000:udp -p 10000:ssl -p 10001 -Ice.Trace.Network=1 -Ice.Trace.Protocol=1 +#Ice.Trace.Network=1 +#Ice.Trace.Protocol=1 Ice.ConnectionWarnings=1 Ice.Plugin.IceSSL=IceSSL:create @@ -9,3 +9,4 @@ IceSSL.Client.CertPath=../../../certs IceSSL.Client.Config=sslconfig.xml IceSSL.Server.CertPath=../../../certs IceSSL.Server.Config=sslconfig.xml +#IceSSL.Trace.Security=1 diff --git a/cpp/demo/Ice/hello/config b/cpp/demo/Ice/hello/config index 40e29751253..f7b6e327fc0 100644 --- a/cpp/demo/Ice/hello/config +++ b/cpp/demo/Ice/hello/config @@ -41,7 +41,7 @@ Ice.ConnectionWarnings=1 # 1 = trace warning messages # 2 = config file parsing warnings # -#Ice.Trace.Security=4 +#Ice.Trace.Security=2 # # SSL Configuration File diff --git a/cpp/demo/IceBox/hello/config b/cpp/demo/IceBox/hello/config index 0a38457477a..10b5e7dbe4e 100644 --- a/cpp/demo/IceBox/hello/config +++ b/cpp/demo/IceBox/hello/config @@ -63,7 +63,7 @@ IceSSL.Server.Config=sslconfig.xml # 1 = trace warning messages # 2 = config file parsing warnings # -#IceSSL.Trace.Security=4 +#IceSSL.Trace.Security=2 # # Glacier settings diff --git a/cpp/doc/Properties.sgml b/cpp/doc/Properties.sgml index a4cac8547e6..1b65853351c 100644 --- a/cpp/doc/Properties.sgml +++ b/cpp/doc/Properties.sgml @@ -1047,6 +1047,24 @@ The routing table tracing level: </section> </section> +<section><title>Glacier.Router.Client.ForwardContext, Glacier.Router.Server.ForwardContext</title> +<section><title>Synopsis</title> +<synopsis> +Glacier.Router.Client.ForwardContext=<replaceable>num</replaceable> +Glacier.Router.Server.ForwardContext=<replaceable>num</replaceable> +</synopsis> +</section> +<section> +<title>Description</title> +<para> +If <replaceable>num</replaceable> is set to a value larger than zero, +the context parameter is forwarded unmodified as received from the +client or server, respectively. Otherwise an empty context is +forwarded. Default is no context forwarding. +</para> +</section> +</section> + <section><title>Glacier.Router.SessionManager</title> <section><title>Synopsis</title> <synopsis> @@ -1056,9 +1074,8 @@ Glacier.Router.SessionManager=<replaceable>proxy</replaceable> <section> <title>Description</title> <para> -A stringified proxy to the session manager interface. If not specified, -it is not possible to use the <literal>Router::createSession</literal> -method. +A stringified proxy to a session manager. If not specified, it is not +possible to use the <literal>Router::createSession()</literal> method. </para> </section> </section> @@ -1072,7 +1089,9 @@ Glacier.Router.UserId=<replaceable>name</replaceable> <section> <title>Description</title> <para> -The authenticated userId of the remote user. +The authenticated user id. This is usually passed from the &Glacier; +router starter. The user id is used as argument to +<literal>Router::createSession()</literal>. </para> </section> </section> @@ -1086,9 +1105,9 @@ Glacier.Router.AllowCategories=<replaceable>list</replaceable> <section> <title>Description</title> <para> -A whitespace seperated list of categories. If this property is set -then requests are only permitted to identities with a category found -in this list. +A whitespace seperated list of categories. If this property is set, +then requests are only permitted to &Ice; objects with an identity +that matches one of the categories from this list. </para> </section> </section> @@ -1216,8 +1235,9 @@ Glacier.Starter.AddUserToAllowCategories=<replaceable>value</replaceable> <section> <title>Description</title> <para> -If present the userId is added to the -<literal>Glacier.Router.AllowCategories</literal> property. +If set, the user id authenticated by the &Glacier; router starter is +added to the <literal>Glacier.Router.AllowCategories</literal> +property upon router startup. </para> </section> </section> @@ -1468,7 +1488,7 @@ The &Freeze; evictor activity tracing level: </row> <row> <entry>1</entry> -<entry>Trace Ice Object creation and destruction, as well as +<entry>Trace &Ice; object creation and destruction, as well as evictor deactivation.</entry> </row> <row> diff --git a/cpp/src/Glacier/.depend b/cpp/src/Glacier/.depend index 443492e10d8..0719b738763 100644 --- a/cpp/src/Glacier/.depend +++ b/cpp/src/Glacier/.depend @@ -2,9 +2,11 @@ Starter.o: Starter.cpp ../../include/Glacier/Starter.h ../../include/Ice/LocalOb Router.o: Router.cpp ../../include/Glacier/Router.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Router.h ../../include/Glacier/SessionF.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Stream.h ../../include/Ice/BuiltinSequences.h Session.o: Session.cpp ../../include/Glacier/Session.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Stream.h ../../include/Ice/BuiltinSequences.h SessionManager.o: SessionManager.cpp ../../include/Glacier/SessionManager.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Glacier/SessionF.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Stream.h ../../include/Ice/BuiltinSequences.h -GlacierRouter.o: GlacierRouter.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/RoutingTable.h ../../include/Ice/RoutingTableF.h ../Glacier/RouterI.h ../../include/Glacier/Router.h ../../include/Ice/Router.h ../../include/Glacier/SessionF.h ../../include/Glacier/SessionManagerF.h ../Glacier/ClientBlobject.h ../Glacier/ServerBlobject.h ../../include/Glacier/SessionManager.h ../../include/IceUtil/Base64.h ../../include/IceSSL/CertificateVerifierF.h ../../include/IceSSL/Plugin.h ../../include/Ice/Plugin.h +GlacierRouter.o: GlacierRouter.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/RoutingTable.h ../../include/Ice/RoutingTableF.h ../Glacier/RouterI.h ../../include/Glacier/Router.h ../../include/Ice/Router.h ../../include/Glacier/SessionF.h ../../include/Glacier/SessionManagerF.h ../Glacier/ClientBlobject.h ../Glacier/Blobject.h ../Glacier/Missive.h ../../include/IceUtil/Thread.h ../Glacier/ServerBlobject.h ../../include/Glacier/SessionManager.h ../../include/IceUtil/Base64.h ../../include/IceSSL/CertificateVerifierF.h ../../include/IceSSL/Plugin.h ../../include/Ice/Plugin.h RouterI.o: RouterI.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../Glacier/RouterI.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Glacier/Router.h ../../include/Ice/Router.h ../../include/Glacier/SessionF.h ../../include/Glacier/SessionManagerF.h ../../include/Glacier/Session.h ../../include/Glacier/SessionManager.h -ClientBlobject.o: ClientBlobject.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/IdentityUtil.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../Glacier/ClientBlobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h -ServerBlobject.o: ServerBlobject.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../Glacier/ServerBlobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h +Blobject.o: Blobject.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../Glacier/Blobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../Glacier/Missive.h ../../include/IceUtil/Thread.h +ClientBlobject.o: ClientBlobject.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/IdentityUtil.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../Glacier/ClientBlobject.h ../Glacier/Blobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../Glacier/Missive.h ../../include/IceUtil/Thread.h +ServerBlobject.o: ServerBlobject.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Lock.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../Glacier/ServerBlobject.h ../Glacier/Blobject.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../Glacier/Missive.h ../../include/IceUtil/Thread.h +Missive.o: Missive.cpp ../Glacier/Missive.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/IceUtil/Thread.h GlacierStarter.o: GlacierStarter.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../Glacier/StarterI.h ../../include/IceSSL/RSACertificateGen.h ../../include/IceSSL/RSAKeyPairF.h ../../include/Glacier/Starter.h ../../include/Glacier/Router.h ../../include/Ice/Router.h ../../include/Glacier/SessionF.h StarterI.o: StarterI.cpp ../../include/IceUtil/UUID.h ../../include/IceUtil/Config.h ../../include/IceSSL/RSAKeyPair.h ../../include/IceUtil/Shared.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/IceSSL/RSAKeyPairF.h ../../include/IceSSL/RSACertificateGenF.h ../../include/IceSSL/RSAPrivateKeyF.h ../../include/IceSSL/RSAPublicKeyF.h ../Glacier/StarterI.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/IceSSL/RSACertificateGen.h ../../include/Glacier/Starter.h ../../include/Glacier/Router.h ../../include/Ice/Router.h ../../include/Glacier/SessionF.h diff --git a/cpp/src/Glacier/Blobject.cpp b/cpp/src/Glacier/Blobject.cpp index bbbfdfbc365..ca3c123dbe1 100644 --- a/cpp/src/Glacier/Blobject.cpp +++ b/cpp/src/Glacier/Blobject.cpp @@ -17,7 +17,7 @@ using namespace Glacier; Glacier::Blobject::Blobject(const CommunicatorPtr& communicator) : _communicator(communicator), - _logger(_communicator->getLogger()) + _logger(communicator->getLogger()) { } @@ -49,6 +49,63 @@ Glacier::Blobject::destroy() } +bool +Glacier::Blobject::invoke(ObjectPrx& proxy, const vector<Byte>& inParams, vector<Byte>& outParams, + const Current& current) +{ + try + { + MissiveQueuePtr missiveQueue = modifyProxy(proxy, current); + + if (missiveQueue) // Batch routing? + { + missiveQueue->add(new Missive(proxy, inParams, current, _forwardContext)); + return true; + } + else // Regular routing. + { + if (_traceLevel >= 2) + { + Trace out(_logger, "Glacier"); + if (reverse()) + { + out << "reverse "; + } + out << "routing to:\n" + << "proxy = " << _communicator->proxyToString(proxy) << '\n' + << "operation = " << current.operation << '\n' + << "nonmutating = " << (current.nonmutating ? "true" : "false"); + } + + if (_forwardContext) + { + return proxy->ice_invoke(current.operation, current.nonmutating, inParams, outParams, current.context); + } + else + { + return proxy->ice_invoke(current.operation, current.nonmutating, inParams, outParams); + } + } + } + catch (const Exception& ex) + { + if (_traceLevel >= 1) + { + Trace out(_logger, "Glacier"); + if (reverse()) + { + out << "reverse "; + } + out << "routing exception:\n" << ex; + } + + ex.ice_throw(); + } + + assert(false); + return true; // To keep the compiler happy. +} + MissiveQueuePtr Glacier::Blobject::modifyProxy(ObjectPrx& proxy, const Current& current) { @@ -129,7 +186,7 @@ Glacier::Blobject::getMissiveQueue() IceUtil::Mutex::Lock lock(_missiveQueueMutex); if (!_missiveQueue) { - _missiveQueue = new MissiveQueue; + _missiveQueue = new MissiveQueue(_communicator, _traceLevel, reverse(), _batchSleepTime); _missiveQueueControl = _missiveQueue->start(); } return _missiveQueue; diff --git a/cpp/src/Glacier/Blobject.h b/cpp/src/Glacier/Blobject.h index 836db558d0f..3c362e771c0 100644 --- a/cpp/src/Glacier/Blobject.h +++ b/cpp/src/Glacier/Blobject.h @@ -23,15 +23,22 @@ public: Blobject(const Ice::CommunicatorPtr&); virtual ~Blobject(); + + virtual bool reverse() = 0; void destroy(); - virtual MissiveQueuePtr modifyProxy(Ice::ObjectPrx&, const Ice::Current&); + bool invoke(Ice::ObjectPrx&, const std::vector<Ice::Byte>&, std::vector<Ice::Byte>&, const Ice::Current&); + MissiveQueuePtr modifyProxy(Ice::ObjectPrx&, const Ice::Current&); protected: Ice::CommunicatorPtr _communicator; Ice::LoggerPtr _logger; + int _traceLevel; + bool _forwardContext; + IceUtil::Time _batchSleepTime; + private: MissiveQueuePtr getMissiveQueue(); diff --git a/cpp/src/Glacier/ClientBlobject.cpp b/cpp/src/Glacier/ClientBlobject.cpp index d9df798fc38..118c394b4b4 100644 --- a/cpp/src/Glacier/ClientBlobject.cpp +++ b/cpp/src/Glacier/ClientBlobject.cpp @@ -25,6 +25,9 @@ Glacier::ClientBlobject::ClientBlobject(const CommunicatorPtr& communicator, { PropertiesPtr properties = _communicator->getProperties(); _traceLevel = properties->getPropertyAsInt("Glacier.Router.Trace.Client"); + _forwardContext = properties->getPropertyAsInt("Glacier.Router.Client.ForwardContext") > 0; + _batchSleepTime = IceUtil::Time::milliSeconds( + properties->getPropertyAsIntWithDefault("Glacier.Router.Client.BatchSleepTime", 250)); const string ws = " \t"; string::size_type current = allowCategories.find_first_not_of(ws, 0); @@ -40,6 +43,12 @@ Glacier::ClientBlobject::ClientBlobject(const CommunicatorPtr& communicator, _allowCategories.erase(unique(_allowCategories.begin(), _allowCategories.end()), _allowCategories.end()); } +bool +Glacier::ClientBlobject::reverse() +{ + return false; +} + void Glacier::ClientBlobject::destroy() { @@ -75,43 +84,13 @@ Glacier::ClientBlobject::ice_invoke(const vector<Byte>& inParams, vector<Byte>& } } - try - { - ObjectPrx proxy = _routingTable->get(current.identity); - - if (!proxy) - { - ObjectNotExistException ex(__FILE__, __LINE__); - ex.identity = current.identity; - throw ex; - } - - MissiveQueuePtr missiveQueue = modifyProxy(proxy, current); - assert(!missiveQueue); - - if (_traceLevel >= 2) - { - Trace out(_logger, "Glacier"); - out << "routing to:\n" - << "proxy = " << _communicator->proxyToString(proxy) << '\n' - << "operation = " << current.operation << '\n' - << "nonmutating = " << (current.nonmutating ? "true" : "false"); - } - - // TODO: Should we forward the context? Perhaps a config parameter? - return proxy->ice_invoke(current.operation, current.nonmutating, inParams, outParams, current.context); - } - catch (const Exception& ex) + ObjectPrx proxy = _routingTable->get(current.identity); + if (!proxy) { - if (_traceLevel >= 1) - { - Trace out(_logger, "Glacier"); - out << "routing exception:\n" << ex; - } - - ex.ice_throw(); + ObjectNotExistException ex(__FILE__, __LINE__); + ex.identity = current.identity; + throw ex; } - assert(false); - return true; // To keep the compiler happy. + return invoke(proxy, inParams, outParams, current); } diff --git a/cpp/src/Glacier/ClientBlobject.h b/cpp/src/Glacier/ClientBlobject.h index 2242f564720..cb866f6a4ac 100644 --- a/cpp/src/Glacier/ClientBlobject.h +++ b/cpp/src/Glacier/ClientBlobject.h @@ -23,12 +23,13 @@ public: ClientBlobject(const Ice::CommunicatorPtr&, const IceInternal::RoutingTablePtr&, const std::string&); + virtual bool reverse(); + void destroy(); virtual bool ice_invoke(const std::vector<Ice::Byte>&, std::vector<Ice::Byte>&, const Ice::Current&); private: - int _traceLevel; IceInternal::RoutingTablePtr _routingTable; std::vector<std::string> _allowCategories; }; diff --git a/cpp/src/Glacier/Missive.cpp b/cpp/src/Glacier/Missive.cpp index 6faedc57426..3f489da15aa 100644 --- a/cpp/src/Glacier/Missive.cpp +++ b/cpp/src/Glacier/Missive.cpp @@ -14,20 +14,27 @@ using namespace std; using namespace Ice; using namespace Glacier; -Glacier::Missive::Missive(const ObjectPrx& proxy, const vector<Byte>& inParams, const Current& current) : +Glacier::Missive::Missive(const ObjectPrx& proxy, const vector<Byte>& inParams, const Current& current, + bool forwardContext) : _proxy(proxy), _inParams(inParams), - _current(current) + _current(current), + _forwardContext(forwardContext) { } -ObjectPrx +void Glacier::Missive::invoke() { - // TODO: Should we forward the context? Perhaps a config parameter? std::vector<Byte> dummy; - _proxy->ice_invoke(_current.operation, _current.nonmutating, _inParams, dummy, _current.context); - return _proxy; + if (_forwardContext) + { + _proxy->ice_invoke(_current.operation, _current.nonmutating, _inParams, dummy, _current.context); + } + else + { + _proxy->ice_invoke(_current.operation, _current.nonmutating, _inParams, dummy); + } } bool @@ -36,7 +43,24 @@ Glacier::Missive::override(const MissivePtr& missive) return false; } -Glacier::MissiveQueue::MissiveQueue() : +const ObjectPrx& +Glacier::Missive::getProxy() const +{ + return _proxy; +} + +const Current& +Glacier::Missive::getCurrent() const +{ + return _current; +} + +Glacier::MissiveQueue::MissiveQueue(const Ice::CommunicatorPtr& communicator, int traceLevel, bool reverse, + const IceUtil::Time& _sleepTime) : + _communicator(communicator), + _logger(communicator->getLogger()), + _traceLevel(traceLevel), + _reverse(reverse), _destroy(false) { } @@ -45,6 +69,7 @@ Glacier::MissiveQueue::~MissiveQueue() { assert(_destroy); assert(_missives.empty()); + assert(!_communicator); } void @@ -54,6 +79,8 @@ Glacier::MissiveQueue::destroy() _destroy = true; _missives.clear(); + _communicator = 0; + _logger = 0; notify(); } @@ -110,20 +137,40 @@ Glacier::MissiveQueue::run() { try { - proxies.push_back((*p)->invoke()); + const ObjectPrx& proxy = (*p)->getProxy(); + const Current& current = (*p)->getCurrent(); + + if (_traceLevel >= 2) + { + Trace out(_logger, "Glacier"); + if (_reverse) + { + out << "reverse "; + } + out << "batch routing to:\n" + << "proxy = " << _communicator->proxyToString(proxy) << '\n' + << "operation = " << current.operation << '\n' + << "nonmutating = " << (current.nonmutating ? "true" : "false"); + } + + (*p)->invoke(); + proxies.push_back(proxy); } catch (const Ice::Exception& ex) { - // - // Remember exception and destroy the missive queue. - // - _destroy = true; - _missives.clear(); - _exception = std::auto_ptr<Ice::Exception>(ex.ice_clone()); - return; + if (_traceLevel >= 1) + { + Trace out(_logger, "Glacier"); + if (_reverse) + { + out << "reverse "; + } + out << "batch routing exception:\n" << ex; + } } - _missives.clear(); } + + _missives.clear(); } // @@ -136,8 +183,8 @@ Glacier::MissiveQueue::run() // // This sends all batched missives. // - sort(proxies.begin(), proxies.end()); - proxies.erase(unique(proxies.begin(), proxies.end()), proxies.end()); +// sort(proxies.begin(), proxies.end()); +// proxies.erase(unique(proxies.begin(), proxies.end()), proxies.end()); vector<ObjectPrx>::const_iterator p; for (p = proxies.begin(); p != proxies.end(); ++p) { @@ -148,21 +195,24 @@ Glacier::MissiveQueue::run() // In order to avoid flooding the missive receivers, we add // a delay between sending missives. // - // TODO: Configurable. - // - IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(250)); + if (_sleepTime > IceUtil::Time()) + { + IceUtil::ThreadControl::sleep(_sleepTime); + } } catch (const Ice::Exception& ex) { IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); - // - // Remember exception and destroy the missive queue. - // - _destroy = true; - _missives.clear(); - _exception = std::auto_ptr<Ice::Exception>(ex.ice_clone()); - return; + if (_traceLevel >= 1) + { + Trace out(_logger, "Glacier"); + if (_reverse) + { + out << "reverse "; + } + out << "batch routing exception:\n" << ex; + } } } } diff --git a/cpp/src/Glacier/Missive.h b/cpp/src/Glacier/Missive.h index ba72fa26aac..7090ec5897b 100644 --- a/cpp/src/Glacier/Missive.h +++ b/cpp/src/Glacier/Missive.h @@ -25,16 +25,19 @@ class Missive : virtual public IceUtil::Shared { public: - Missive(const Ice::ObjectPrx&, const std::vector<Ice::Byte>&, const Ice::Current&); + Missive(const Ice::ObjectPrx&, const std::vector<Ice::Byte>&, const Ice::Current&, bool); - virtual Ice::ObjectPrx invoke(); - virtual bool override(const MissivePtr&); + void invoke(); + bool override(const MissivePtr&); + const Ice::ObjectPrx& getProxy() const; + const Ice::Current& getCurrent() const; private: - const Ice::ObjectPrx _proxy; - const std::vector<Ice::Byte>& _inParams; + Ice::ObjectPrx _proxy; + std::vector<Ice::Byte> _inParams; Ice::Current _current; + bool _forwardContext; }; class MissiveQueue; @@ -44,7 +47,7 @@ class MissiveQueue : virtual public IceUtil::Thread, IceUtil::Monitor<IceUtil::M { public: - MissiveQueue(); + MissiveQueue(const Ice::CommunicatorPtr&, int, bool, const IceUtil::Time&); virtual ~MissiveQueue(); void destroy(); @@ -52,11 +55,15 @@ public: virtual void run(); -protected: +private: + + Ice::CommunicatorPtr _communicator; + Ice::LoggerPtr _logger; + int _traceLevel; + bool _reverse; + IceUtil::Time _sleepTime; - Ice::ObjectPrx _proxy; std::vector<MissivePtr> _missives; - std::auto_ptr<Ice::Exception> _exception; bool _destroy; }; diff --git a/cpp/src/Glacier/ServerBlobject.cpp b/cpp/src/Glacier/ServerBlobject.cpp index 6f9c0f74064..7ffb82f700d 100644 --- a/cpp/src/Glacier/ServerBlobject.cpp +++ b/cpp/src/Glacier/ServerBlobject.cpp @@ -16,11 +16,20 @@ using namespace Ice; using namespace Glacier; Glacier::ServerBlobject::ServerBlobject(const ObjectAdapterPtr& clientAdapter) : - Glacier::Blobject(_clientAdapter->getCommunicator()), + Glacier::Blobject(clientAdapter->getCommunicator()), _clientAdapter(clientAdapter) { PropertiesPtr properties = _communicator->getProperties(); _traceLevel = properties->getPropertyAsInt("Glacier.Router.Trace.Server"); + _forwardContext = properties->getPropertyAsInt("Glacier.Router.Server.ForwardContext") > 0; + _batchSleepTime = IceUtil::Time::milliSeconds( + properties->getPropertyAsIntWithDefault("Glacier.Router.Server.BatchSleepTime", 250)); +} + +bool +Glacier::ServerBlobject::reverse() +{ + return true; } void @@ -39,37 +48,8 @@ Glacier::ServerBlobject::ice_invoke(const vector<Byte>& inParams, vector<Byte>& { assert(_clientAdapter); // Destroyed? - try - { - ObjectPrx proxy = _clientAdapter->createReverseProxy(current.identity); - assert(proxy); - - MissiveQueuePtr missiveQueue = modifyProxy(proxy, current); - assert(!missiveQueue); - - if (_traceLevel >= 2) - { - Trace out(_logger, "Glacier"); - out << "reverse routing to:\n" - << "proxy = " << _communicator->proxyToString(proxy) << '\n' - << "operation = " << current.operation << '\n' - << "nonmutating = " << (current.nonmutating ? "true" : "false"); - } - - // TODO: Should we forward the context? Perhaps a config parameter? - return proxy->ice_invoke(current.operation, current.nonmutating, inParams, outParams, current.context); - } - catch (const Exception& ex) - { - if (_traceLevel >= 1) - { - Trace out(_logger, "Glacier"); - out << "reverse routing exception:\n" << ex; - } - - ex.ice_throw(); - } + ObjectPrx proxy = _clientAdapter->createReverseProxy(current.identity); + assert(proxy); - assert(false); - return true; // To keep the compiler happy. + return invoke(proxy, inParams, outParams, current); } diff --git a/cpp/src/Glacier/ServerBlobject.h b/cpp/src/Glacier/ServerBlobject.h index 7b800b4059f..d28ac9e9515 100644 --- a/cpp/src/Glacier/ServerBlobject.h +++ b/cpp/src/Glacier/ServerBlobject.h @@ -22,13 +22,14 @@ public: ServerBlobject(const Ice::ObjectAdapterPtr&); + virtual bool reverse(); + void destroy(); virtual bool ice_invoke(const std::vector<Ice::Byte>&, std::vector<Ice::Byte>&, const Ice::Current&); private: Ice::ObjectAdapterPtr _clientAdapter; - int _traceLevel; }; } diff --git a/cpp/src/Glacier/StarterI.cpp b/cpp/src/Glacier/StarterI.cpp index a8eef0ca0f8..1763e844336 100644 --- a/cpp/src/Glacier/StarterI.cpp +++ b/cpp/src/Glacier/StarterI.cpp @@ -192,7 +192,7 @@ Glacier::StarterI::startRouter(const string& userId, const string& password, Byt if (!_properties->getProperty("Glacier.Starter.AddUserToAllowCategories").empty()) { args.push_back("--Glacier.Router.AllowCategories=" + - _properties->getProperty("Glacier.Router.AllowCategories") + string(" ") + userId); + _properties->getProperty("Glacier.Router.AllowCategories") + " " + userId); } ostringstream s; |