@cryptotaxi247 / kubo / commits / 1cd7e58c8

ulimit: handle freebsd ulimit code separately from the rest of the unixes

License: MIT Signed-off-by: Jeromy <why@ipfs.io>

Jeromy committed Nov 30, 2016 at 10:27 UTC 1cd7e58c80052db575cce67d7774bfb67b5097a4
3 files changed +64 -13
cmd/ipfs/ulimit.go new
+19
@@ -0,0 +1,19 @@
1 +package main
2 +
3 +import (
4 + "os"
5 + "strconv"
6 +)
7 +
8 +var ipfsFileDescNum = uint64(1024)
9 +
10 +func init() {
11 + if val := os.Getenv("IPFS_FD_MAX"); val != "" {
12 + n, err := strconv.Atoi(val)
13 + if err != nil {
14 + log.Errorf("bad value for IPFS_FD_MAX: %s", err)
15 + } else {
16 + ipfsFileDescNum = uint64(n)
17 + }
18 + }
19 +}
cmd/ipfs/ulimit_freebsd.go new
+44
@@ -0,0 +1,44 @@
1 +// +build freebsd
2 +
3 +package main
4 +
5 +import (
6 + "fmt"
7 + "syscall"
8 +)
9 +
10 +func init() {
11 + fileDescriptorCheck = checkAndSetUlimit
12 +}
13 +
14 +func checkAndSetUlimit() error {
15 + var rLimit syscall.Rlimit
16 + err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
17 + if err != nil {
18 + return fmt.Errorf("error getting rlimit: %s", err)
19 + }
20 +
21 + ipfsFileDescNum := int64(ipfsFileDescNum)
22 +
23 + var setting bool
24 + if rLimit.Cur < ipfsFileDescNum {
25 + if rLimit.Max < ipfsFileDescNum {
26 + log.Error("adjusting max")
27 + rLimit.Max = ipfsFileDescNum
28 + }
29 + fmt.Printf("Adjusting current ulimit to %d...\n", ipfsFileDescNum)
30 + rLimit.Cur = ipfsFileDescNum
31 + setting = true
32 + }
33 +
34 + err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
35 + if err != nil {
36 + return fmt.Errorf("error setting ulimit: %s", err)
37 + }
38 +
39 + if setting {
40 + fmt.Printf("Successfully raised file descriptor limit to %d.\n", ipfsFileDescNum)
41 + }
42 +
43 + return nil
44 +}
cmd/ipfs/ulimit_unix.go
+1 -13
@@ -1,25 +1,13 @@
1 -// +build darwin freebsd linux netbsd openbsd
1 +// +build darwin linux netbsd openbsd
2
3 package main
4
5 import (
6 "fmt"
7 - "os"
8 - "strconv"
7 "syscall"
8 )
9
12 -var ipfsFileDescNum = uint64(1024)
13 -
10 func init() {
15 - if val := os.Getenv("IPFS_FD_MAX"); val != "" {
16 - n, err := strconv.Atoi(val)
17 - if err != nil {
18 - log.Errorf("bad value for IPFS_FD_MAX: %s", err)
19 - } else {
20 - ipfsFileDescNum = uint64(n)
21 - }
22 - }
11 fileDescriptorCheck = checkAndSetUlimit
12 }
13