Canonicalize self peer entry to avoid raft self-alias panic

This commit is contained in:
Chris Lu
2026-02-09 18:07:01 -08:00
parent 02dac23119
commit ae27e17e6f
2 changed files with 14 additions and 2 deletions

View File

@@ -342,10 +342,12 @@ func checkPeers(masterIp string, masterPort int, masterGrpcPort int, peers strin
cleanedPeers = pb.ServerAddresses(peers).ToAddresses()
hasSelf := false
for _, peer := range cleanedPeers {
for i, peer := range cleanedPeers {
if peer.ToHttpAddress() == masterAddress.ToHttpAddress() {
// Canonicalize self to avoid adding a second logical self peer
// when -peers uses host:port and local name is host:port.grpcPort.
cleanedPeers[i] = masterAddress
hasSelf = true
break
}
}

View File

@@ -33,3 +33,13 @@ func TestCheckPeersAddsSelfWhenGrpcPortMismatches(t *testing.T) {
t.Fatalf("expected peers %+v to contain self %s by HTTP address", peers, self)
}
}
func TestCheckPeersCanonicalizesSelfEntry(t *testing.T) {
self, peers := checkPeers("127.0.0.1", 9000, 19000, "127.0.0.1:9000,127.0.0.1:9002,127.0.0.1:9003")
for _, peer := range peers {
if peer.ToHttpAddress() == self.ToHttpAddress() && peer != self {
t.Fatalf("expected self peer to be canonicalized to %q, got %q", self, peer)
}
}
}