Conversation
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)
This was referenced Sep 21, 2026
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.
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
SingleIOBuffoundation merged in #3062.Review the RPC-only increment: four follow-up commits above #3558.
Since #3558 is still open, GitHub's diff against
masteralso 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: optionalfb_rpctransport, 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
Protocolcallback signatures remain unchanged.Side effects and limits:
Validation
Fresh checks for this publication:
c641abbc); no implementation changes were introduced by the reorder.git diff --check 6e5a3b32..HEADpassed.python3 .github/scripts/test_flatbuffers_on.py: 26 tests passed.Historical focused validation records:
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: