The Cluster plumbing library is a collection of very useful functions which provide a variety of services used by many of our main components. A few of the major objects provided by this library include:
compression API (with underlying compression plugins)
Non-blocking logging API
memory management oriented to continuously running services
Hierarchical name-value pair messaging facility promoting portability and version upgrade compatibility (also provides optional message compression facilities)
Signal unification - allowing signals to appear as mainloop events
Core dump management utilities - promoting capture of core dumps in a uniform way, and under all circumstances
timers (like glib mainloop timers - but they work even when the time of day clock jumps)
child process management - death of children causes invocation of process object, with configurable death-of-child messages
Triggers (arbitrary events triggered by software)
Realtime management - setting and unsetting high priorities, and locked into memory attributes of processes.
64-bit HZ-granularity time manipulation (longclock_t)
User id management for security purposes, for processes which need some root privileges.
Mainloop integration for IPC, plain file descriptors, signals, etc. This means that all these different event sources are managed and dispatched consistently.