From 0d6024e2e0177232e56a5a9d37ba6b89cf354055 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 18 Sep 2026 11:34:05 -0700 Subject: [PATCH] pb: return empty server address for malformed grpc addresses GrpcAddressToServerAddress used to return the unparseable input on a hostAndPort failure, so a malformed raft address (e.g. "host:abc") flowed into admin dashboard master maps unchanged. Return an empty string instead, skip empty conversions at the two raft-cluster merge sites, and drop the now-stale comment about the fatal exit the earlier commit removed. --- weed/admin/dash/admin_data.go | 9 ++++++--- weed/admin/dash/admin_server.go | 3 +++ weed/pb/grpc_client_server.go | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/weed/admin/dash/admin_data.go b/weed/admin/dash/admin_data.go index c57b10a56..1b689b6dd 100644 --- a/weed/admin/dash/admin_data.go +++ b/weed/admin/dash/admin_data.go @@ -293,14 +293,17 @@ func (s *AdminServer) getMasterNodesStatus() []MasterNode { } raftCallSucceeded = true for _, server := range resp.ClusterServers { - // pb.GrpcAddressToServerAddress calls glog.Fatalf on a parse - // error, so pre-validate the raft address with net.SplitHostPort - // and skip malformed entries instead of taking the process down. + // Skip malformed raft addresses instead of letting an + // unconvertible value into masterMap. if _, _, splitErr := net.SplitHostPort(server.Address); splitErr != nil { glog.Warningf("skip master with invalid raft address %q: %v", server.Address, splitErr) continue } httpAddress := pb.GrpcAddressToServerAddress(server.Address) + if httpAddress == "" { + glog.Warningf("skip master with invalid raft address %q", server.Address) + continue + } masterMap[httpAddress] = MasterNode{ Address: httpAddress, IsLeader: server.IsLeader, diff --git a/weed/admin/dash/admin_server.go b/weed/admin/dash/admin_server.go index d015d571c..c99d92632 100644 --- a/weed/admin/dash/admin_server.go +++ b/weed/admin/dash/admin_server.go @@ -1351,6 +1351,9 @@ func (s *AdminServer) GetClusterMasters() (*ClusterMastersData, error) { for _, server := range resp.ClusterServers { // Raft stores gRPC addresses, convert to HTTP address httpAddress := pb.GrpcAddressToServerAddress(server.Address) + if httpAddress == "" { + continue + } // Update existing master info or create new one if masterInfo, exists := masterMap[httpAddress]; exists { diff --git a/weed/pb/grpc_client_server.go b/weed/pb/grpc_client_server.go index 30e5d63e9..8ba3a16f3 100644 --- a/weed/pb/grpc_client_server.go +++ b/weed/pb/grpc_client_server.go @@ -564,7 +564,7 @@ func GrpcAddressToServerAddress(grpcAddress string) (serverAddress string) { host, grpcPort, parseErr := hostAndPort(grpcAddress) if parseErr != nil { glog.Errorf("server grpc address %s parse error: %v", grpcAddress, parseErr) - return grpcAddress + return "" } port := int(grpcPort) - 10000