[omniORB] omniORB4 on Solaris: clientCallTimeOutPeriod and LOCATION_FORWARD
Lai, Patrick
Patrick.Lai@broadvision.com
Thu Dec 12 21:01:02 2002
I'm observing a problem with LOCATION_FORWARD when clientCallTimeOutPeriod
is non-zero. Here's the scenario:
- Server and client run on different machines.
- Server is launched by an activation agent. (Specifically, I'm using
Orbix 3.0.1 on the server side; the server is launched by orbixd.)
- omniORB4 client uses an IOR that points to the activation agent.
The server is not running when the client makes the call.
- When the requests comes to the activation agent, it assigns a port
for the server, launches it, and replies with LOCATION_FORWARD. Note
that the server may not be ready when the client starts using the
forward address.
Here's a level 10 trace (key truncated) when the client calls with a 10
second time-out (i.e. "-ORBclientCallTimeOutPeriod 10000"):
omniORB: LocateRequest to remote: key<0x3a5c31302e31302e...>
omniORB: AsyncInvoker: thread id = 1 has started. Total threads = 1
omniORB: Creating ref to remote: key<0x3a5c31302e31302e...>
target id : IDL:omg.org/CORBA/Object:1.0
most derived id:
omniORB: GIOP::LOCATION_FORWARD -- retry request.
omniORB: LocateRequest to remote: key<0x3a5c31302e31302e...>
omniORB: throw giopStream::CommFailure from
giopStream.cc:1078(0,NO,TRANSIENT_CallTimedout)
omniORB: Reverting object reference to original profile
omniORB: Invocation on a location forwarded object has failed. 0 retries.
omniORB: LocateRequest to remote: key<0x3a5c31302e31302e...>
omniORB: throw giopStream::CommFailure from
giopStream.cc:1078(0,NO,TRANSIENT_CallTimedout)
The CommFailure happens about 10 seconds after the invocation request. The
server is launched by the activation agent successfully, but the call fails
with TRANSIENT_CallTimedout on the client side.
With timeout disabled (i.e. "-ORBclientCallTimeOutPeriod 0"), the call goes
through. The trace looks like this:
omniORB: LocateRequest to remote: key<0x3a5c31302e...>
omniORB: AsyncInvoker: thread id = 1 has started. Total threads = 1
omniORB: Creating ref to remote: key<0x3a5c31302e...>
target id : IDL:omg.org/CORBA/Object:1.0
most derived id:
omniORB: GIOP::LOCATION_FORWARD -- retry request.
omniORB: LocateRequest to remote: key<0x3a5c31302e...>
omniORB: throw giopStream::CommFailure from
giopStream.cc:1078(0,NO,COMM_FAILURE_MarshalArguments)
omniORB: Reverting object reference to original profile
omniORB: Invocation on a location forwarded object has failed. 0 retries.
omniORB: LocateRequest to remote: key<0x3a5c31302e...>
omniORB: Creating ref to remote: key<0x3a5c31302e...>
target id : IDL:omg.org/CORBA/Object:1.0
most derived id:
omniORB: GIOP::LOCATION_FORWARD -- retry request.
omniORB: LocateRequest to remote: key<0x3a5c31302e31302e...>
I have no idea why it is a COMM_FAILURE_MarshalArguments.
Note that if the client and the server are running on the same machine, the
problem doesn't seem to happen. Here's a trace:
omniORB: LocateRequest to remote: key<0x3a5c31302e...>
omniORB: AsyncInvoker: thread id = 1 has started. Total threads = 1
omniORB: Creating ref to remote: key<0x3a5c31302e...>
target id : IDL:omg.org/CORBA/Object:1.0
most derived id:
omniORB: GIOP::LOCATION_FORWARD -- retry request.
omniORB: LocateRequest to remote: key<0x3a5c31302e31302e...>
omniORB: throw giopStream::CommFailure from
giopStream.cc:1045(0,NO,TRANSIENT_ConnectFailed)
omniORB: Reverting object reference to original profile
omniORB: Invocation on a location forwarded object has failed. 0 retries.
omniORB: LocateRequest to remote: key<0x3a5c31302e...>
omniORB: Creating ref to remote: key<0x3a5c31302e31302e...>
target id : IDL:omg.org/CORBA/Object:1.0
most derived id:
omniORB: GIOP::LOCATION_FORWARD -- retry request.
omniORB: LocateRequest to remote: key<0x3a5c31302e31302e...>
omniORB: throw giopStream::CommFailure from
giopStream.cc:1045(0,NO,TRANSIENT_ConnectFailed)
omniORB: Reverting object reference to original profile
omniORB: Invocation on a location forwarded object has failed. 1 retries.
omniORB: LocateRequest to remote: key<0x3a5c31302e31302e...>
target id : IDL:omg.org/CORBA/Object:1.0
most derived id:
omniORB: GIOP::LOCATION_FORWARD -- retry request.
omniORB: LocateRequest to remote: key<0x3a5c31302e31302e...>
A couple of TRANSIENT_ConnectFailed exceptions are expected, I suppose, as
it takes some time for the freshly launched server to become ready.
Are there some options I can use to resolve this? Thanks.
-- Patrick Lai