mirror of
https://salsa.debian.org/ha-team/libqb
synced 2026-01-04 16:33:48 +00:00
It was not clear to non-native English speakers. Signed-off-by: Christine Caulfield <ccaulfie@redhat.com> Reviewed by: Jan Pokorný <jpokorny@redhat.com>
140 lines
4.2 KiB
C
140 lines
4.2 KiB
C
/**
|
|
* @mainpage
|
|
*
|
|
* @section overview Overview
|
|
*
|
|
* libqb is a library with the primary purpose of providing high-performance,
|
|
* reusable features for client-server architecture, such as logging, tracing,
|
|
* inter-process communication (IPC), and polling. Except for some documented
|
|
* anti-pattern use cases regarding IPC communication and logging, it is deemed
|
|
* thread-safe.
|
|
*
|
|
* We don't intend this to be an all-encompassing library, but instead
|
|
* provide very specially focused APIs that are highly tuned for maximum
|
|
* performance for client/server applications.
|
|
*
|
|
* See the following pages for more info:
|
|
* - @subpage qb_list_overview
|
|
* - @subpage qb_atomic_overview
|
|
* - @subpage qb_array_overview
|
|
* - @subpage qb_map_overview
|
|
* - @subpage qb_hdb_overview
|
|
* - @subpage qb_rb_overview
|
|
* - @subpage qb_loop_overview
|
|
* - @subpage qb_log_overview
|
|
* - @subpage qb_ipc_overview
|
|
* - @subpage qb_util_overview
|
|
*/
|
|
|
|
/**
|
|
* @page qb_rb_overview Ringbuffer
|
|
* @copydoc qbrb.h
|
|
* @see qbrb.h
|
|
*/
|
|
|
|
/**
|
|
* @page qb_list_overview List
|
|
* @copydoc qblist.h
|
|
* @see qblist.h
|
|
*/
|
|
|
|
/**
|
|
* @page qb_array_overview Array
|
|
* @copydoc qbarray.h
|
|
* @see qbarray.h
|
|
*/
|
|
|
|
/**
|
|
* @page qb_map_overview Map
|
|
* @copydoc qbmap.h
|
|
* @see qbmap.h
|
|
*/
|
|
|
|
/**
|
|
* @page qb_hdb_overview Handle Database
|
|
* @copydoc qbhdb.h
|
|
* @see qbhdb.h
|
|
*/
|
|
|
|
/**
|
|
* @page qb_loop_overview Main Loop
|
|
* @copydoc qbloop.h
|
|
* @see qbloop.h
|
|
*/
|
|
|
|
/**
|
|
* @page qb_log_overview Logging
|
|
* @copydoc qblog.h
|
|
* @see qblog.h
|
|
*/
|
|
|
|
/**
|
|
* @page qb_ipc_overview IPC Overview
|
|
*
|
|
* @par Overview
|
|
* libqb provides a generically reusable very high performance shared memory IPC system for client
|
|
* and service applications. It supports many features including:
|
|
* - Multiple transport implementations
|
|
* -# Shared memory implementation for very high performance.
|
|
* -# Unix sockets
|
|
* - A synchronous request/response channel and asynchronous response channel per ipc connection.
|
|
* - User defined private data per IPC connection.
|
|
* - Ability to call a function per service on ipc connection and disconnection.
|
|
* - Authenticated IPC connection with ability for developer to define which UIDs and GIDs are valid at connection time.
|
|
* - Fully abstracted poll system so that any poll library may be used.
|
|
* - User defined selector for determining the proper function to call per service and id.
|
|
*
|
|
* @par Security
|
|
* The ipc system uses default operating system security mechanics to ensure ipc
|
|
* connections are validated. A callback used with qb_ipcs_create() is called
|
|
* for every new ipc connection with the parameters of UID and GID. The callback
|
|
* then determines if the UID and GID are authenticated for communication.
|
|
*
|
|
* @par Performance
|
|
* For performance, QB_IPC_SHM (shared memory) is recommended. It is tuned for
|
|
* very high performance.
|
|
*
|
|
* @par Multithreading
|
|
* There are not many guarantees about the ipc system being thread-safe.
|
|
* It is essential that all sends and all receives are in their own thread,
|
|
* though having separate threads for each is supported.
|
|
*
|
|
* If you need to send on multiple threads then either use locking
|
|
* around the calls or create a separate connection for each thread.
|
|
*
|
|
*
|
|
* @par IPC sockets (Linux only)
|
|
* On Linux IPC, abstract (non-filesystem) sockets are used by default. If you
|
|
* need to override this (say in a net=host container) and use sockets that reside
|
|
* in the filesystem, then you need to create a file called /etc/libqb/force-filesystem-sockets
|
|
* - this is the default name and can be changed at ./configure time.
|
|
* The file does not need to contain any content, it's not a configuration file as such,
|
|
* just its presence will activate the feature.
|
|
*
|
|
* Note that this is a global option and read each time a new IPC connection
|
|
* (client or server) is created. So, to avoid having clients that cannot
|
|
* connect to running servers it is STRONGLY recommended to only create or remove
|
|
* this file prior to a system reboot or container restart.
|
|
*
|
|
* @par Client API
|
|
* @copydoc qbipcc.h
|
|
* @see qbipcc.h
|
|
*
|
|
* @par Server API
|
|
* @copydoc qbipcs.h
|
|
* @see qbipcs.h
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* @page qb_atomic_overview Atomic operations
|
|
* @copydoc qbatomic.h
|
|
* @see qbatomic.h
|
|
*/
|
|
|
|
/**
|
|
* @page qb_util_overview Common Utilities
|
|
* @copydoc qbutil.h
|
|
* @see qbutil.h
|
|
*/
|