expire stale locks when owner is down (#11247)

fixes #11246
master
Harshavardhana 4 years ago committed by GitHub
parent b35b537e3f
commit a4f6705874
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      cmd/admin-server-info.go
  2. 2
      cmd/globals.go
  3. 5
      cmd/local-locker.go
  4. 6
      cmd/prepare-storage.go
  5. 10
      cmd/server-main.go

@ -45,7 +45,7 @@ func getLocalServerProperty(endpointServerPools EndpointServerPools, r *http.Req
} }
_, present := network[nodeName] _, present := network[nodeName]
if !present { if !present {
if err := IsServerResolvable(endpoint); err == nil { if err := isServerResolvable(endpoint); err == nil {
network[nodeName] = "online" network[nodeName] = "online"
} else { } else {
network[nodeName] = "offline" network[nodeName] = "offline"

@ -192,6 +192,8 @@ var (
globalEndpoints EndpointServerPools globalEndpoints EndpointServerPools
globalRemoteEndpoints map[string]Endpoint
// Global server's network statistics // Global server's network statistics
globalConnStats = newConnStats() globalConnStats = newConnStats()

@ -228,6 +228,11 @@ func (l *localLocker) Expired(ctx context.Context, args dsync.LockArgs) (expired
// Check whether uid is still active // Check whether uid is still active
for _, entry := range lri { for _, entry := range lri {
if entry.UID == args.UID && entry.Owner == args.Owner { if entry.UID == args.UID && entry.Owner == args.Owner {
if ep, ok := globalRemoteEndpoints[args.Owner]; ok {
if err = isServerResolvable(ep); err != nil {
return true, nil
}
}
return false, nil return false, nil
} }
} }

@ -163,9 +163,9 @@ func formatErasureCleanupTmpLocalEndpoints(endpoints Endpoints) error {
// https://github.com/minio/minio/issues/5667 // https://github.com/minio/minio/issues/5667
var errErasureV3ThisEmpty = fmt.Errorf("Erasure format version 3 has This field empty") var errErasureV3ThisEmpty = fmt.Errorf("Erasure format version 3 has This field empty")
// IsServerResolvable - checks if the endpoint is resolvable // isServerResolvable - checks if the endpoint is resolvable
// by sending a naked HTTP request with liveness checks. // by sending a naked HTTP request with liveness checks.
func IsServerResolvable(endpoint Endpoint) error { func isServerResolvable(endpoint Endpoint) error {
serverURL := &url.URL{ serverURL := &url.URL{
Scheme: endpoint.Scheme, Scheme: endpoint.Scheme,
Host: endpoint.Host, Host: endpoint.Host,
@ -244,7 +244,7 @@ func connectLoadInitFormats(retryCount int, firstDisk bool, endpoints Endpoints,
return nil, nil, fmt.Errorf("Disk %s: %w", endpoints[i], err) return nil, nil, fmt.Errorf("Disk %s: %w", endpoints[i], err)
} }
if retryCount >= 5 { if retryCount >= 5 {
logger.Info("Unable to connect to %s: %v\n", endpoints[i], IsServerResolvable(endpoints[i])) logger.Info("Unable to connect to %s: %v\n", endpoints[i], isServerResolvable(endpoints[i]))
} }
} }
} }

@ -139,6 +139,16 @@ func serverHandleCmdArgs(ctx *cli.Context) {
globalMinioHost, globalMinioPort = mustSplitHostPort(globalMinioAddr) globalMinioHost, globalMinioPort = mustSplitHostPort(globalMinioAddr)
globalEndpoints, setupType, err = createServerEndpoints(globalCLIContext.Addr, serverCmdArgs(ctx)...) globalEndpoints, setupType, err = createServerEndpoints(globalCLIContext.Addr, serverCmdArgs(ctx)...)
globalRemoteEndpoints = make(map[string]Endpoint)
for _, z := range globalEndpoints {
for _, ep := range z.Endpoints {
if ep.IsLocal {
continue
}
globalRemoteEndpoints[ep.Host] = ep
}
}
logger.FatalIf(err, "Invalid command line arguments") logger.FatalIf(err, "Invalid command line arguments")
// allow transport to be HTTP/1.1 for proxying. // allow transport to be HTTP/1.1 for proxying.

Loading…
Cancel
Save