Archived

This forum has been archived. Please start a new discussion on GitHub.

BatchOneway Calls in Ice 3.3.1

Hi,

We have a ice server which receives, batch one way request for logging traces. This was working till we replace Ice with 3.3.1 version. Now we get
connection timeout exceptions.

Environment: Linux

Is there any specific changes done for batchoneway calls in ice 3.3.1 version?

Regards
William

Comments

  • benoit
    benoit Rennes, France
    Hi William,

    This is unfortunately a bug we discovered few days ago. The Ice runtime in 3.3.x is more strict when it comes to batch one-way invocations. If the proxy is associated with a connection which has been closed, the batch one-way request will throw to ensure that the user application is correctly notified of the connection failure (previous batch one-way invocations might have been lost as a result of the connection failure).

    Of course, this shouldn't occur for ConnectionCloseTimeout since this indicates that the connection has been closed by ACM and ACM only closes connections with no pending batch one-way requests.

    To work around this issue for now you can just catch this exception and retry, for example:
           try
           {
                try
                {
                     proxy.trace(message);
                }
                catch(Ice.ConnectionTimeoutException ex)
                {
                    proxy.trace(message); // Retry
                }
           }
           catch(Ice.LocalException ex)
           {
                // The batch request failed, this can happen if the connection failed.  You
                // should handle the failure appropriately here.
           }
    

    You could also disable client side ACM with Ice.ACM.Client=0 if your application opens only a fixed set of connections (connections will only be closed on communicator destruction if you disable client side ACM). This will be fixed in the next release.

    Cheers,
    Benoit.