Task #2485 (new)
Opened 14 years ago
Last modified 11 years ago
Bug: Mage/4064 refuses outside connections — at Version 15
Reported by: | jamoore | Owned by: | jamoore |
---|---|---|---|
Priority: | blocker | Milestone: | OME-5.0 |
Component: | Deployment | Version: | n.a. |
Keywords: | n.a. | Cc: | omero-team@… |
Resources: | n.a. | Referenced By: | n.a. |
References: | n.a. | Remaining Time: | 2.5d |
Sprint: | n.a. |
Description (last modified by jmoore)
The exception thrown is ConnectTimeoutException which occurs as soon as Blitz attempts to access the proxy (e.g. prx.ice_id()).
This is due to missing bidirectional communication configuration in both the client and the server. Chapter 38 of the ZeroC manual explains both how to do this and its limitations.
The primary limitation for our usage is that the "fixed proxies" which get created are only of use in process. Since OMERO clients don't connect directly to IceStorm via Glacier2, there's no way to reuse the bidirectional connection.
Instead we will initially attempt to use a wrapper, routing the storm communication through the Blitz server and down to the client.
Similar configuration will be needed for all callbacks which come from the client:
components/blitz/resources $ git grep -E '\(.*[a-zA-Z][*].*\)' omero/API.ice: void subscribe(string topicName, Object* prx) throws ServerError; omero/API.ice: bool keepAlive(ServiceInterface* proxy) throws ServerError; // SAFE; PASSED OUT OF SERVER omero/Repositories.ice: void transfer(string srcPath, Repository* target, string targetPath) // SAFE; PASSSED OUT OF SERVER omero/Scripts.ice: void registerCallback(ProcessCallback* cb) throws omero::ServerError; omero/Scripts.ice: void unregisterCallback(ProcessCallback* cb) throws omero::ServerError; omero/Scripts.ice: void requestRunning(ProcessorCallback* cb); omero/Scripts.ice: omero::RMap getResults(Process* proc) throws ServerError; // SAFE; PASSED OUT OF SERVER omero/SharedResources.ice: addProcessor(omero::grid::Processor* proc) omero/SharedResources.ice: removeProcessor(omero::grid::Processor* proc)
See:
Change History (15)
comment:1 Changed 14 years ago by jmoore
comment:2 Changed 14 years ago by jmoore
comment:3 Changed 14 years ago by cxallan
- Sprint changed from 2010-05-27 (10) to 2010-06-10 (11)
comment:4 Changed 14 years ago by jmoore
- Description modified (diff)
comment:5 Changed 14 years ago by jmoore
- Description modified (diff)
comment:6 Changed 14 years ago by jmoore
comment:7 Changed 14 years ago by jmoore
- Milestone changed from OMERO-Beta4.2 to Unscheduled
- Priority changed from critical to blocker
- Sprint 2010-06-10 (11) deleted
This issue is going to require a significant rework and/or perhaps a patch to Ice. The current limitation is that if the client cannot be seen by the server, then many if not all callbacks will fail. (e.g ClientCallback, ProcessCallback, etc.) Pushing to unscheduled but as "blocker" so that this gets addressed as soon as possible.
comment:8 Changed 14 years ago by jmoore
comment:9 Changed 14 years ago by jmoore
Workarounds in Insight for 4.2.0:
comment:10 Changed 14 years ago by jmoore
- Milestone changed from Unscheduled to OMERO-Beta4.2.1
comment:11 Changed 14 years ago by jmoore
- Milestone changed from OMERO-Beta4.2.1 to Unscheduled
Moved to 4.2.1 because of a suspected workaround ("createObjectAdapterWithRouter") This, however, was shown to have further Ice-issues. First, Ice.stringToIdentity() on the output of routerPrx.getCategoryForClient() periodically throws an exception requiring one to create the Identity manually. Second, periodic close hangs. Holding off.
comment:12 Changed 13 years ago by jmoore
- Milestone changed from Unscheduled to OMERO-Beta4.3.2
From http://www.zeroc.com/forums/help-center/5418-bidir-links-cross-nat.html
A server can freely return proxies to a bidirectional client. The only limitation is that all of the proxies must resolve to the same connection; in general, this means the proxies should all refer to servants in the same object adapter. (The goal is usually for the client to have a single connection to the server, and using multiple object adapters in the server would require the client to create multiple connections.) The server must create the proxy for every callback object in the client. As shown in our Ice/bidir example, the client passes the identity of its callback object to the server, and the server creates the proxy that it uses to send callback requests. The server should not be requesting proxies from the client.
This is without Glacier2, but it may be a workaround for the issues that we've run into to
comment:13 Changed 13 years ago by jmoore
- Milestone changed from OMERO-Beta4.3.2 to OME-5.0
Again, not something we can do in a point release. Pushing.
comment:14 Changed 12 years ago by jmoore
- Cc omero-team@… added; bwzloranger cxallan jburel removed
- Remaining Time set to 2.5
- Summary changed from Mage/4064 refuses outside connections to Bug: Mage/4064 refuses outside connections
Bumping this issue after the sprint6 cleanup since other issues were tangentially related (e.g. #3191). Also marking as a bug so it won't slip through the cracks.
comment:15 Changed 12 years ago by jmoore
- Description modified (diff)
(In [7188]) see #2485 - tracking down server-side timeout