Skip to content

Add optional FlatBuffers RPC support - #3559

Draft
AnDiXL wants to merge 6 commits into
apache:masterfrom
AnDiXL:review/flatbuffers-rpc-3558
Draft

AnDiXL wants to merge 6 commits into
apache:masterfrom
AnDiXL:review/flatbuffers-rpc-3558

Conversation

@AnDiXL

@AnDiXL AnDiXL commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Depends on #3558. Please keep this PR in draft until the message/codegen prerequisite is merged.

This continues the RPC work in #3197 on top of #3558, the message/codegen follow-up to #3196. Both build on the SingleIOBuf foundation merged in #3062.

Review the RPC-only increment: four follow-up commits above #3558.

Since #3558 is still open, GitHub's diff against master also includes its two prerequisite commits. This branch starts at the exact #3558 head (6e5a3b32); it needs rebasing after that PR merges so the community diff contains only the follow-up changes. The message/codegen work is not being proposed independently a second time.

What is changed and the side effects?

The four commits beyond #3558 are:

  • a30e22bc: optional fb_rpc transport, Channel/Controller/Server integration, service lifecycle handling, attachments, retries and concurrency, with 33 protocol tests.
  • e1c76cdc: generated client/server example with bounded loopback smoke. This is functional validation, not a performance benchmark.
  • 87d917e3: explicit FlatBuffers ON validation runner, its self-tests and a six-lane GitHub Actions workflow.
  • 09346865: Chinese/English setup, dependency, ABI and example-verification documentation.

The transport uses explicit metadata lengths to allow appended optional fields while retaining the known prefix. Existing protobuf-facing Protocol callback signatures remain unchanged.

Side effects and limits:

  • FlatBuffers remains disabled by default. Enabling it changes ABI; the library and consumers must use matching build settings. Protobuf remains a dependency.
  • FRPC authentication, compression, checksums and streaming are not supported. No compatibility with every historical experimental FRPC wire format or performance improvement is claimed.

Validation

Fresh checks for this publication:

Historical focused validation records:

Environment Recorded result
macOS CMake, Apple Clang 15 / Protobuf 3.21 21 message + 33 protocol tests, two codegen CTests and one example CTest
Linux CMake, GCC 21 message + 33 protocol tests, two codegen CTests and one example CTest
Linux Make and Bazel, GCC Each ran 21 message + 33 protocol tests

These recorded runs had no failures or skips. The example smoke verified 13 replies, two expected schema rejections and clean shutdown. The 21 message tests belong to the prerequisite, not this RPC increment.

Linux Make/Bazel used snapshot v4, while CMake used v6/v6r1. The recorded comparison found changes only in two codegen acceptance files, with 1,919 other files unchanged. These are historical snapshot results, not fresh C++ or Linux test runs of this reordered branch.

The new hosted ON matrix has not yet been verified. Linux Clang ON lanes, the hosted macOS Protobuf 29/Abseil combination, full-repository tests, new sanitizer runs and performance benchmarks are not claimed as completed by this follow-up.


Check List:

xulei25 added 6 commits September 21, 2026 01:02
Add IOBuf-backed messages, allocator-aware builders and stable service
method descriptors. Provide a standalone binding generator using the
upstream FlatBuffers parser rather than requiring a compiler fork.

Keep the feature disabled by default in CMake, Make and Bazel. Cover
message ownership, framing, schema verification, method IDs and generated
name collisions with regression tests.

Build on the SingleIOBuf foundation merged in apache#3062 and the
message-construction work in apache#3196. Network transport and
Channel/Server integration remain separate.
Keep service header guards distinct across punctuation, case and equal
schema basenames in different namespaces without embedding checkout
paths. Test standalone headers, both include orders and relocation.

Select C++14 or C++17 according to Protobuf and use its exported include
paths and link target for standalone acceptance. Rebuild and pass both
codegen acceptance tests before committing.

Build on message construction in 3f2550c and RPC support in 338fe83,
continuing apache#3196 and apache#3197 over the SingleIOBuf
foundation from apache#3062.
Add the optional fb_rpc transport with length-delimited metadata and
stable method IDs. Integrate Channel, Controller and Server without
changing the existing protobuf Protocol callback signatures.

Keep request buffers immutable across retries and concurrent calls.
Manage service ownership, asynchronous completion and concurrency limits,
and preserve interceptors, security context and internal-port isolation.
Reject invalid frames and unsupported authentication, compression,
checksums and streams.

Keep the feature disabled by default in CMake, Make and Bazel. Add 33
protocol regression tests alongside the 21 message tests, covering wire
compatibility, lifecycle, malformed input and real RPC round trips.
Keep FlatBuffers source selection independent of the URMA mock option.

Validate CMake and Make on macOS and Linux, Linux Bazel, standalone ASan,
Linux LSan and loopback stress. macOS Bazel remains blocked by registry
access; ASan/UBSan combinations and Linux TSan remain blocked by
toolchain or runtime constraints. Existing macOS regression suites retain
known timing and platform-sensitive failures.

Build on the SingleIOBuf foundation merged in apache#3062 and the
message-construction work in apache#3196, continued locally in
3f2550c. Adapt the protocol work and review feedback in apache#3197.

(cherry picked from commit 338fe83)
Generate table and service bindings during the build and demonstrate the
fb_rpc channel, stable method IDs and FlatBuffers service registration.
Keep the client finite and the server restricted to loopback with bounded
startup, request and shutdown deadlines.

Verify response schemas, binary payloads, optional strings and attachments.
Exercise concurrent calls, three connection types, schema rejection and
recovery in a smoke test with 13 replies and two expected rejections.
Include standalone build and manual verification instructions without
claiming performance results.

Use LinQuickDev#45 as the example comparison reference and adapt the
flow to message construction in 3f2550c and RPC support in 338fe83,
continuing apache#3196 and apache#3197.

(cherry picked from commit 19e8c37)
Exercise Linux CMake and Make with GCC/Clang, Linux Bazel with GCC, and
macOS CMake in a dedicated workflow. Keep bootstrap dependencies pinned,
validate archive paths and checksums, and retain commands, logs and XML.

Compare discovered and executed cases so empty, filtered, disabled or
skipped runs cannot pass. Include codegen and example checks in CMake,
build selected GoogleTest sources in a private prefix, and terminate
owned process groups after timeout even when their leaders have exited.

Pass 26 runner self-tests before committing. Recorded integration runs
cover macOS CMake and Linux CMake/Make/Bazel with 21 message and 33
protocol cases. Hosted GitHub jobs, Linux Clang and the hosted macOS
Protobuf 29 combination have not been run; no new sanitizer or performance
results are claimed.

Continue the FlatBuffers series in 3f2550c and 338fe83, based on
apache#3196 and apache#3197.

(cherry picked from commit 97bc135)
Add Chinese and English enablement guides and link them from repository,
example and generator READMEs. Explain dependency roles, default-OFF ABI
requirements, build-system options and generated binding ownership.

Document writable source requirements, shared-library prerequisites,
Protobuf and CTest version requirements, bounded smoke and manual client
commands, expected JSON output and common configuration failures.

Documentation verification covered macOS static/shared example builds,
both smoke runs and four manual client commands. Recheck 29 shell blocks,
28 local links and bilingual command consistency before committing.
Do not present local verification as a completed hosted CI matrix.

Document the FlatBuffers message and RPC series continued from 3f2550c
and 338fe83, based on apache#3196 and apache#3197.

(cherry picked from commit c641abb)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant