[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