[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