IPC-Manager

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN


    - Loosen the upper-bound timing assertion in t/unit/peer_active_timeout.t subtest 'positive timeout: returns 0 after timeout when peer never becomes active' from < 3s to < 10s. The previous bound fired on a CPAN smoker (perl 5.40.0, x86_64-linux)...
    - Loosen the upper-bound timing assertion in t/unit/Util.t subtest 'tinysleep sleeps for the requested duration' from < 1.0s to < 5.0s. The previous bound fired on three CPAN smokers (perl 5.40.2, 5.12.5, 5.40.4 on x86_64-linux) where tinysleep(0...

0.000034  2026-04-26 03:43:44-07:00 America/Los_Angeles

    - IPC::Manager::Client::ConnectionUnix::_drain_reads now early-returns "EOF" when its $fh argument is undef. During global destruction perl is free to destroy the IO::Socket::UNIX stored in $entry->{fh} before the Client's DESTROY runs disconnect...
    - IPC::Manager::Serializer::JSON::Zstd now accepts constructor arguments for compression level and preset dictionary: ipcm_spawn(serializer => ['JSON::Zstd', level => 9, dictionary => '/path/to/dict']) builds a single configured instance. The def...
    - IPC::Manager::Base::FS::requeue_message / read_resume_file now use 4-byte length-prefixed framing for entries in the resume file instead of newline-delimited records. The newline framing was unsafe for binary serializers (zstd, etc.) whose deco...
    - Add IPC::Manager::Serializer::JSON::Zstd, a subclass of IPC::Manager::Serializer::JSON that zstd-compresses payloads with Compress::Zstd before sending and decompresses them on receipt. Uses Compress::Zstd's default compression level and no pre...
    - IPC::Manager::Client::UnixSocket no longer appends a trailing newline to serialized payloads on send (applies to send_message, _outbox_try_write, and _drain_blocking). The byte was vestigial under SOCK_DGRAM (datagrams self-frame) and broke bin...
    - IPC::Manager::Service::Handle::await_all_responses now short-circuits its gone-peer probe. The poll previously ran _gone_pending_peers on every loop iteration just to test "did anyone go away", which calls _pending_peer_active per pending respo...
    - Fix IPC::Manager::Service::Handle::await_all_responses hanging forever when a service crashes without responding. await_all_responses now mirrors await_response's peer-death semantics: pending peers are checked each polling cycle, and if any be...
    - Bound the IPC::Manager::Spawn::wait peer-disappear poll. The loop used to call sleep(1) forever waiting for clients to disconnect, so a wedged service or a slow-filesystem CPAN smoker could trap shutdown indefinitely. The poll now respects a de...
    - On per-subtest alarm timeout, IPC::Manager::Test->run_all/run_one now SIGTERM (then SIGKILL) the subtest's child process group before confessing, so service grandchildren and workers are reaped instead of being orphaned. Orphans were continuing...
    - Add IPC::Manager::Client::ConnectionUnix, a connection-oriented UNIX-socket driver built on SOCK_STREAM. Each client either listens for incoming connections (default) or drops a marker file under the route directory, and messages flow over esta...
    - Add IPC::Manager::Role::Client::Connection, a Role::Tiny role that gives connection-oriented drivers a uniform per-peer connection API (has_connection, connections, disconnect_connection, last_activity, close_idle_connections). Consumers provid...
    - Support dynamic select-handle sets in IPC::Manager::Role::Service::Select. Drivers can now advertise have_dynamic_handles_for_select to indicate that handles_for_select changes over the lifetime of the client (e.g. ConnectionUnix accepting new ...
    - Bump the optional Atomic::Pipe dependency from 0.022 to 0.026 in dist.ini, the AtomicPipe client _viable check, and the Test2::Require::Module gates on every t/AtomicPipe/ and t/unit/atomicpipe_*/ test
    - Add IPC::Manager::Role::Outbox: per-peer non-blocking send queue consumed by FIFO/datagram-socket clients. Services flip their client to send_blocking=0 at startup; outbound sends that would EAGAIN are queued and the service event loop drains t...
    - IPC::Manager::Client base class sets $self->{_creator_pid} once in init and uses it (instead of +PID) in DESTROY. The role's init re-runs after fork and rewrites +PID, so DESTROY in a forked child would otherwise unlink the FIFO / socket / rout...
    - Client::AtomicPipe and Client::UnixSocket consume Role::Outbox. Writer pipes/sockets are non-blocking when send_blocking=0 and blocking when send_blocking=1 (the default for non-service callers); send_message in either mode preserves the fire-a...
    - Client::ConnectionUnix consumes Role::Outbox with a per-connection send_buffer instead of a whole-payload queue, since SOCK_STREAM partial writes mid-frame cannot be re-sent from the start without corrupting the stream. _outbox_try_write append...
    - Service::Select adds select_write() returning a fresh IO::Select over the client's writable-with-backlog handles. Service::watch now uses IO::Select->select($r, $w, undef, $cycle) so the loop wakes on either readable or writable readiness

0.000033  2026-04-25 01:47:50-07:00 America/Los_Angeles

    - 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...
    - 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 su...
    - 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 ...
    - 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...

0.000032  2026-04-23 08:27:50-07:00 America/Los_Angeles

    - Accidentally uploaded wrong 0.000031 tarball, re-releasing to fix

0.000031  2026-04-23 08:25:32-07:00 America/Los_Angeles

    - Fix a race in IPC::Manager::Service::Handle::await_response where a peer that responded and then exited could be reported as "peer ... went away" even though the response had already been delivered to the local inbox. await_response now does on...

0.000030  2026-04-22 13:17:49-07:00 America/Los_Angeles

    - Fix a regression from 0.000028 that made every UnixSocket test fail on CPAN testers when TMPDIR produced a moderately long route. The route-length check in IPC::Manager::Client::UnixSocket croaked unconditionally as soon as the route left less ...

0.000029  2026-04-21 07:31:45-07:00 America/Los_Angeles

    - Expose ipcm_service's first-fork child pid on the returned handle/peer via a new $handle->child_pid accessor. Supervisors that track services by pid (e.g. Test2-Harness2's Role::ResourceServiceHost) can now use the standard ipcm_service spawn p...

0.000028  2026-04-20 13:48:46-07:00 America/Los_Angeles

    - Support arbitrarily long peer names. DBI-backed drivers (PostgreSQL, MySQL, MariaDB, SQLite) widen the ipcm_peers.id and ipcm_messages to/from columns from VARCHAR(36) to VARCHAR(512). Filesystem-based drivers (UnixSocket, AtomicPipe, MessageFi...

0.000027  2026-04-19 09:58:22-07:00 America/Los_Angeles

0.000026  2026-04-19 08:36:18-07:00 America/Los_Angeles

    - Split IPC::Manager::Client::SharedMem out into its own CPAN distribution (IPC-Manager-Client-SharedMem). The SharedMem module, its tests, the SysV configure-time probe, and the matching Makefile.PL / dist.ini shims no longer ship with IPC-Manag...

0.000025  2026-04-19 06:33:45-07:00 America/Los_Angeles

    - Add optional $timeout argument to Service::Peer::ready(), Service::Handle::ready(), and the underlying Client::peer_active(). With no timeout the behavior is unchanged (one-shot check); with a timeout the call blocks until the peer becomes acti...

0.000024  2026-04-18 14:57:47-07:00 America/Los_Angeles

    - Fix sync_request hang when a peer disappears mid-request: await_response now snapshots the peer at send time and croaks if the peer is fully removed from the bus before the response arrives. Suspend-capable protocols (those advertising suspend_...
    - Add optional $timeout argument to sync_request() and await_response(); without it the behavior is unchanged (blocks indefinitely), with it the call croaks once the deadline elapses
    - Sweep orphaned Atomic::Pipe reassembly state when a peer leaves the bus: a new Client peer_left() hook (called from the service loop on peer-delta removal) lets AtomicPipe drop per-(pid, tid) parts/buffers entries belonging to dead peers instea...

0.000023  2026-04-17 12:06:27-07:00 America/Los_Angeles

    - Strengthen SysV IPC configure-time probe: add concurrent-contention and rapid create/destroy phases to catch hosts where semop sporadically returns EINVAL only under load
    - Add kernel-limit probe that disables SharedMem when /proc/sys/kernel/sem or shmmni/shmmax are below workable minimums
    - Add persistence probe that disables SharedMem when an external reaper (systemd-logind RemoveIPC, ipcrm cronjob, cgroup IPC policy, etc.) destroys a freshly-created semaphore mid-probe
    - Detect systemd-logind RemoveIPC=yes without user linger and include it as a diagnostic hint in the install-time failure message

0.000022  2026-04-16 16:49:45-07:00 America/Los_Angeles

    - Reap children in the service loop via waitpid(-1, WNOHANG) so unrelated zombies are cleaned up
    - Add run_on_pid hook and on_pid service callback for reaped non-worker child processes
    - Add pids key to the watch() activity hash mapping reaped non-worker pid to exit value

0.000021  2026-04-16 07:18:10-07:00 America/Los_Angeles

    - Fill in missing Changes entries for 0.000020

0.000020  2026-04-16 01:09:03-07:00 America/Los_Angeles

    - Refactor Service::State to use Long::Jump instead of labelled redo
    - Disable SharedMem at install time when host SysV IPC is broken
    - Fix test_service_callbacks race waiting for on_peer_delta
    - Fix test_workers race where parent reads empty pid file

0.000019  2026-04-13 15:01:40-07:00 America/Los_Angeles

    - Add post_fork_hook to Role::Service and post_fork callback to Service for double-fork/daemonize support

0.000018  2026-04-12 02:20:35-07:00 America/Los_Angeles

    - Fix UnixSocket reads on FreeBSD: use recv() instead of diamond operator for SOCK_DGRAM sockets
    - Fix SharedMem semaphore EINVAL race: disconnect Handle client before Spawn destruction
    - Fix message ordering on systems with coarse Time::HiRes resolution
    - Add sort_messages to Client base class to centralize message sort logic

0.000017  2026-04-11 09:16:39-07:00 America/Los_Angeles

    - Fix on_general_message test race where file was observed before content was written

0.000016  2026-04-10 09:25:35-07:00 America/Los_Angeles

    - Fix Spawn shutdown race where fast services exit before wait() captures their PIDs

0.000015  2026-04-09 16:16:09-07:00 America/Los_Angeles

    - Use Cpanel::JSON::XS directly and lazily reinitialize to survive global destruction
    - Replace JSON::PP prereq with Cpanel::JSON::XS in dist.ini
    - Fix Spawn::wait() to waitpid child processes before destroying shared resources
    - Add debug flag to Spawn, reduce test suite noise

0.000014  2026-04-08 14:58:59-07:00 America/Los_Angeles

    - Refactor viable() into base-class wrapper around _viable() so it never throws



( run in 3.274 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )