Archived

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

Server Update

Hi,

Here is my scenario. I have 3 nodes running version 1.0 application. Now, I want to migrate the application to version 2.0. However, we want the migration to be seamless, meaning,

a. Update node1 with version 2.0, while the nodes 2 and 3 are still serving with version 1.0.
b. Node1 has application 2.0, Nodes 2 and 3 have application 1.0
c. Now update node 2 with version 2.0
d. Node1 and 2 have application 2.0, node 3 has 1.0
e. Continue for remaining node/s


Can this be accomplished using icegrid admin or programmatically?

Thanks,
Jeeva

Comments

  • You will probably find "Can a Leopard Change its Spots?" in Issue 8 of Connections useful reading.

    Cheers,

    Michi.
  • Thanks.

    I understand that we could use facets if there are any changes/updates to the ice interfaces.

    However, in our case, the interface remains the same and the implementation changes/updates with enhancements and fixes.

    I was wondering if we could use IcePatch2client. But I get error as below,

    E:\Ice-3.3.0>icepatch2client --IcePatch2.Endpoints="tcp -h <server host> -p 55599" E:\Ice-3.3.0\IceGrid\TestIceNode4\distrib
    icepatch2client: Outgoing.cpp:422: Ice::ObjectNotExistException:
    object does not exist:
    identity: `IcePatch2/server'
    facet:
    operation: ice_isA

    In the server side I see the object as below:
    >>> object list
    <app-name>.IcePatch2/server

    Any guidelines?

    Thanks,
    Jeeva
  • The following command worked:

    E:\Ice-3.3.0>icepatch2client --IcePatch2.Endpoints="tcp -h <server host> -p 55599" --IcePatch2.InstanceName=<app-name>.IcePatch2 E:\Ice-3.3.0\IceGrid\TestIceNode4\distrib

    This way, we re able to update only a particular applications binaries in one node at a time.

    The other approach we are thinking of is: disable, stop server on node1, recalc sum for the new binaries, patch the node (path on other running nodes should fail while it succeeds on node1), enable, start the server on node1.

    Do we have other/better approaches ?

    Thanks,
    Jeeva
  • benoit
    benoit Rennes, France
    Hi,

    Did you try the icegridadmin server patch command? It should take care of stopping the server (and eventually other servers running on the node that depend on the same application if you use application distributions) and updating the application and server distribution. See the Ice manual (here) for more information on server and application distributions.

    Cheers,
    Benoit.
  • Thanks Benoit. Your input helped. We used,
    >>>server patch <servername> -f
    One more thing to note is: the patch server has to be stopped before patching the server
    >>>server stop <appname>.IcePatch2

    So the sequence is:
    1. Recalculate icepatch sum (icepatch2calc)
    2. Stop icepatch2 server for the application (server stop <appname>.IcePatch2),
    3. Patch the server (server patch <servername> -f)

    Thanks again,
    Jeeva
  • benoit
    benoit Rennes, France
    Hi,

    It would be best to stop the IcePatch2 server while running icepatch2calc. Otherwise, if an IceGrid node tries to patch a server or application while icepatch2calc is running, the IcePatch2 server might send it invalid data. So I would recommend to do the following instead:
    • server disable <appname>.IcePatch2
    • server stop <appname>.IcePatch2
    • run icepatch2calc
    • server enable <appname>.IcePatch2
    • server patch -f <servername>

    Disabling the IcePatch2 server while icepatch2calc is running will ensure that it's not started on-demand.

    Cheers,
    Benoit.
  • How can I diagnose IcePatch2 'patch' problem

    Hi Benoit,

    I wonder if you can advise on how I can get more diagnostic information on a patch problem I'm having.


    I have this setup -

    Host 1 - IceGrid with 'DataServicePatcher.IcePatch2' specifying endpoints "tcp -p 6501' and local source distribution directory 'D'
    Host 2 - IceGrid with one application 'A' configured to get its distribution from above IcePatch2Server (via endpoints "tcp -h Host1 -p 6501") to an identical local directory 'D'

    Sequence of events -
    1. Stop DataServicePatcher.IcePatch2 on Host 1
    2. Run IcePatch2Calc on directory D of Host 1
    3. Restart DataServicePatcher.IcePatch2 on Host 1
    4. run icegridadmin (from any host - shouldn't matter) targeting IceGrid of Host 2 with command to patch application 'A'

    This does not seem to work though no error is shown on the IceGridAdmin console output.

    I have carefully checked my setup but cannot spot what I'm doing wrong.

    Thanks for any pointers you can give me to get more diagnostic information so I can solve this.

    Regards,
    Alan