Archived

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

IceStorm with Glacier2

In order to use Glacier2 with IceStorm applications, does one needs to write session code for both the publisher and the subscriber applications? I mean, even though the subscriber is the application "server" that hosts the object adapter, both the publisher and the subscriber act as "clients" to IceStorm.

So, if the IceStorm instance you wish to communicate with is behind a Glacier2 router on the network, you would need to create a Glacier2 session regardless of the role (pub or sub) of the IceStorm application?

Comments

  • matthew
    matthew NL, Canada
    That is correct. If you have IceStorm in your internal network, and the publishers and subscribers on your external network, then you will need them to establish Glacier2 sessions (and everything associated with that, such as keeping the session alive) for them to talk with IceStorm.
  • If my IceStorm subscriber connects to a number of different IceStorm servers in order to subscribe to multiple topics, with no regard to their network location, does that not demand the use of two object adapters, with one adapter dedicated to subscriptions to the LAN-side IceStorm instance?

    I am using the PublishedEndpoints mechanism:
    Subscriber.Adapter.Endpoints=<actual LAN endpoints>
    Subscriber.Adapter.PublishedEndpoints=<WAN endpoints, as seen externally>
    

    to enable my subscriber to receive callbacks from WAN-side IceStorm instances through a hardware router that port-forwards, etc. If my subscriber happens to connect both to local and remote IceStorm instances, the WAN-side published address embedded in the adapter's proxy might be not be usable on the LAN side.

    Finally, back to Glacier2. Is possible for an IceStorm application, be it subscriber or publisher, simply not to know whether or not a peer is behind Glacier2 router? Or does the deployment of Glacier2 demand advertisement so that peers can configure for its use?
  • matthew
    matthew NL, Canada
    In that case you should use more than one object adapter. If you use Glacier2 at the IceStorm end, you don't need to use port forwarding at all, since all communications back to your subscriber will be bi-directional. However, using more than a single instance of Glacier2 in an application can get quite complex and isn't really recommended!

    Any Glacier2 client must be aware of Glacier2 since it must establish a session before Glacier2 will forward requests and replies. Servers behind the firewall need not be aware of Glacier2.
  • Hi,

    Object* ice_router(Router* rtr);

    Is it possible to create the Router* parameter from a string representation of the router's address? In other words I want to create a routed proxy without using the name.Router property of the config file. My (c++) app is structured to create proxies from strings, without using the config file.

    Is that possible?

    Also, are the (bi-directional) callbacks from servers over a Glacier2 routed connection considered activity with respect to the session timeout of the Glacier2?

    Thanks,

    Phil
  • benoit
    benoit Rennes, France
    Hi Phil,
    phil++ wrote: »
    Hi,

    Object* ice_router(Router* rtr);

    Is it possible to create the Router* parameter from a string representation of the router's address? In other words I want to create a routed proxy without using the name.Router property of the config file. My (c++) app is structured to create proxies from strings, without using the config file.

    Is that possible?

    Sure, just use the communicator stringToProxy method and cast the proxy to an Ice::RouterPrx with unchechedCast or checkedCast.
    Also, are the (bi-directional) callbacks from servers over a Glacier2 routed connection considered activity with respect to the session timeout of the Glacier2?

    Thanks,

    Phil

    No, the session timeout is only based on client side activity (changing this to also take into account server side activity is on our TODO list).

    Cheers,
    Benoit.
  • Thanks Benoit.

    Am I correct that the only way to ice_ping() a Glacier2 session is if the router has a SessionManager installed? With no session manager you get null back from createSession and you have no proxy to work with. But, implementing a session manager on the router solely for the purpose of keeping a connection alive seems odd to me.

    [edit: Ah, the docs do state that I can ping an object in the server in lieu of a session proxy. OK, I will try periodically pinging the IceStorm topic manager as that seems to be the logical object in my case.]

    Phil
  • matthew
    matthew NL, Canada
    Yes, that is also on the TODO list :)