Hi Jun,

Thanks for the comments. See my comments below.

On Mon, Feb 26, 2024 at 4:48 PM Jun Rao <j...@confluent.io.invalid> wrote:
> 15.1 It would be useful to document the process of changing the controller
> listener. For example, what configs need to be changed in what order and
> how a voter/observer selects the listener when multiple listeners are
> returned.

Yes. I'll do that. I'll add a section to the "User Explanation" section.

> 15.2 Thinking a bit more. The primary usage of multiple listeners is for
> changing the listeners online. So, we may not need to support multiple
> listeners in the initial setup phase.

That is true. I'll revert those changes. We can create another KIP and
add them if there is a use case for supporting multiple endpoints
during bootstrapping.

> 30. Well, VotersRecords and LeaderChangeRecord depend on RPCs like
> AddVoter, UpdateVoter and Vote, etc. Are those RPCs controlled by
> metadata.version? What happens if metadata.version doesn't enable those
> RPCs, but kraft.version requires them.

Those RPCs and their versions are not controlled by the
metadata.version. They will be controlled by the ApiVersions reported
by the replicas and the kraft.version of the sender and receiver.

For AddVoter and RemoveVoter, the receiving replica will return an
UNSUPPORTED_VERSION error if they receive a request and the
kraft.version is not greater than 1. The admin client will send the
AddVoter and RemoveVoter requests if they are reported by ApiVersions.
The receiver will return an UNSUPPORTED_VERSION if the kraft.version
is not greater than 1. Voters will send the AddVoter, RemoveVoter RPCs
if their local kraft.version is greater than 1 and the remote replica
supports those RPCs (through ApiVersions).

Vote is a bit different. Since a replica's behavior is based on
uncommitted state it is possible for a voter in kraft.version 1 to
send a Vote request to a voter that is not in kraft.version 1. In that
case the receiving voter will handle the Vote request as normal but
not write the CandidateUuid that was sent in the request to the
QuorumStateData file. This is not ideal but I think it is okay since
this can only happen while the kraft.version is getting upgraded.

UpdateVoter is also a bit different. Voters will always send this RPC
if the leader supports it through ApiVersion. Once the leader receives
the RPC it will persist the data sent to the log, if the kraft.version
is greater than 1. If the kraft.version is 0, the leader will handle
the RPC and store the information sent in memory but it will not
persist it to the log.

This should be documented at different points in the KIP but I'll
create a section that summarizes this.

Thanks!
-- 
-José

Reply via email to