Archived

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

IcePack node monitoring

I've read section 20 of the manual and am interested
in how an IcePack node "monitors" a server process.
Several references are made to the fact that the node
can monitor a server, but cannot find anything that
says exactly how that is done.

We want to build an application that can periodically
get status information from our servers and hope
that we can use this capability.

Please point us to pertinent documentation.

Thanks,

Brian

Comments

  • benoit
    benoit Rennes, France
    Hi Brian,

    I'm sorry there isn't other documentation at this time on the IcePack node.

    The way the node works is fairly basic. The node takes care of starting your server when a request comes in. Then, the node will monitor the forked server process to eventually re-start it if the process crashes or exits and if another request comes in. The node can also request the server process to terminate.

    You can inquiry the state of a server with the IcePack admin tool or programatically with the IcePack::Admin (see ice/slice/IcePack/Admin.ice) interface. This tool or interface also allows you to start or stop remotely your servers.

    Have a look at the ice/demo/IcePack/hello for an example on how to deploy your server with an IcePack node.

    Hope this helps!

    Benoit.
  • Benoit,

    Thanks for the reply. Sorry for peppering you guys with questions, but
    we are in the process of trying to prototype something using ICE
    and are very excited about the possibilities, but just need to get going.

    First, on your suggestion, I looked at Ice::Admin and
    noticed there is a way to query
    the server state. Couple of questions:

    1) Is there a way to query the state of a specific service
    started by a server?

    2) Is there a way to have a server automatically notify
    a client if a service goes down -- e.g. via a callback??

    Also, would love to look at demo you suggest, but there is
    no ice/demo/IcePack/hello in the Windows installation. If, in fact,
    it is not there, could you please send it to me.

    Finally, tried the example in Section 20.8.6. Followed steps 1 and 2
    but when I tried to un

    icepacknode --Ice.Config=config

    I got this error:

    icepacknode: warning: administrative endpoints `IcePack.Registry.Admin.Endpoints' enabled
    Assertion failed: 0, file UUID.cpp, line 120
    Abort (core dumped)

    I must be doing something really wrong, but don't have a clue
    from this message. Help would be appreciated.

    Thanks again,

    Brian
  • benoit
    benoit Rennes, France
    Originally posted by brian
    Benoit,

    Thanks for the reply. Sorry for peppering you guys with questions, but
    we are in the process of trying to prototype something using ICE
    and are very excited about the possibilities, but just need to get going.

    I'm glad to hear this! Don't hesitate to ask questions on the forums, that's their purpose :D

    First, on your suggestion, I looked at Ice::Admin and
    noticed there is a way to query
    the server state. Couple of questions:

    1) Is there a way to query the state of a specific service
    started by a server?

    By service, I assume you mean IceBox service, if not can you detail a little what you mean by service?

    It's not possible to query the state of a specific IceBox service. When an IceBox server is started all the IceBox services are started. They are stopped when the IceBox server process terminates.

    Can you detail a little what state information you are interested in?

    2) Is there a way to have a server automatically notify
    a client if a service goes down -- e.g. via a callback??

    No, I'm afraid it's not currently possible to receive callbacks when a server goes down or up. Your server could easily do this though. It could notify a callback object when it starts or stops.


    Also, would love to look at demo you suggest, but there is
    no ice/demo/IcePack/hello in the Windows installation. If, in fact,
    it is not there, could you please send it to me.

    Finally, tried the example in Section 20.8.6. Followed steps 1 and 2
    but when I tried to un

    icepacknode --Ice.Config=config

    I got this error:

    icepacknode: warning: administrative endpoints `IcePack.Registry.Admin.Endpoints' enabled
    Assertion failed: 0, file UUID.cpp, line 120
    Abort (core dumped)

    I must be doing something really wrong, but don't have a clue
    from this message. Help would be appreciated.

    Thanks again,

    Brian

    IcePack is currently not supported on Windows. That's the reason why you won't find the IcePack demo. On which platform did you get this error with the icepacknode process? It certainly shouldn't abort here. Does the UUID test suite work on this platform (to run the uuid test suite execute Ice-1.2.0/test/IceUtil/uuid/run.py)?

    Benoit.
  • quote:

    First, on your suggestion, I looked at Ice::Admin and
    noticed there is a way to query
    the server state. Couple of questions:

    1) Is there a way to query the state of a specific service
    started by a server?


    It's not possible to query the state of a specific IceBox service. When an IceBox server is started all the IceBox services are started. They are stopped when the IceBox server process terminates.

    Can you detail a little what state information you are interested in?

    For example, let's say a server starts a Java program as
    a service. We want our client to somehow monitor if something
    "bad" happens to that program running in a server. One way
    to do this is for us to write our own inhouse "heartbeat" mechanism.
    This mechanism would periodically send "I'm okay" heartbeats from
    the Java program back to the client. If the client did not receive
    a heartbeat within a certain time period, it would assume the
    Java program (service) has terminated abnormally and would
    notify the user.

    We would like to avoid writing this heartbeat stuff to support
    monitoring if Ice does something better, but it sounds like
    you can only "monitor" a server, not a service that the
    server starts, correct?


    quote:

    2) Is there a way to have a server automatically notify
    a client if a service goes down -- e.g. via a callback??




    No, I'm afraid it's not currently possible to receive callbacks when a server goes down or up. Your server could easily do this though. It could notify a callback object when it starts or stops.

    Again, talking about a service started by a server, not the server itself.
    Also, not interested in normal starts or stops, but abnormal terminations.


    quote:


    Also, would love to look at demo you suggest, but there is
    no ice/demo/IcePack/hello in the Windows installation. If, in fact,
    it is not there, could you please send it to me.

    Finally, tried the example in Section 20.8.6. Followed steps 1 and 2
    but when I tried to un

    icepacknode --Ice.Config=config

    I got this error:

    icepacknode: warning: administrative endpoints `IcePack.Registry.Admin.Endpoints' enabled
    Assertion failed: 0, file UUID.cpp, line 120
    Abort (core dumped)

    I must be doing something really wrong, but don't have a clue
    from this message. Help would be appreciated.

    Thanks again,

    Brian



    IcePack is currently not supported on Windows. That's the reason why you won't find the IcePack demo. On which platform did you get this error with the icepacknode process? It certainly shouldn't abort here. Does the UUID test suite work on this platform (to run the uuid test suite execute Ice-1.2.0/test/IceUtil/uuid/run.py)?

    Sorry for the confusion, I'm actually running icepacknode on a Unix
    machine and that is where the error occurred.

    We have version 1.1.1, is there already a new version (1.2.0 that
    you mention above ) that is downloadable?

    When I try to run.py I get this:

    /usr/bin/env: No such file or directory

    (trying to contact our sys admin about this since
    /usr/bin/env does exist)

    When I make in that directory and run "client", I get this:

    Generating 10000 UUIds ... Assertion failed: 0, file UUID.cpp, line 120
    Abort (core dumped)


    What is the timeframe for IcePack support on Windows? We have
    both Unix and Windows machines that we want to use in
    a heterogenious environment to run servers on. Does it make
    sense to deploy IcePack on our Unix servers for indirect binding
    and use IceBox on Windows for now using direct binding or should
    we not confuse the issue and just use direct binding using IceBox
    on both platforms?
  • benoit
    benoit Rennes, France
    Originally posted by brian
    quote:
    For example, let's say a server starts a Java program as
    a service. We want our client to somehow monitor if something
    "bad" happens to that program running in a server. One way
    to do this is for us to write our own inhouse "heartbeat" mechanism.
    This mechanism would periodically send "I'm okay" heartbeats from
    the Java program back to the client. If the client did not receive
    a heartbeat within a certain time period, it would assume the
    Java program (service) has terminated abnormally and would
    notify the user.

    We would like to avoid writing this heartbeat stuff to support
    monitoring if Ice does something better, but it sounds like
    you can only "monitor" a server, not a service that the
    server starts, correct?

    Sorry, I'm still a little confused by the terminology. By server, do you mean the server process (the Unix processus) or the server machine (host)? In general, by server we mean server process or program.

    The IcePack node allows you to start, stop and monitor processes. You typically install an IcePack node process on each host. It then allows you to remotely starts your Ice C++ or Java programs or to start them on demand (i.e.: when a request comes in).


    Again, talking about a service started by a server, not the server itself.
    Also, not interested in normal starts or stops, but abnormal terminations.

    The IcePack node will detect that your program abnormally terminates and will re-start it on demand.

    Sorry for the confusion, I'm actually running icepacknode on a Unix
    machine and that is where the error occurred.

    We have version 1.1.1, is there already a new version (1.2.0 that
    you mention above ) that is downloadable?

    Oops, forget about 1.2.0 :) it's not released yet! 1.1.1 is the correct version to use.


    When I try to run.py I get this:

    /usr/bin/env: No such file or directory

    (trying to contact our sys admin about this since
    /usr/bin/env does exist)

    When I make in that directory and run "client", I get this:

    Generating 10000 UUIds ... Assertion failed: 0, file UUID.cpp, line 120
    Abort (core dumped)

    I guess you are using Solaris as your Unix environment, correct? The abort in the UUID test indicates that you don't have /dev/urandom installed. The INSTALL.SOLARIS file indicates how to install it on Solaris 8 (on Solaris 9 it's installed by default).

    What is the timeframe for IcePack support on Windows? We have
    both Unix and Windows machines that we want to use in
    a heterogenious environment to run servers on. Does it make
    sense to deploy IcePack on our Unix servers for indirect binding
    and use IceBox on Windows for now using direct binding or should
    we not confuse the issue and just use direct binding using IceBox
    on both platforms?

    IcePack support on Windows is on our TODO list but since none of our commercial customers asked for it, it's not on the top of the list.

    Indirect or direct bindings have nothing to do with IcePack or IceBox. You can use indirect or direct binding with IcePack or IceBox.

    IceBox and IcePack are complementary. IceBox allows you to manage, collocate services (services implementing a well known interface, IceBox::Service) in a same server process. These services are provided in the form of a shared library (C++ shared library or Java jar file). IcePack allows you to manage server processes (including IceBox server processes) on a host. These server process are provided in the form of an executable.

    Once your UUID problems resolved, I recommend you to have a look at the IceBox and IcePack demo.

    Hope this helps!

    Benoit.
  • Benoit,

    First a couple of general questions:

    1) Do you provide phone support or just email? I feel
    it is sometimes easier to get a point across via phone.

    2) How do you use this "quote" facility I see in your replies?

    Other questions/comments below:


    quote:
    Originally posted by brian
    quote:
    For example, let's say a server starts a Java program as
    a service. We want our client to somehow monitor if something
    "bad" happens to that program running in a server. One way
    to do this is for us to write our own inhouse "heartbeat" mechanism.
    This mechanism would periodically send "I'm okay" heartbeats from
    the Java program back to the client. If the client did not receive
    a heartbeat within a certain time period, it would assume the
    Java program (service) has terminated abnormally and would
    notify the user.

    We would like to avoid writing this heartbeat stuff to support
    monitoring if Ice does something better, but it sounds like
    you can only "monitor" a server, not a service that the
    server starts, correct?




    Sorry, I'm still a little confused by the terminology. By server, do you mean the server process (the Unix processus) or the server machine (host)? In general, by server we mean server process or program.

    Server process.

    The IcePack node allows you to start, stop and monitor processes. You typically install an IcePack node process on each host. It then allows you to remotely starts your Ice C++ or Java programs or to start them on demand (i.e.: when a request comes in).

    Right, looking for more specific answer to my question about heartbeats
    above since IcePack cannot monitor a specific server as you said before.

    quote:


    Again, talking about a service started by a server, not the server itself.
    Also, not interested in normal starts or stops, but abnormal terminations.




    The IcePack node will detect that your program abnormally terminates and will re-start it on demand.

    Understood, but we want to notify our client that something went down.
    For example, what if IcePack cannot restart the program, what if we do
    not want it to restart it automatically, what if we are running on Windows
    and do not have IcePack, etc. Sounds like we would have to implement
    this notification functionality ourselves as described above, right?


    quote:


    When I try to run.py I get this:

    /usr/bin/env: No such file or directory

    (trying to contact our sys admin about this since
    /usr/bin/env does exist)

    When I make in that directory and run "client", I get this:

    Generating 10000 UUIds ... Assertion failed: 0, file UUID.cpp, line 120
    Abort (core dumped)




    I guess you are using Solaris as your Unix environment, correct? The abort in the UUID test indicates that you don't have /dev/urandom installed. The INSTALL.SOLARIS file indicates how to install it on Solaris 8 (on Solaris 9 it's installed by default).

    Okay thanks. Will ask our sys admin about this.


    quote:

    What is the timeframe for IcePack support on Windows? We have
    both Unix and Windows machines that we want to use in
    a heterogenious environment to run servers on. Does it make
    sense to deploy IcePack on our Unix servers for indirect binding
    and use IceBox on Windows for now using direct binding or should
    we not confuse the issue and just use direct binding using IceBox
    on both platforms?



    IcePack support on Windows is on our TODO list but since none of our commercial customers asked for it, it's not on the top of the list.

    Indirect or direct bindings have nothing to do with IcePack or IceBox. You can use indirect or direct binding with IcePack or IceBox.

    IceBox and IcePack are complementary. IceBox allows you to manage, collocate services (services implementing a well known interface, IceBox::Service) in a same server process. These services are provided in the form of a shared library (C++ shared library or Java jar file). IcePack allows you to manage server processes (including IceBox server processes) on a host. These server process are provided in the form of an executable.

    Once your UUID problems resolved, I recommend you to have a look at the IceBox and IcePack demo.


    Right. Understand all this. Have actually read all the docs on IceBox and IcePack in the manual and run some of the demos. Forgetting about indirect vs. direct binding, if your customers want to run servers on both Unix and windows platforms, and since IcePack is not supported on Windows, would you recommend running IcePack on just the Unix boxes and not Windows OR would it be better to wait for the IcePack Windows implementation?

    Hope this helps!

    I guess I'm looking for more specific answers to my questions, if you have
    the time to do that, that would be great!

    Thanks again for your prompt replies!

    Brian
  • marc
    marc Florida
    IcePack (and IceBox and Glacier) will be available for WIN32 in the near future. Sorry, I can't give you any specific release date yet, but the need for having these tools on WIN32 by customers (or companies that evaluate Ice) is mounting, so we will take care of this soon.
  • benoit
    benoit Rennes, France
    Originally posted by brian
    Benoit,

    First a couple of general questions:

    1) Do you provide phone support or just email? I feel
    it is sometimes easier to get a point across via phone.


    Our preferred way to provide support to non commercial users is the forum. For commercial users, you could use support@zeroc.com or we could provide phone support.


    2) How do you use this "quote" facility I see in your replies?



    I just add the quote tags around the text I want to quote :) See http://www.zeroc.com/vbulletin/misc.php?action=bbcode#buttons for details on how to use the vB code.

    Right, looking for more specific answer to my question about heartbeats
    above since IcePack cannot monitor a specific server as you said before.


    IcePack will monitor the server processes it started -- it doesn't monitor the IceBox services. There's simply not much to monitor for IceBox services, the services should be up as long as the server process is up.

    Understood, but we want to notify our client that something went down.
    For example, what if IcePack cannot restart the program, what if we do
    not want it to restart it automatically, what if we are running on Windows
    and do not have IcePack, etc. Sounds like we would have to implement
    this notification functionality ourselves as described above, right?

    Correct. It's currently not possible to get notifications if the state of a server process (managed by an IcePack node) changes. That's certainly something that could be added to IcePack.

    Right. Understand all this. Have actually read all the docs on IceBox and IcePack in the manual and run some of the demos. Forgetting about indirect vs. direct binding, if your customers want to run servers on both Unix and windows platforms, and since IcePack is not supported on Windows, would you recommend running IcePack on just the Unix boxes and not Windows OR would it be better to wait for the IcePack Windows implementation?

    We didn't port yet IcePack on Windows because the APIs to fork processes are a little different. Windows is also more often used to run Ice clients (and Unix to run Ice servers). It's on our TODO list though.

    I'm afraid, it's difficult to answer your question. I guess I would perhaps wait for it to be ported on Windows and have the same deployment mechanism on Unix and Windows.

    Benoit.
  • Benoit,

    Thanks again for your time today and many thoughtful replies.
    I'll close this thread now, but look forward to communicating
    with you in other threads.

    Brian