Skip to content

feat(cluster): preserve isolated replication over gRPC - #495

Open
yordis wants to merge 1 commit into
yordis/chore-retire-core-tcp-testsfrom
yordis/feat-grpc-cluster-endpoints
Open

yordis wants to merge 1 commit into
yordis/chore-retire-core-tcp-testsfrom
yordis/feat-grpc-cluster-endpoints

Conversation

@yordis

@yordis yordis commented Sep 12, 2026

Copy link
Copy Markdown
Member
  • Preserves isolated replication topology and failure detection on the supported gRPC transport.

@yordis
yordis requested a review from a team as a code owner September 12, 2026 23:22
@cursor

cursor Bot commented Sep 12, 2026

Copy link
Copy Markdown

PR Summary

High Risk
Changes core cluster topology, replication transport, and gossip compatibility; misconfiguration of split listeners or endpoint matching could break replication and leader redirect behavior.

Overview
This PR replaces TCP-based cluster replication and client routing with gRPC on a dedicated Kestrel listener, and drops internal/external TCP endpoints from gossip, elections, leader discovery, and the admin cluster UI.

Runtime wiring: the node listens separately on node HTTP and replication HTTP/2 ports. A ReplicationEndpointPolicy returns 404 when replication gRPC paths hit the wrong listener (and vice versa). NodeConnectionTracker wraps connections to record bytes, TLS, and HTTP vs gRPC usage for observability. Replica stats in the dashboard now correlate members by HTTP endpoint instead of internal TCP.

Cluster model: MemberInfo carries ReplicationEndPoint (defaulting to HTTP for mixed-version gossip). Gossip gRPC round-trip preserves replication endpoints; ClientClusterInfo and NotHandled leader info expose HTTP only. Config adds ReplicationPortAdvertiseAs (with deprecated alias) and validates that node and replication listeners do not overlap on the same address/port.

Tests: TCP unit-test plugin, legacy ClientAPI helpers, and TCP transport tests are removed; MiniNode / cluster fixtures use node + replication endpoints; integration tests use gRPC streams clients instead of EventStoreConnection.

Reviewed by Cursor Bugbot for commit afa6107. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Sep 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 7401ff7b-1a9a-4960-b2df-1920d1e7ce87

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@yordis
yordis added this pull request to stack #500 September 12, 2026 23:22

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit dbf4cb3. Configure here.

@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch from dbf4cb3 to ba04fb5 Compare September 13, 2026 00:15
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch 2 times, most recently from 76309a0 to 60eb376 Compare September 13, 2026 00:33
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch from ba04fb5 to 6c0e186 Compare September 13, 2026 00:33
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from 60eb376 to 59514f1 Compare September 13, 2026 00:58
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch 2 times, most recently from 1330f22 to e681f13 Compare September 13, 2026 01:16
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch 2 times, most recently from 059ca6b to 9cc1112 Compare September 13, 2026 01:31
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch 2 times, most recently from 504ff97 to f9a5f73 Compare September 13, 2026 01:46
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from 0e1e63e to 104f2a6 Compare September 13, 2026 02:04
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch 2 times, most recently from 07068b1 to f0fb411 Compare September 13, 2026 02:29
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from 104f2a6 to d45ae37 Compare September 13, 2026 02:29
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch from f0fb411 to e243e25 Compare September 13, 2026 02:59
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch 2 times, most recently from 9739ad5 to d499103 Compare September 13, 2026 03:14
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch from e243e25 to 32b689d Compare September 13, 2026 03:14
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from d499103 to d5dc2ee Compare September 13, 2026 03:46
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch from 32b689d to 430b47b Compare September 13, 2026 03:46
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from d5dc2ee to 183d819 Compare September 13, 2026 04:23
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch 2 times, most recently from 2272c22 to 36955e8 Compare September 13, 2026 06:04
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from 183d819 to 2c805a1 Compare September 13, 2026 06:04
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch from 36955e8 to 5233227 Compare September 13, 2026 18:21
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from 2c805a1 to 2d332c1 Compare September 13, 2026 18:21
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch from 5233227 to d04c94d Compare September 13, 2026 21:00
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from 2d332c1 to 9989238 Compare September 13, 2026 21:00
@yordis
yordis removed this pull request from stack #500 September 17, 2026 01:12
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from 9989238 to a173352 Compare September 17, 2026 01:14
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch 2 times, most recently from 620fc9f to dfc40ad Compare September 17, 2026 01:23
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from 0e43b8c to a8f05de Compare September 17, 2026 02:01
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch from dfc40ad to 9706285 Compare September 17, 2026 02:01
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from a8f05de to a25e23b Compare September 17, 2026 02:37
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch 2 times, most recently from 4e72264 to 41ed48e Compare September 17, 2026 03:26
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from a25e23b to 313e9a7 Compare September 17, 2026 03:26
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
@yordis
yordis force-pushed the yordis/chore-retire-core-tcp-tests branch from 313e9a7 to e782529 Compare September 17, 2026 04:25
@yordis
yordis force-pushed the yordis/feat-grpc-cluster-endpoints branch from 41ed48e to afa6107 Compare September 17, 2026 04:25
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