llama.cpp
6122b566 - ggml-rpc : fail gracefully on unreachable endpoints and failed handshakes (#30415)

Commit
2 days ago
ggml-rpc : fail gracefully on unreachable endpoints and failed handshakes (#30415) * ggml-rpc: fail gracefully on unreachable endpoints and failed handshakes rpc_dispatcher::start() aborted the whole process (GGML_ABORT -> SIGABRT) when the endpoint could not be parsed, the transport failed to initialise, the socket could not connect, or the HELLO handshake failed. A typo in --rpc or a temporarily down node killed the host application, and the reason went to a log stream the host may never see. Make the connect-time failure reportable instead of fatal: start() returns bool (LOG_ERROR + false; the dispatcher thread only starts after a successful handshake), negotiate_hello() returns false on a half-open socket, get_dispatcher() returns nullptr and does not cache failed attempts, and every consumer treats nullptr as "endpoint did not answer" with the conservative behaviour of its domain (allocation -> nullptr, alloc-size -> lower bound, device memory -> 0/0, events -> no-op, device count -> 0, and add_server() already maps 0 devices to nullptr). Mid-stream failures keep the existing RPC_STATUS_ASSERT by design (fail fast against silent corruption) and are intentionally out of scope. Field motivation: on Android (llama.rn + phone RPC cluster) an unreachable worker crashed the app; the crash buffer showed abort <- ggml_abort <- rpc_dispatcher::start <- ggml_backend_rpc_add_server. * tests : add a regression test for unreachable rpc endpoints Calls ggml_backend_rpc_add_server with a socket that nothing listens on and with a malformed endpoint, and expects nullptr from both. Without the fix in this branch the first call aborts the process, so the test cannot even fail cleanly. * ggml-rpc remove low-value comments * tests : drop the internal device-count check after the rpc registry refactor --------- Co-authored-by: figkcoci-debug <figkcoci-debug@users.noreply.github.com>
Parents
Loading