feat: async ChonkVerify protocol with request IDs and C++ worker threads#21196
Draft
feat: async ChonkVerify protocol with request IDs and C++ worker threads#21196
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds async verification support to the bb IPC protocol, allowing ChonkVerify jobs to run on dedicated worker threads in C++ while the main IPC loop continues processing other requests.
Protocol change: Requests can now optionally include a
request_idas[request_id, Command](2-element array). The server detects this vs the legacy[Command]format automatically. Async responses are sent as[request_id, CommandResponse]and routed by ID on the TS side.C++ changes:
IpcServergains a thread-safe async response queue (enqueue_async_response) that worker threads push to, drained by the main loop between iterationsapi_msgpack.cppdetectsChonkVerifycommands withrequest_id > 0and spawnsstd::threadworkers. Each worker gets its own thread-localparallel_forpool (already lazy-initialized per thread). Uses a localBBApiRequestto avoid racing on the global one.wakeup_all()after enqueuing results to minimize latencyTS changes:
callAsync()which wraps requests with a request_id and routes responses viaMap<number, callback>instead of FIFOcall()still uses FIFO matching — fully backward compatibleIMsgpackBackendAsyncinterface gains optionalcallAsync?()methodThis is the transport-layer foundation for the adaptive verifier pool (PR #21190) to dispatch multiple concurrent verification jobs through a single bb process.
Relates to Linear A-576.
ClaudeBox log: http://ci.aztec-labs.com/dbfbacde59b33f03-2