Changes for version 0.000033 - 2026-04-25

  • Reset the IPC::Manager::Test->run_all alarm per subtest instead of using a single 180s budget for the whole sweep. On slow CPAN tester hardware the cumulative runtime in JSONFile-NoInotify mode exceeded 180s, firing SIGALRM mid-sweep regardless of which subtest was actually running and producing FAIL reports. Each subtest now gets its own 180s budget; the failure message names the subtest that timed out; an IPC_MANAGER_TEST_TIMEOUT environment variable overrides the default
  • Use Time::HiRes::stat for nanosecond-resolution mtime in IPC::Manager::Client::JSONFile NoInotify cache-staleness check, and drop the artificial "wait $INTERVAL before SHA-comparing" gate. Same-second cross-process writes are now detected by sub-second mtime alone on Linux/BSD, with SHA still serving as a tiebreaker on filesystems that round mtime to whole seconds. SHA on small JSON state files is microseconds, so removing the 1s delay does not regress poll cost
  • Speed up the two slowest IPC::Manager::Test subtests. test_sync_request_peer_exits_after_response replaces a 50-iter 0.05s pid_is_running poll with a blocking waitpid (kernel returns immediately on direct-child exit) and falls back to the poll only when waitpid reports ECHILD, cutting that subtest from ~12.9s to <1s. test_intercept_errors drops two arbitrary Time::HiRes::sleep fences (the follow-up sync_request is FIFO-ordered behind the peer_delta and general_message dispatches, so service-event ordering already provides the synchronisation those sleeps were emulating), cutting it from ~3.6s to ~2.3s
  • Add IPC::Manager::Test->run_one(protocol => ..., test => ...) as a single-subtest counterpart to run_all, and split the ten t/<Protocol>.t aggregate runners into one .t file per subtest under t/<Protocol>/. Each subtest is now its own test file, so prove -j parallelises across subtests instead of running them serially within a single test file. Whole-suite wallclock with prove -Ilib -j16 -r t/ drops from ~71s to ~24s

Documentation

Modules

Decentralized local IPC through various protocols.
Base class for DBI based protocols
Base class for filesystem based protocols
Base class for filesystem clients that read via a handle
Base class for all client protocols
Use FIFO pipes for message transfers.
Single JSON file as a message store
Process-local in-memory message store for testing only
Use MariaDB as a message store.
Use files on disk as a message store.
Use MySQL as a message store.
Use PostgreSQL as a message store.
Use SQLite as a message store.
Use UNIX sockets for message transfers.
Database based clients for IPC::Manager.
Messages sent between clients.
Role for implementing IPC services with message handling
Role for handling request/response patterns in IPC services.
Role for I/O multiplexing in IPC services
Serializer base class for IPC::Manager.
JSON Serializer for IPC::Manager.
Base class for creating IPC services
Service that echoes back request content
Handle class for connecting to IPC services
Peer connection class for IPC::Manager services
Internal implementation of ipcm_service and ipcm_worker
Encapsulation of a newly initiated message store.
Reusable protocol-agnostic test suite for IPC::Manager
Utility functions for IPC::Manager