diff --git a/cmd/admin-handlers.go b/cmd/admin-handlers.go index ecbb7ca33..6b975f1e7 100644 --- a/cmd/admin-handlers.go +++ b/cmd/admin-handlers.go @@ -241,8 +241,7 @@ func (a adminAPIHandlers) ServerInfoHandler(w http.ResponseWriter, r *http.Reque if objectAPI == nil { return } - - thisAddr, err := xnet.ParseHost(GetLocalPeer(globalEndpoints)) + hostName, err := getHostName(r) if err != nil { writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) return @@ -252,7 +251,7 @@ func (a adminAPIHandlers) ServerInfoHandler(w http.ResponseWriter, r *http.Reque // Once we have received all the ServerInfo from peers // add the local peer server info as well. serverInfo = append(serverInfo, ServerInfo{ - Addr: thisAddr.String(), + Addr: hostName, Data: &ServerInfoData{ StorageInfo: objectAPI.StorageInfo(ctx), ConnStats: globalConnStats.toServerConnStats(), @@ -330,7 +329,7 @@ func (a adminAPIHandlers) PerfInfoHandler(w http.ResponseWriter, r *http.Request return } // Get drive performance details from local server's drive(s) - dp := localEndpointsDrivePerf(globalEndpoints) + dp := localEndpointsDrivePerf(globalEndpoints, r) // Notify all other MinIO peers to report drive performance numbers dps := globalNotificationSys.DrivePerfInfo() @@ -348,7 +347,7 @@ func (a adminAPIHandlers) PerfInfoHandler(w http.ResponseWriter, r *http.Request writeSuccessResponseJSON(w, jsonBytes) case "cpu": // Get CPU load details from local server's cpu(s) - cpu := localEndpointsCPULoad(globalEndpoints) + cpu := localEndpointsCPULoad(globalEndpoints, r) // Notify all other MinIO peers to report cpu load numbers cpus := globalNotificationSys.CPULoadInfo() cpus = append(cpus, cpu) @@ -365,7 +364,7 @@ func (a adminAPIHandlers) PerfInfoHandler(w http.ResponseWriter, r *http.Request writeSuccessResponseJSON(w, jsonBytes) case "mem": // Get mem usage details from local server(s) - m := localEndpointsMemUsage(globalEndpoints) + m := localEndpointsMemUsage(globalEndpoints, r) // Notify all other MinIO peers to report mem usage numbers mems := globalNotificationSys.MemUsageInfo() mems = append(mems, m) @@ -443,8 +442,7 @@ func (a adminAPIHandlers) TopLocksHandler(w http.ResponseWriter, r *http.Request writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErr(ErrMethodNotAllowed), r.URL) return } - - thisAddr, err := xnet.ParseHost(GetLocalPeer(globalEndpoints)) + hostName, err := getHostName(r) if err != nil { writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) return @@ -455,7 +453,7 @@ func (a adminAPIHandlers) TopLocksHandler(w http.ResponseWriter, r *http.Request // add the local peer locks list as well. localLocks := globalLockServer.ll.DupLockMap() peerLocks = append(peerLocks, &PeerLocks{ - Addr: thisAddr.String(), + Addr: hostName, Locks: localLocks, }) diff --git a/cmd/admin-handlers_test.go b/cmd/admin-handlers_test.go index 8c9adf28f..a44d1df41 100644 --- a/cmd/admin-handlers_test.go +++ b/cmd/admin-handlers_test.go @@ -706,9 +706,6 @@ func TestAdminServerInfo(t *testing.T) { } for _, serverInfo := range results { - if len(serverInfo.Addr) == 0 { - t.Error("Expected server address to be non empty") - } if serverInfo.Error != "" { t.Errorf("Unexpected error = %v\n", serverInfo.Error) } diff --git a/cmd/endpoint.go b/cmd/endpoint.go index db5b0fb41..d7ec636fe 100644 --- a/cmd/endpoint.go +++ b/cmd/endpoint.go @@ -20,6 +20,7 @@ import ( "context" "fmt" "net" + "net/http" "net/url" "os" "path" @@ -288,7 +289,7 @@ func (endpoints EndpointList) UpdateIsLocal() error { // localEndpointsMemUsage - returns ServerMemUsageInfo for only the // local endpoints from given list of endpoints -func localEndpointsMemUsage(endpoints EndpointList) ServerMemUsageInfo { +func localEndpointsMemUsage(endpoints EndpointList, r *http.Request) ServerMemUsageInfo { var memUsages []mem.Usage var historicUsages []mem.Usage scratchSpace := map[string]bool{} @@ -303,8 +304,12 @@ func localEndpointsMemUsage(endpoints EndpointList) ServerMemUsageInfo { scratchSpace[endpoint.Host] = true } } + addr := r.Host + if globalIsDistXL { + addr = GetLocalPeer(endpoints) + } return ServerMemUsageInfo{ - Addr: GetLocalPeer(endpoints), + Addr: addr, Usage: memUsages, HistoricUsage: historicUsages, } @@ -312,7 +317,7 @@ func localEndpointsMemUsage(endpoints EndpointList) ServerMemUsageInfo { // localEndpointsCPULoad - returns ServerCPULoadInfo for only the // local endpoints from given list of endpoints -func localEndpointsCPULoad(endpoints EndpointList) ServerCPULoadInfo { +func localEndpointsCPULoad(endpoints EndpointList, r *http.Request) ServerCPULoadInfo { var cpuLoads []cpu.Load var historicLoads []cpu.Load scratchSpace := map[string]bool{} @@ -327,8 +332,12 @@ func localEndpointsCPULoad(endpoints EndpointList) ServerCPULoadInfo { scratchSpace[endpoint.Host] = true } } + addr := r.Host + if globalIsDistXL { + addr = GetLocalPeer(endpoints) + } return ServerCPULoadInfo{ - Addr: GetLocalPeer(endpoints), + Addr: addr, Load: cpuLoads, HistoricLoad: historicLoads, } @@ -336,7 +345,7 @@ func localEndpointsCPULoad(endpoints EndpointList) ServerCPULoadInfo { // localEndpointsDrivePerf - returns ServerDrivesPerfInfo for only the // local endpoints from given list of endpoints -func localEndpointsDrivePerf(endpoints EndpointList) ServerDrivesPerfInfo { +func localEndpointsDrivePerf(endpoints EndpointList, r *http.Request) ServerDrivesPerfInfo { var dps []disk.Performance for _, endpoint := range endpoints { // Only proceed for local endpoints @@ -351,9 +360,12 @@ func localEndpointsDrivePerf(endpoints EndpointList) ServerDrivesPerfInfo { dps = append(dps, dp) } } - + addr := r.Host + if globalIsDistXL { + addr = GetLocalPeer(endpoints) + } return ServerDrivesPerfInfo{ - Addr: GetLocalPeer(endpoints), + Addr: addr, Perf: dps, } } diff --git a/cmd/handler-utils.go b/cmd/handler-utils.go index f55c47819..3e0433412 100644 --- a/cmd/handler-utils.go +++ b/cmd/handler-utils.go @@ -31,6 +31,7 @@ import ( "github.com/minio/minio/cmd/logger" "github.com/minio/minio/pkg/auth" "github.com/minio/minio/pkg/handlers" + xnet "github.com/minio/minio/pkg/net" ) // Parses location constraint from the incoming reader. @@ -384,3 +385,17 @@ func notFoundHandlerJSON(w http.ResponseWriter, r *http.Request) { func notFoundHandler(w http.ResponseWriter, r *http.Request) { writeErrorResponse(context.Background(), w, errorCodes.ToAPIErr(ErrMethodNotAllowed), r.URL, guessIsBrowserReq(r)) } + +// gets host name for current node +func getHostName(r *http.Request) (hostName string, err error) { + var thisAddr *xnet.Host + hostName = r.Host + if globalIsDistXL { + thisAddr, err = xnet.ParseHost(GetLocalPeer(globalEndpoints)) + if err != nil { + return + } + hostName = thisAddr.String() + } + return +} diff --git a/cmd/http-tracer.go b/cmd/http-tracer.go index 4a91a4088..d93a5d801 100644 --- a/cmd/http-tracer.go +++ b/cmd/http-tracer.go @@ -21,6 +21,7 @@ import ( "fmt" "io" "io/ioutil" + "net" "net/http" "reflect" "runtime" @@ -28,7 +29,6 @@ import ( "strings" "time" - xnet "github.com/minio/minio/pkg/net" trace "github.com/minio/minio/pkg/trace" ) @@ -145,11 +145,15 @@ func Trace(f http.HandlerFunc, logBody bool, w http.ResponseWriter, r *http.Requ t := trace.Info{FuncName: name} reqBodyRecorder = &recordRequest{Reader: r.Body, logBody: logBody} r.Body = ioutil.NopCloser(reqBodyRecorder) - - host, err := xnet.ParseHost(GetLocalPeer(globalEndpoints)) - if err == nil { - t.NodeName = host.Name + t.NodeName = r.Host + if globalIsDistXL { + t.NodeName = GetLocalPeer(globalEndpoints) + } + // strip port from the host address + if host, _, err := net.SplitHostPort(t.NodeName); err == nil { + t.NodeName = host } + rq := trace.RequestInfo{Time: time.Now().UTC(), Method: r.Method, Path: r.URL.Path, RawQuery: r.URL.RawQuery, Client: r.RemoteAddr} rq.Headers = cloneHeader(r.Header) rq.Headers.Set("Content-Length", strconv.Itoa(int(r.ContentLength))) diff --git a/cmd/peer-rest-server.go b/cmd/peer-rest-server.go index 11e207bb6..a7379ab5c 100644 --- a/cmd/peer-rest-server.go +++ b/cmd/peer-rest-server.go @@ -332,7 +332,7 @@ func (s *peerRESTServer) CPULoadInfoHandler(w http.ResponseWriter, r *http.Reque } ctx := newContext(r, w, "CPULoadInfo") - info := localEndpointsCPULoad(globalEndpoints) + info := localEndpointsCPULoad(globalEndpoints, r) defer w.(http.Flusher).Flush() logger.LogIf(ctx, gob.NewEncoder(w).Encode(info)) @@ -346,7 +346,7 @@ func (s *peerRESTServer) DrivePerfInfoHandler(w http.ResponseWriter, r *http.Req } ctx := newContext(r, w, "DrivePerfInfo") - info := localEndpointsDrivePerf(globalEndpoints) + info := localEndpointsDrivePerf(globalEndpoints, r) defer w.(http.Flusher).Flush() logger.LogIf(ctx, gob.NewEncoder(w).Encode(info)) @@ -359,7 +359,7 @@ func (s *peerRESTServer) MemUsageInfoHandler(w http.ResponseWriter, r *http.Requ return } ctx := newContext(r, w, "MemUsageInfo") - info := localEndpointsMemUsage(globalEndpoints) + info := localEndpointsMemUsage(globalEndpoints, r) defer w.(http.Flusher).Flush() logger.LogIf(ctx, gob.NewEncoder(w).Encode(info))