Browse Source

Canonicalize self peer entry to avoid raft self-alias panic

pull/8272/head
Chris Lu 2 days ago
parent
commit
ae27e17e6f
  1. 6
      weed/command/master.go
  2. 10
      weed/command/master_test.go

6
weed/command/master.go

@ -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
}
}

10
weed/command/master_test.go

@ -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)
}
}
}
Loading…
Cancel
Save