Problem with routed callbacks

in Help Center
I am trying to use callbacks through Glacier2 using Ice 3.4.1.
My setup is the following:
I have a network divided into two sites. Between the two sites there is a firewall.
The registry has access to the two networks and carries an IceStorm.
What I want to do:
1) Using IceStorm broadcast a query from side A of the network to side B. This is straightforward since the host running IceStorm has access to the two sides of the network.
2) Servers on the side B are subscribers and receive queries. Subscribers that can handle the request send an answer to the query issuer through a proxy that has been sent as part of the request.
3) Since servers on side B are unable to open connections on host on side A, I decided to use the Glacier2 callback mechanism.
The solution I tried to implement:
- on host A, open a session with a glacier2 router located on the registry node
- on host A, I created a routed adapter obtained using createObjectAdapterWithRouter. It is used to plug the callback servant that should be invoked through Glacier2.
What I get:
1) The query sent by A goes through IceStorm and is received by B. I does not flow through Glacier
2) B then calls A's routed proxy. Sniffing the network confirmed that the answer sent by B is actually sent to Glacier2 server endpoints
3) So far so good. From what I have understood the Glacier2 session opened by A is used to carry back the answer to A. Sniffing the network I could not see this answer.
4) The answer is not received by the client.
I am stuck in this situation: the Glacier2 router does not actually forwards the callback.
My questions:
- Could you confirm that what I am trying to implement is a viable scenario ?
- How to debug the whole stuff? Glacier2 logs don't output messages when I add Glacier2.Trace.Client=1 and Glacier2.Trace.Server=1 to the glacier configuration file.
Furthermore, I noticed a *very* strange behaviour that is related. Another part of my process is to publish data from hosts of side B to hosts of side A. Sniffing the network, I noticed that the data published by B is sent through Glacier2 (using the server endpoints) once the routed callback has been received by B. Could it be that on a routed proxy invocation, B stores the router endpoints and use them as the default router ?
My setup is the following:
I have a network divided into two sites. Between the two sites there is a firewall.
The registry has access to the two networks and carries an IceStorm.
What I want to do:
1) Using IceStorm broadcast a query from side A of the network to side B. This is straightforward since the host running IceStorm has access to the two sides of the network.
2) Servers on the side B are subscribers and receive queries. Subscribers that can handle the request send an answer to the query issuer through a proxy that has been sent as part of the request.
3) Since servers on side B are unable to open connections on host on side A, I decided to use the Glacier2 callback mechanism.
The solution I tried to implement:
- on host A, open a session with a glacier2 router located on the registry node
- on host A, I created a routed adapter obtained using createObjectAdapterWithRouter. It is used to plug the callback servant that should be invoked through Glacier2.
What I get:
1) The query sent by A goes through IceStorm and is received by B. I does not flow through Glacier
2) B then calls A's routed proxy. Sniffing the network confirmed that the answer sent by B is actually sent to Glacier2 server endpoints
3) So far so good. From what I have understood the Glacier2 session opened by A is used to carry back the answer to A. Sniffing the network I could not see this answer.
4) The answer is not received by the client.
I am stuck in this situation: the Glacier2 router does not actually forwards the callback.
My questions:
- Could you confirm that what I am trying to implement is a viable scenario ?
- How to debug the whole stuff? Glacier2 logs don't output messages when I add Glacier2.Trace.Client=1 and Glacier2.Trace.Server=1 to the glacier configuration file.
Furthermore, I noticed a *very* strange behaviour that is related. Another part of my process is to publish data from hosts of side B to hosts of side A. Sniffing the network, I noticed that the data published by B is sent through Glacier2 (using the server endpoints) once the routed callback has been received by B. Could it be that on a routed proxy invocation, B stores the router endpoints and use them as the default router ?
0
Comments
Activating the Ice.Trace.Protocol value resulted in the log below. 'report' is the callback method.
Why do I get a 'object does not exist' error.
-- 08/27/10 18:57:24.933 FrankfortRouter: Protocol: received request
message type = 0 (request)
compression status = 0 (not compressed; do not compress response, if any)
message size = 15391
request id = 1
identity = NewAdapter
facet =
operation = report
mode = 0 (normal)
context =
-- 08/27/10 18:57:24.935 FrankfortRouter: Protocol: sending reply
message type = 2 (reply)
compression status = 0 (not compressed; do not compress response, if any)
message size = 39
request id = 1
reply status = 2 (object not exist)
identity = NewAdapter
facet =
operation = report
Creating an Ice::Identity and using the category from the session fixed the thing.