fail when endpoints point to same path locally (#5523)

master
Harshavardhana 7 years ago committed by Nitish Tiwari
parent e22438c8cd
commit 22897de4c7
  1. 18
      cmd/endpoint.go
  2. 2
      cmd/endpoint_test.go

@ -334,7 +334,7 @@ func CreateEndpoints(serverAddr string, args ...string) (string, EndpointList, S
return serverAddr, endpoints, setupType, fmt.Errorf("no endpoint found for this host") return serverAddr, endpoints, setupType, fmt.Errorf("no endpoint found for this host")
} }
// Check whether same path is not used in endpoints of a host. // Check whether same path is not used in endpoints of a host on different port.
{ {
pathIPMap := make(map[string]set.StringSet) pathIPMap := make(map[string]set.StringSet)
for _, endpoint := range endpoints { for _, endpoint := range endpoints {
@ -349,7 +349,6 @@ func CreateEndpoints(serverAddr string, args ...string) (string, EndpointList, S
err = fmt.Errorf("path '%s' can not be served by different port on same address", endpoint.Path) err = fmt.Errorf("path '%s' can not be served by different port on same address", endpoint.Path)
return serverAddr, endpoints, setupType, err return serverAddr, endpoints, setupType, err
} }
pathIPMap[endpoint.Path] = IPSet.Union(hostIPSet) pathIPMap[endpoint.Path] = IPSet.Union(hostIPSet)
} else { } else {
pathIPMap[endpoint.Path] = hostIPSet pathIPMap[endpoint.Path] = hostIPSet
@ -357,6 +356,21 @@ func CreateEndpoints(serverAddr string, args ...string) (string, EndpointList, S
} }
} }
// Check whether same path is used for more than 1 local endpoints.
{
localPathSet := set.CreateStringSet()
for _, endpoint := range endpoints {
if !endpoint.IsLocal {
continue
}
if localPathSet.Contains(endpoint.Path) {
err = fmt.Errorf("path '%s' cannot be served by different address on same server", endpoint.Path)
return serverAddr, endpoints, setupType, err
}
localPathSet.Add(endpoint.Path)
}
}
// Check whether serverAddrPort matches at least in one of port used in local endpoints. // Check whether serverAddrPort matches at least in one of port used in local endpoints.
{ {
if !localPortSet.Contains(serverAddrPort) { if !localPortSet.Contains(serverAddrPort) {

@ -257,7 +257,7 @@ func TestCreateEndpoints(t *testing.T) {
Endpoint{URL: &url.URL{Path: "/d4"}, IsLocal: true}, Endpoint{URL: &url.URL{Path: "/d4"}, IsLocal: true},
}, XLSetupType, nil}, }, XLSetupType, nil},
{":9001", []string{"http://10.0.0.1:9000/export", "http://10.0.0.2:9000/export", "http://" + nonLoopBackIP + ":9001/export", "http://10.0.0.2:9001/export"}, "", EndpointList{}, -1, fmt.Errorf("path '/export' can not be served by different port on same address")}, {":9001", []string{"http://10.0.0.1:9000/export", "http://10.0.0.2:9000/export", "http://" + nonLoopBackIP + ":9001/export", "http://10.0.0.2:9001/export"}, "", EndpointList{}, -1, fmt.Errorf("path '/export' can not be served by different port on same address")},
{":9000", []string{"http://127.0.0.1:9000/export", "http://" + nonLoopBackIP + ":9000/export", "http://10.0.0.1:9000/export", "http://10.0.0.2:9000/export"}, "", EndpointList{}, -1, fmt.Errorf("path '/export' cannot be served by different address on same server")},
{":9000", []string{"http://localhost/d1", "http://localhost/d2", "http://example.org/d3", "http://example.com/d4"}, "", EndpointList{}, -1, fmt.Errorf("'localhost' resolves to loopback address is not allowed for distributed XL")}, {":9000", []string{"http://localhost/d1", "http://localhost/d2", "http://example.org/d3", "http://example.com/d4"}, "", EndpointList{}, -1, fmt.Errorf("'localhost' resolves to loopback address is not allowed for distributed XL")},
// DistXL type // DistXL type

Loading…
Cancel
Save