Skip to content

gorums: reduce generated-code hooks in server API - #431

Open
meling wants to merge 2 commits into
masterfrom
feature/424/generated-code-boundary
Open

meling wants to merge 2 commits into
masterfrom
feature/424/generated-code-boundary

Conversation

@meling

@meling meling commented Nov 1, 2026

Copy link
Copy Markdown
Member

Closes #424.

Route streaming replies through a send func(proto.Message) callback passed to every handler.
Move response-envelope construction used by generated unary handlers to runtime/gorumsimpl.
Remove ServerContext.SendMessage and gorums.NewResponseMessage from the application-facing package.
Keep Message, AsProto, and RegisterHandler because interceptors and back-channel applications use them.

This is a breaking API change: custom handlers and server interceptors need the new callback argument.
The generated-code minimum and generator version move to 13, so users must regenerate older Gorums output.

Validation: go test ./..., go test -C benchkit ./..., go test -C examples ./..., make modernize, and make goplscheck pass.

@meling
meling added this pull request to stack #432 November 1, 2026 21:51
Copilot AI lite review requested due to automatic review settings November 1, 2026 21:51
@meling
meling force-pushed the feature/424/generated-code-boundary branch from 209be92 to 52f4cb1 Compare November 1, 2026 21:55

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The generated files require Gorums runtime v13, but the nested modules and workspace replacement still resolve v0.12.1, causing standalone benchkit and examples builds to fail their version checks and compile-time registrations.

3 open issues
12 files not reviewed
  • benchkit/benchmark/benchmark_gorums.pb.go: Generated file
  • benchkit/benchmark/gorums.pb.go: Generated file
  • benchkit/control_gorums.pb.go: Generated file
  • benchkit/gorums.pb.go: Generated file
  • cmd/protoc-gen-gorums/dev/zorums_client_gorums.pb.go: Generated file
  • cmd/protoc-gen-gorums/dev/zorums_multicast_gorums.pb.go: Generated file
  • cmd/protoc-gen-gorums/dev/zorums_quorumcall_gorums.pb.go: Generated file
  • cmd/protoc-gen-gorums/dev/zorums_remotecall_gorums.pb.go: Generated file
  • cmd/protoc-gen-gorums/dev/zorums_server_gorums.pb.go: Generated file
  • cmd/protoc-gen-gorums/dev/zorums_unicast_gorums.pb.go: Generated file
  • examples/storage/proto/gorums.pb.go: Generated file
  • examples/storage/proto/storage_gorums.pb.go: Generated file
What changed in this PR

This breaking API change routes streaming replies through a send func(proto.Message) callback, moves response-envelope construction into runtime/gorumsimpl, and updates generated code for runtime version 13.

Changes:

  • Adds callback-based streaming dispatch to handlers and interceptors.
  • Removes ServerContext.SendMessage and the application-facing gorums.NewResponseMessage.
  • Regenerates fixtures, examples, benchmarks, documentation, and tests for the new API.
  • Updates generator compatibility metadata to version 13.

Review notes include three critical dependency/version findings, two import-formatting nits, and one missing interceptor-plus-streaming integration test.

