Repository navigation
Conversation
hjohn
requested review from
MGathier,
m1l4n54v1c and
trimoq
and removed request for
a team
October 20, 2026 13:56
hjohn
force-pushed
the
feature/node-capabilities
branch
from
October 20, 2026 14:05
c54da83 to
61dd82a
Compare
hatzlj
reviewed
Oct 20, 2026
smcvb
approved these changes
Oct 23, 2026
smcvb
left a comment
Contributor
There was a problem hiding this comment.
Frankly, I think this is fine as is. We can imagine all kinds of "nice" enumerations of option we'd have, but we (1) wouldn't have the list right now at all and (2) that'll tie us in to potential breaking API changes. By using a String for the capability, we have a lot of flexibility. Granted, I agree with @hatzlj, that some form of listing, somewhere, would be important.
hjohn
force-pushed
the
feature/node-capabilities
branch
2 times, most recently
from
October 26, 2026 14:42
ac152f9 to
22fdcaa
Compare
smcvb
reviewed
Oct 26, 2026
smcvb
left a comment
Contributor
There was a problem hiding this comment.
Some minor pointers out of curiosity
hjohn
force-pushed
the
feature/node-capabilities
branch
5 times, most recently
from
November 2, 2026 09:49
6f9141c to
6a7ce4c
Compare
smcvb
approved these changes
Nov 2, 2026
smcvb
left a comment
Contributor
There was a problem hiding this comment.
My concerns have been addressed, hence I'm approving this pull request. We shouldn't forget to backport this to the patch branch!
Adds AxonServerConnection.supports(String capability), backed by the capabilities reported in PlatformInfo on every (re)connect. A redirect is now followed to completion: the node we are sent to is asked for its own PlatformInfo in turn, until one answers for itself. Previously the client took the redirect on trust and opened the stream against a node it had never spoken to. Each answer reports the capabilities of the node that produced it, so whichever node we end up on we hold its capabilities - including when we stop following redirects and stay where we are, since following one more hop would land us on an unqueried node again. This all happens inside connect(), before the connection is handed out, so the set is known up front and fixed for as long as it holds. Also adds DcbEventChannel.sourceWithSnapshot and SnapshotChannel.findLastSnapshot for the superseding Axon Server RPCs, and deprecates the source(SnapshottedSourceRequest) overload, whose RPC is no longer implemented.
hjohn
force-pushed
the
feature/node-capabilities
branch
from
November 3, 2026 11:12
6a7ce4c to
9c53457
Compare
MGathier
approved these changes
Nov 3, 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.
Adds
AxonServerConnection.supports(String capability), backed by the capabilities reported inPlatformInfoon every (re)connect inAxonServerManagedChannel.Lets a client check in advance whether the node it's currently connected to supports an optional RPC/behavior, rather than calling it and reacting to
UNIMPLEMENTED. Re-evaluated on every reconnect, so gaining/losing a capability (e.g. after moving to a different cluster node) takes effect immediately rather than being cached for the connection's lifetime.A redirect is now followed to completion. Previously the client called
GetPlatformServerand, on a redirect, simply opened the stream against the node it was pointed at without ever asking it anything. It now re-runs the handshake against each node it is sent to until one answers for itself, with a hop limit. Since every answer reports the capabilities of the node that produced it, the client holds the capabilities of whichever node it ends up on - including when it stops following redirects and stays put, because following one more hop would land it on an unqueried node again.This happens inside
connect(), before the connection is handed out, so there is no window in which the connection is usable with capabilities still unknown, and the set is fixed for as long as that connection holds.Also exposes the two RPCs that supersede the snapshotted-source path:
DcbEventChannel.sourceWithSnapshotandSnapshotChannel.findLastSnapshot. Thesource(SnapshottedSourceRequest)overload is deprecated, since Axon Server no longer implements the RPC behind it.Depends on AxonIQ/axon-server-api#80 for
PlatformInfo.capabilities, on #78 for the new RPCs, and on AxonIQ/axon-server-api#81 forSnapshotCandidate, which the new RPCs take as their candidates.First consumer: AxoniqFramework's
AxonServerEventStorageEngine, in a followup PR.