Entities

Entities are the fundamental units of observation/monitoring in the system.

Essentially, an entity
is a process (pid). As processes, all entities
are uniquely identifiable by their pids.
Associated with each entity is a symbolic name that can be
used to refer to that specific entity. Again, the names
associated with entities are unique across the system.
Managers are currently associated with a node, so uniqueness
rules apply to a node. As we'll see later, this uniqueness
requirement is very similar to the naming scheme used in a
hierarchical filesystem.

There are three fundamental entity types:

Self-attached entities (HA-aware components)—processes that
choose to send heartbeats to the HAM, which will then
monitor them for failure. Self-attached entities can, on
their own, decide at exactly what point in their lifespan
they want to be monitored, what conditions they want acted
upon, and when they want to stop the monitoring. In other
words, this is a situation where a process says, "Do
the following if I die."

Externally attached entities (HA-unaware components)—generic
processes (including legacy components) in the system that are being monitored. These
could be arbitrary daemons/service providers whose health is
deemed important. This method is useful for the case where
Process A says, "Tell me when Process B dies"
but Process B needn't know about this at all.

Global entity—a place holder for
matching any entity. The global entity can be used to
associate actions that will be triggered when an interesting
event is detected with respect to any entity on the system.
The term "global" refers to the set of entities
being monitored in the system, and allows a process to say
things like, "When any process dies or misses
a heartbeat, do the following." The global entity is
never added or removed, but only referred to. Conditions can
be added to or removed from the global entity, of course,
and actions can be added to or removed from any of the
conditions.