File Description
tree_integration_test.go Updates tree handlers for the callback-based API.
stream_dedup_test.go Migrates stream deduplication handlers and response construction.
server.go Adds callback-based streaming dispatch and removes the exported send method. Nit: add interceptor-plus-streaming coverage confirming callback responses reach clients.
server_test.go Updates server handlers and interceptor tests.
server_internal_test.go Updates internal handler tests and response construction.
runtime/​gorumsimpl/​version.go Raises generated-code compatibility to version 13.
runtime/​gorumsimpl/​response.go Adds runtime response-envelope construction.
message.go Makes response-envelope construction application-package private.
message_test.go Tests the runtime response helper.
internal/​version/​version.go Bumps the module version to 0.13.0. Critical: nested module requirements and workspace replacement still reference v0.12.1; update them and related sums for generated version 13.
internal/​tests/​unresponsive/​unresponsive_gorums.pb.go Regenerates unresponsive server bindings.
internal/​tests/​unresponsive/​gorums.pb.go Updates generated version metadata.
internal/​tests/​tls/​tls_gorums.pb.go Regenerates TLS server bindings.
internal/​tests/​tls/​peer_identity_test.go Updates TLS test handlers.
internal/​tests/​tls/​gorums.pb.go Updates generated version metadata.
internal/​tests/​ordering/​ordering_gorums.pb.go Regenerates ordering server bindings.
internal/​tests/​ordering/​gorums.pb.go Updates generated version metadata.
internal/​tests/​oneway/​oneway_gorums.pb.go Regenerates one-way server bindings.
internal/​tests/​oneway/​gorums.pb.go Updates generated version metadata.
internal/​tests/​multiservice/​multiservice_gorums.pb.go Regenerates multiservice server bindings.
internal/​tests/​multiservice/​gorums.pb.go Updates generated version metadata.
internal/​tests/​metadata/​metadata_gorums.pb.go Regenerates metadata server bindings.
internal/​tests/​metadata/​gorums.pb.go Updates generated version metadata.
internal/​tests/​correctable/​gorums.pb.go Updates generated version metadata.
internal/​tests/​correctable/​correctable_gorums.pb.go Regenerates correctable streaming handlers.
internal/​testprotos/​testdata/​nodeonly/​nodeonly_gorums.pb.go.golden Updates node-only generated output expectations.
internal/​testprotos/​testdata/​clientnames/​clientnames_gorums.pb.go.golden Updates client-name generated output expectations.
internal/​testprotos/​testdata/​calltypes/​quorumcall/​quorumcall_gorums.pb.go.golden Updates quorum-call generated output expectations.
internal/​testprotos/​testdata/​calltypes/​multiservice/​multiservice_gorums.pb.go.golden Updates multiservice generated output expectations.
internal/​testprotos/​testdata/​calltypes/​multicast/​multicast_gorums.pb.go.golden Updates multicast generated output expectations.
internal/​testprotos/​testdata/​calltypes/​importmsgs/​importmsgs_gorums.pb.go.golden Updates imported-message generated output expectations.
internal/​stream/​message.go Adds response-envelope creation at the stream layer.
gorumstest/​servers.go Updates test server handlers and streaming helpers. Nit: run gofmt to correct import ordering.
gorumstest/​gorumstest.go Updates test server context setup. Nit: run gofmt to correct import ordering.
examples/​storage/​proto/​storage_gorums.pb.go Regenerates storage server bindings. Critical: examples/go.mod still requires v0.12.1; update the dependency and related workspace/checksum metadata for generated version 13.
examples/​storage/​proto/​gorums.pb.go Updates generated version metadata.
examples/​interceptors/​server_interceptors.go Propagates the streaming callback through interceptors.
doc/​user-guide.md Documents the new interceptor signature and callback propagation.
doc/​dev-guide.md Documents callback-based dispatch and runtime response construction.
cmd/​protoc-gen-gorums/​gengorums/​template_server.go Generates callback-based handlers and runtime response construction.
cmd/​protoc-gen-gorums/​gengorums/​template_funcs.go Adds protobuf imports required by generated callbacks.
cmd/​protoc-gen-gorums/​dev/​zorums_unicast_gorums.pb.go Updates generated version metadata.
cmd/​protoc-gen-gorums/​dev/​zorums_server_gorums.pb.go Regenerates development server bindings.
cmd/​protoc-gen-gorums/​dev/​zorums_remotecall_gorums.pb.go Updates generated version metadata.
cmd/​protoc-gen-gorums/​dev/​zorums_quorumcall_gorums.pb.go Updates generated version metadata.
cmd/​protoc-gen-gorums/​dev/​zorums_multicast_gorums.pb.go Updates generated version metadata.
cmd/​protoc-gen-gorums/​dev/​zorums_client_gorums.pb.go Updates generated version metadata.
call_test.go Updates one-way handler test registrations.
call_async_test.go Propagates the callback through asynchronous handler tests.
benchkit/​gorums.pb.go Updates generated version metadata.
benchkit/​control_gorums.pb.go Regenerates benchmark control server bindings. Critical: benchkit/go.mod still requires v0.12.1; update the dependency and related workspace/checksum metadata for generated version 13.
benchkit/​benchmark/​symmetric_test.go Updates benchmark handlers and response construction.
benchkit/​benchmark/​gorums.pb.go Updates generated version metadata.
benchkit/​benchmark/​benchmark_test.go Updates benchmark handlers and interceptors.
benchkit/​benchmark/​benchmark_gorums.pb.go Regenerates benchmark server bindings.

Review effort: Lite

Comment on lines +19 to +21
_ = gorumsimpl.EnforceVersion(13 - gorumsimpl.MinVersion)
// Verify that the gorums runtime is sufficiently up-to-date.
_ = gorumsimpl.EnforceVersion(gorumsimpl.MaxVersion - 12)
_ = gorumsimpl.EnforceVersion(gorumsimpl.MaxVersion - 13)
Comment on lines +19 to +21
_ = gorumsimpl.EnforceVersion(13 - gorumsimpl.MinVersion)
// Verify that the gorums runtime is sufficiently up-to-date.
_ = gorumsimpl.EnforceVersion(gorumsimpl.MaxVersion - 12)
_ = gorumsimpl.EnforceVersion(gorumsimpl.MaxVersion - 13)
Comment on lines +13 to +14
Minor = 13
Patch = 0
@meling
meling force-pushed the feature/424/generated-code-boundary branch from 52f4cb1 to 1c00246 Compare November 2, 2026 15:55
Base automatically changed from fix/425/call-api-contracts to master November 2, 2026 16:48
@meling
meling force-pushed the feature/424/generated-code-boundary branch from 1c00246 to 69a0236 Compare November 2, 2026 16:48
@meling
meling force-pushed the feature/424/generated-code-boundary branch from 69a0236 to dd272b0 Compare November 2, 2026 17:05
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.

gorums: reduce generated-code hooks in the application-facing API

2 participants