From 1cd7e58c80052db575cce67d7774bfb67b5097a4 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Wed, 30 Nov 2016 10:27:22 -0800 Subject: [PATCH] ulimit: handle freebsd ulimit code separately from the rest of the unixes License: MIT Signed-off-by: Jeromy --- cmd/ipfs/ulimit.go | 19 ++++++++++++++++ cmd/ipfs/ulimit_freebsd.go | 44 ++++++++++++++++++++++++++++++++++++++ cmd/ipfs/ulimit_unix.go | 14 +----------- 3 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 cmd/ipfs/ulimit.go create mode 100644 cmd/ipfs/ulimit_freebsd.go diff --git a/cmd/ipfs/ulimit.go b/cmd/ipfs/ulimit.go new file mode 100644 index 00000000000..fa517f1eafd --- /dev/null +++ b/cmd/ipfs/ulimit.go @@ -0,0 +1,19 @@ +package main + +import ( + "os" + "strconv" +) + +var ipfsFileDescNum = uint64(1024) + +func init() { + if val := os.Getenv("IPFS_FD_MAX"); val != "" { + n, err := strconv.Atoi(val) + if err != nil { + log.Errorf("bad value for IPFS_FD_MAX: %s", err) + } else { + ipfsFileDescNum = uint64(n) + } + } +} diff --git a/cmd/ipfs/ulimit_freebsd.go b/cmd/ipfs/ulimit_freebsd.go new file mode 100644 index 00000000000..d8011477251 --- /dev/null +++ b/cmd/ipfs/ulimit_freebsd.go @@ -0,0 +1,44 @@ +// +build freebsd + +package main + +import ( + "fmt" + "syscall" +) + +func init() { + fileDescriptorCheck = checkAndSetUlimit +} + +func checkAndSetUlimit() error { + var rLimit syscall.Rlimit + err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit) + if err != nil { + return fmt.Errorf("error getting rlimit: %s", err) + } + + ipfsFileDescNum := int64(ipfsFileDescNum) + + var setting bool + if rLimit.Cur < ipfsFileDescNum { + if rLimit.Max < ipfsFileDescNum { + log.Error("adjusting max") + rLimit.Max = ipfsFileDescNum + } + fmt.Printf("Adjusting current ulimit to %d...\n", ipfsFileDescNum) + rLimit.Cur = ipfsFileDescNum + setting = true + } + + err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit) + if err != nil { + return fmt.Errorf("error setting ulimit: %s", err) + } + + if setting { + fmt.Printf("Successfully raised file descriptor limit to %d.\n", ipfsFileDescNum) + } + + return nil +} diff --git a/cmd/ipfs/ulimit_unix.go b/cmd/ipfs/ulimit_unix.go index 63d0b0136ad..be4c5e265f4 100644 --- a/cmd/ipfs/ulimit_unix.go +++ b/cmd/ipfs/ulimit_unix.go @@ -1,25 +1,13 @@ -// +build darwin freebsd linux netbsd openbsd +// +build darwin linux netbsd openbsd package main import ( "fmt" - "os" - "strconv" "syscall" ) -var ipfsFileDescNum = uint64(1024) - func init() { - if val := os.Getenv("IPFS_FD_MAX"); val != "" { - n, err := strconv.Atoi(val) - if err != nil { - log.Errorf("bad value for IPFS_FD_MAX: %s", err) - } else { - ipfsFileDescNum = uint64(n) - } - } fileDescriptorCheck = checkAndSetUlimit }