@cryptotaxi247 / kubo / commits / a0fe27816

Revert "raise default fd limit to 8192"

Steven Allen committed Apr 26, 2019 at 02:50 UTC a0fe27816a666d66835b87bf0255977f5b5392d9
1 file changed +22 -49
cmd/ipfs/util/ulimit.go
+22 -49
@@ -1,6 +1,7 @@
1 package util
2
3 import (
4 + "errors"
5 "fmt"
6 "os"
7 "strconv"
@@ -20,25 +21,26 @@ var (
21 setLimit func(uint64, uint64) error
22 )
23
23 -// minimum file descriptor limit before we complain
24 -const minFds = 2048
24 +// maxFds is the maximum number of file descriptors that go-ipfs
25 +// can use. The default value is 2048. This can be overwritten by the
26 +// IPFS_FD_MAX env variable
27 +var maxFds = uint64(2048)
28
26 -// default max file descriptor limit.
27 -const maxFds = 8192
28 -
29 -// userMaxFDs returns the value of IPFS_FD_MAX
30 -func userMaxFDs() uint64 {
29 +// setMaxFds sets the maxFds value from IPFS_FD_MAX
30 +// env variable if it's present on the system
31 +func setMaxFds() {
32 // check if the IPFS_FD_MAX is set up and if it does
33 // not have a valid fds number notify the user
34 if val := os.Getenv("IPFS_FD_MAX"); val != "" {
35 +
36 fds, err := strconv.ParseUint(val, 10, 64)
37 if err != nil {
38 log.Errorf("bad value for IPFS_FD_MAX: %s", err)
37 - return 0
39 + return
40 }
39 - return fds
41 +
42 + maxFds = fds
43 }
41 - return 0
44 }
45
46 // ManageFdLimit raise the current max file descriptor count
@@ -48,12 +50,7 @@ func ManageFdLimit() (changed bool, newLimit uint64, err error) {
50 return false, 0, nil
51 }
52
51 - targetLimit := uint64(maxFds)
52 - userLimit := userMaxFDs()
53 - if userLimit > 0 {
54 - targetLimit = userLimit
55 - }
56 -
53 + setMaxFds()
54 soft, hard, err := getLimit()
55 if err != nil {
56 return false, 0, err
@@ -68,47 +65,23 @@ func ManageFdLimit() (changed bool, newLimit uint64, err error) {
65 // the hard limit acts as a ceiling for the soft limit
66 // an unprivileged process may only set it's soft limit to a
67 // alue in the range from 0 up to the hard limit
71 - err = setLimit(targetLimit, targetLimit)
72 - switch err {
73 - case nil:
74 - newLimit = targetLimit
75 - case syscall.EPERM:
76 - // lower limit if necessary.
77 - if targetLimit > hard {
78 - targetLimit = hard
68 + if err = setLimit(maxFds, maxFds); err != nil {
69 + if err != syscall.EPERM {
70 + return false, 0, fmt.Errorf("error setting: ulimit: %s", err)
71 }
72
73 // the process does not have permission so we should only
74 // set the soft value
83 - err = setLimit(targetLimit, hard)
84 - if err != nil {
85 - err = fmt.Errorf("error setting ulimit wihout hard limit: %s", err)
86 - break
87 - }
88 - newLimit = targetLimit
89 -
90 - // Warn on lowered limit.
91 -
92 - if newLimit < userLimit {
93 - err = fmt.Errorf(
94 - "failed to raise ulimit to IPFS_FD_MAX (%d): set to %d",
95 - userLimit,
96 - newLimit,
75 + if maxFds > hard {
76 + return false, 0, errors.New(
77 + "cannot set rlimit, IPFS_FD_MAX is larger than the hard limit",
78 )
98 - break
79 }
80
101 - if userLimit == 0 && newLimit < minFds {
102 - err = fmt.Errorf(
103 - "failed to raise ulimit to minimum %d: set to %d",
104 - minFds,
105 - newLimit,
106 - )
107 - break
81 + if err = setLimit(maxFds, hard); err != nil {
82 + return false, 0, fmt.Errorf("error setting ulimit wihout hard limit: %s", err)
83 }
109 - default:
110 - err = fmt.Errorf("error setting: ulimit: %s", err)
84 }
85
113 - return newLimit > 0, newLimit, err
86 + return true, maxFds, nil
87 }