mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-27 14:39:40 -08:00
637235f0a6
This reverts the removal of type casting due to an error in the dragonfly integration. The change in the type casting introduced by the commit causes a type mismatch, resulting in the following errors: util/runtime/limits_default.go:42:57: cannot use rlimit.Cur (variable of type int64) as type uint64 in argument to limitToString util/runtime/limits_default.go:42:90: cannot use rlimit.Max (variable of type int64) as type uint64 in argument to limitToString Reverting this commit to resolve the type mismatch error and maintain compatibility with the dragonfly integration. Signed-off-by: Julien Pivotto <roidelapluie@o11y.eu>
51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
// Copyright 2017 The Prometheus Authors
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
//go:build !windows
|
|
// +build !windows
|
|
|
|
package runtime
|
|
|
|
import (
|
|
"fmt"
|
|
"syscall"
|
|
)
|
|
|
|
// syscall.RLIM_INFINITY is a constant and its default type is int.
|
|
// It needs to be converted to an int64 variable to be compared with uint64 values.
|
|
// See https://golang.org/ref/spec#Conversions
|
|
var unlimited int64 = syscall.RLIM_INFINITY
|
|
|
|
func limitToString(v uint64, unit string) string {
|
|
if v == uint64(unlimited) {
|
|
return "unlimited"
|
|
}
|
|
return fmt.Sprintf("%d%s", v, unit)
|
|
}
|
|
|
|
func getLimits(resource int, unit string) string {
|
|
rlimit := syscall.Rlimit{}
|
|
err := syscall.Getrlimit(resource, &rlimit)
|
|
if err != nil {
|
|
panic("syscall.Getrlimit failed: " + err.Error())
|
|
}
|
|
// rlimit.Cur and rlimit.Max are int64 on some platforms, such as dragonfly.
|
|
// We need to cast them explicitly to uint64.
|
|
return fmt.Sprintf("(soft=%s, hard=%s)", limitToString(uint64(rlimit.Cur), unit), limitToString(uint64(rlimit.Max), unit)) //nolint:unconvert
|
|
}
|
|
|
|
// FdLimits returns the soft and hard limits for file descriptors.
|
|
func FdLimits() string {
|
|
return getLimits(syscall.RLIMIT_NOFILE, "")
|
|
}
|