Ticket #1078 (new defect)
Opened 3 months ago
Deadlocks in client when talking to Blitz
| Reported by: | jmoore | Owned by: | jmoore |
|---|---|---|---|
| Priority: | critical | Milestone: | OMERO-Beta4 |
| Component: | Client | Version: | 3.0-M1 |
| Keywords: | blitz, sdk, ice, deadlock | Cc: | callan, atarkowska, donald, cblackburn |
Description
Related to OmeroThrottling, there are cases (server-side bugs) in which the client can hang. Many of these have been fixed, and are related to missing try/finally blocks preventing ice_response() and ice_exception() from being called.
In general, such issues can be corrected by using the `Ice.Override.Timeout` on a client-wide basis or setting the timeout on a particular proxy:
proxy = proxy.ice_timeout(secs)
See http://zeroc.com/doc/Ice-3.3.0/manual/Adv_server.29.12.html for more, especially information on the fatality of timeouts:
"You should also be aware that timeouts are considered fatal error conditions by the Ice run time and result in connection closure on the client side. Furthermore, any other requests pending on the same connection also fail with an exception. Timeouts are meant to be used to prevent a client from blocking indefinitely in case something has gone wrong with the server; they are not meant as a mechanism to routinely abort requests that take longer than intended."
Please report any instances which you see. One in particular from Chris:
11:15:28 chris@jabber: If you get Ice.ConnectionException anywhere and then try and do anything with a service you're deadlocked.
...
11:16:36 chris@jabber: Last night when I had a running Python interpreter for testing I of course left it too long, then did s.createSession() again, hit a service I had before and then boom, deadlock.
...
11:17:40 chris@jabber: Basically:
11:17:49 chris@jabber: s = c.createSession("root", "ome")
11:18:01 chris@jabber: query = s.getQueryService()
11:18:07 chris@jabber: ... wait some time
11:18:21 chris@jabber: query.findAllByQuery(...)
11:18:40 chris@jabber: Ice.ConnectionException (ie. session timeout)
11:18:56 chris@jabber: s = c.createSession("root", "ome")
11:19:07 chris@jabber: query.findAllByQuery(...)
11:19:13 chris@jabber: ... wait forever
