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
}