Page MenuHomeClusterLabs Projects

Split large IPC messages
Open, HighPublic

Assigned To
None
Authored By
kgaillot
Oct 23 2024, 6:09 PM
Tags
  • Restricted Project
  • Restricted Project
  • Restricted Project
Referenced Files
None
Subscribers

Description

Currently, pcmk__ipc_prepare_iov() will compress IPC messages if they are larger than a certain size. However if the compressed message is still too large, it returns an error.

We should be able to split overlarge messages into parts and reassemble them on the other end. That would remove any limit on CIB size and allow us to do away with the PCMK_ipc_buffer environment variable.

Maybe pcmk__ipc_header_t could have a new enum crm_ipc_flags value for whether this is a partial message. Dispatch functions on both the server and client sides would need to check that to reassemble messages. We probably want to guarantee that any one message will be sent together (not interrupted by other messages).

We could always use 128KB as the buffer size, or we might be able to dynamically choose a larger size as long as it's within system limits (such as /proc/sys/net/core/rmem_max and /proc/sys/net/core/wmem_max for socket receive and send buffer maximums on Linux, although we don't know whether libqb is using sockets or shared memory for IPC).

Backward compatibility shouldn't be an issue since IPC connections are always on the same server. Proxied Pacemaker Remote IPC connections are still local on the controller side; the remote connection itself uses direct reads and writes of the socket, with data treated as a stream of bytes rather than messages.

See also:

Event Timeline

kgaillot triaged this task as Normal priority.Oct 23 2024, 6:09 PM
kgaillot raised the priority of this task from Normal to High.
kgaillot created this task.
kgaillot created this object with edit policy "Restricted Project (Project)".
kgaillot added a project: Restricted Project.Oct 23 2024, 6:23 PM
kgaillot updated the task description. (Show Details)