|
|
|
@ -22,6 +22,7 @@ import ( |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
"github.com/minio/minio/cmd/config/api" |
|
|
|
|
"github.com/minio/minio/pkg/sys" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
type apiConfig struct { |
|
|
|
@ -33,22 +34,30 @@ type apiConfig struct { |
|
|
|
|
corsAllowOrigins []string |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (t *apiConfig) init(cfg api.Config) { |
|
|
|
|
func (t *apiConfig) init(cfg api.Config, setDriveCount int) { |
|
|
|
|
t.mu.Lock() |
|
|
|
|
defer t.mu.Unlock() |
|
|
|
|
|
|
|
|
|
t.readyDeadline = cfg.APIReadyDeadline |
|
|
|
|
t.corsAllowOrigins = cfg.APICorsAllowOrigin |
|
|
|
|
var apiRequestsMaxPerNode int |
|
|
|
|
if cfg.APIRequestsMax <= 0 { |
|
|
|
|
stats, err := sys.GetStats() |
|
|
|
|
if err != nil { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
apiRequestsMax := cfg.APIRequestsMax |
|
|
|
|
// max requests per node is calculated as
|
|
|
|
|
// total_ram / ram_per_request
|
|
|
|
|
// ram_per_request is 4MiB * setDriveCount + 2 * 10MiB (default erasure block size)
|
|
|
|
|
apiRequestsMaxPerNode = int(stats.TotalRAM / uint64(setDriveCount*readBlockSize+blockSizeV1*2)) |
|
|
|
|
} else { |
|
|
|
|
apiRequestsMaxPerNode = cfg.APIRequestsMax |
|
|
|
|
if len(globalEndpoints.Hostnames()) > 0 { |
|
|
|
|
apiRequestsMax /= len(globalEndpoints.Hostnames()) |
|
|
|
|
apiRequestsMaxPerNode /= len(globalEndpoints.Hostnames()) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
t.requestsPool = make(chan struct{}, apiRequestsMax) |
|
|
|
|
t.requestsPool = make(chan struct{}, apiRequestsMaxPerNode) |
|
|
|
|
t.requestsDeadline = cfg.APIRequestsDeadline |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|