diff options
author | lash <nolash@users.noreply.github.com> | 2017-12-21 21:30:44 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2017-12-21 21:30:44 +0800 |
commit | 14852810b4bd53bf6e3b04e9b4017a1ee87a4003 (patch) | |
tree | d10375032226427dbcd1ae5f84a59b08cff1b94d /cmd/utils | |
parent | 542d51895f54b9f869379cf4ad5549c82e525711 (diff) | |
download | dexon-14852810b4bd53bf6e3b04e9b4017a1ee87a4003.tar dexon-14852810b4bd53bf6e3b04e9b4017a1ee87a4003.tar.gz dexon-14852810b4bd53bf6e3b04e9b4017a1ee87a4003.tar.bz2 dexon-14852810b4bd53bf6e3b04e9b4017a1ee87a4003.tar.lz dexon-14852810b4bd53bf6e3b04e9b4017a1ee87a4003.tar.xz dexon-14852810b4bd53bf6e3b04e9b4017a1ee87a4003.tar.zst dexon-14852810b4bd53bf6e3b04e9b4017a1ee87a4003.zip |
cmd/utils: add check on fd hard limit, skip test if below target (#15684)
* cmd/utils: Add check on hard limit, skip test if below target
* cmd/utils: Cross platform compatible fd limit test
* cmd/utils: Remove syscall.Rlimit in test
* cmd/utils: comment fd utility method
Diffstat (limited to 'cmd/utils')
-rw-r--r-- | cmd/utils/fdlimit_freebsd.go | 10 | ||||
-rw-r--r-- | cmd/utils/fdlimit_test.go | 12 | ||||
-rw-r--r-- | cmd/utils/fdlimit_unix.go | 10 | ||||
-rw-r--r-- | cmd/utils/fdlimit_windows.go | 6 |
4 files changed, 37 insertions, 1 deletions
diff --git a/cmd/utils/fdlimit_freebsd.go b/cmd/utils/fdlimit_freebsd.go index 4cb5013c8..f9ed8937e 100644 --- a/cmd/utils/fdlimit_freebsd.go +++ b/cmd/utils/fdlimit_freebsd.go @@ -52,3 +52,13 @@ func getFdLimit() (int, error) { } return int(limit.Cur), nil } + +// getFdMaxLimit retrieves the maximum number of file descriptors this process is +// allowed to request for itself. +func getFdMaxLimit() (int, error) { + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + return int(limit.Max), nil +} diff --git a/cmd/utils/fdlimit_test.go b/cmd/utils/fdlimit_test.go index 0a950a6c9..48489cf4c 100644 --- a/cmd/utils/fdlimit_test.go +++ b/cmd/utils/fdlimit_test.go @@ -16,12 +16,22 @@ package utils -import "testing" +import ( + "fmt" + "testing" +) // TestFileDescriptorLimits simply tests whether the file descriptor allowance // per this process can be retrieved. func TestFileDescriptorLimits(t *testing.T) { target := 4096 + hardlimit, err := getFdMaxLimit() + if err != nil { + t.Fatal(err) + } + if hardlimit < target { + t.Skip(fmt.Sprintf("system limit is less than desired test target: %d < %d", hardlimit, target)) + } if limit, err := getFdLimit(); err != nil || limit <= 0 { t.Fatalf("failed to retrieve file descriptor limit (%d): %v", limit, err) diff --git a/cmd/utils/fdlimit_unix.go b/cmd/utils/fdlimit_unix.go index 08e153bbd..c08d1fab0 100644 --- a/cmd/utils/fdlimit_unix.go +++ b/cmd/utils/fdlimit_unix.go @@ -48,3 +48,13 @@ func getFdLimit() (int, error) { } return int(limit.Cur), nil } + +// getFdMaxLimit retrieves the maximum number of file descriptors this process is +// allowed to request for itself. +func getFdMaxLimit() (int, error) { + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + return int(limit.Max), nil +} diff --git a/cmd/utils/fdlimit_windows.go b/cmd/utils/fdlimit_windows.go index 53aad3d7a..f239683d2 100644 --- a/cmd/utils/fdlimit_windows.go +++ b/cmd/utils/fdlimit_windows.go @@ -39,3 +39,9 @@ func getFdLimit() (int, error) { // Please see raiseFdLimit for the reason why we use hard coded 16K as the limit return 16384, nil } + +// getFdMaxLimit retrieves the maximum number of file descriptors this process is +// allowed to request for itself. +func getFdMaxLimit() (int, error) { + return getFdLimit() +} |