Archived
How to configure my invocation timeouts properties correctly when upgrading from 3.5 to 3.6
Hello all,
I recently came across a weird behaviour with Ice timeouts while trying to upgrade from 3.5.1 to 3.6.
1) Ice 3.5.1 is our current client-side version. Behavior is mostly as expected.
In python:
#
initData = Ice.InitializationData()
initData.properties = Ice.createProperties()
initData.properties.setProperty("Ice.Override.Timeout", "120000")
#
Good old timeout on a synchronous RPC after 120s. Satisfaction.
2) Now obviously we’re trying to upgrade our Ice to step up the steep version ladder, so moving on to Ice 3.6 :
Using exactly the same properties as above.
Timeout on a synchronous RPC after 60s. Puzzlement.
3) Now using the new shiny InvocationTimeout, which seemed to be the one I needed in 3.6
#
initData.properties.setProperty("Ice.Default.InvocationTimeout","30000")
#
Timeout on a synchronous RPC after 30s. Hope.
4) Last attempt, it doesn’t work over 60s (default timeout values haven’t been change and the documentation indicates it should be -1 / infinite )
#
initData.properties.setProperty("Ice.Default.InvocationTimeout","120000")
#
Timeout on a synchronous RPC after 60s. Disappointment.
Forums didn’t show a similar problem being described, and the documentation seems to clash with my experiments. I particularly do not understand why the timeoput seems capped at 60s (I can go under, which means my property does have some influence, but not over the 60s)
Conclusion is, clearly I’m not using the properties correctly, and would welcome any help in making my configuration compatible
Thanks !
Comments
-
Hi Guillaume,
Since you're in the process of upgrading, I strongly recommend to upgrade directly to Ice 3.7 instead of 3.6.
You should definitely be able to get a 120s invocation timeout. What is the exception you are getting in scenario #4? Is it an
Ice::InvocationTimeoutException
or anIce::ConnectiontTimeoutException
? Are both the client and server using Ice 3.6 or do you still use Ice 3.5 for the server?Invocation timeouts rely on the server sending "heartbeats" while the long running invocation is being dispatch. If the server is still running 3.5, it won't send heartbeats and the Ice 3.6 client will mistakenly assume that the server is gone, the default 60s connection timeout will therefore kick in.
See the following link for additional information on upgrading timeouts from 3.5:
https://doc.zeroc.com/ice/3.7/release-notes/upgrading-your-application-from-ice-3-5#id-.UpgradingyourApplicationfromIce3.5v3.7-TimeoutchangesCheers,
Benoit.5