Skip to content

Commit

Permalink
setrlimit nofiles config
Browse files Browse the repository at this point in the history
  • Loading branch information
hoytech committed Feb 2, 2023
1 parent baba729 commit 271b172
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 4 deletions.
4 changes: 4 additions & 0 deletions golpe.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,10 @@ config:
desc: "Port to open for the nostr websocket protocol"
default: 7777
noReload: true
- name: relay__nofiles
desc: "Set OS-limit on maximum number of open files/sockets (if 0, don't attempt to set)"
default: 1000000
noReload: true

- name: relay__info__name
desc: "NIP-11: Name of this server. Short/descriptive (< 30 characters)"
Expand Down
25 changes: 24 additions & 1 deletion src/onAppStartup.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
#include <sys/time.h>
#include <sys/resource.h>
#include <string.h>
#include <errno.h>

#include "golpe.h"

const size_t CURR_DB_VERSION = 1;

void onAppStartup(lmdb::txn &txn, const std::string &cmd) {
static void dbCheck(lmdb::txn &txn, const std::string &cmd) {
auto dbTooOld = [&](uint64_t ver) {
LE << "Database version too old: " << ver << ". Expected version " << CURR_DB_VERSION;
LE << "You should 'strfry export' your events, delete (or move) the DB files, and 'strfry import' them";
Expand Down Expand Up @@ -47,3 +52,21 @@ void onAppStartup(lmdb::txn &txn, const std::string &cmd) {
dbTooNew(s->dbVersion());
}
}

static void setRLimits() {
if (!cfg().relay__nofiles) return;
struct rlimit curr;

if (getrlimit(RLIMIT_NOFILE, &curr)) throw herr("couldn't call getrlimit: ", strerror(errno));

if (cfg().relay__nofiles > curr.rlim_max) throw herr("Unable to set NOFILES limit to ", cfg().relay__nofiles, ", exceeds max of ", curr.rlim_max);

curr.rlim_cur = cfg().relay__nofiles;

if (setrlimit(RLIMIT_NOFILE, &curr)) throw herr("Failed setting NOFILES limit to ", cfg().relay__nofiles, ": ", strerror(errno));
}

void onAppStartup(lmdb::txn &txn, const std::string &cmd) {
dbCheck(txn, cmd);
setRLimits();
}
17 changes: 14 additions & 3 deletions strfry.conf
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,27 @@
## Default strfry config
##

# Directory that contains strfry database (restart required)
# Directory that contains the strfry LMDB database (restart required)
db = "./strfry-db/"

dbParams {
# Maximum number of threads/processes that can simultaneously have LMDB transactions open (restart required)
maxreaders = 256

# Size of mmap() to use when loading LMDB (does *not* correspond to disk-space used, default is 10TB) (restart required)
mapsize = 10995116277760
}

relay {
# Interface to listen on. Use 0.0.0.0 to listen on all interfaces (restart required)
bind = "127.0.0.1"

# Port to open for the nostr websocket protocol (restart required)
port = 7777

# Set OS-limit on maximum number of open files/sockets (if 0, don't attempt to set) (restart required)
nofiles = 1000000

info {
# NIP-11: Name of this server. Short/descriptive (< 30 characters)
name = "strfry default"
Expand Down Expand Up @@ -42,10 +53,10 @@ relay {
maxFilterLimit = 500

compression {
# Use permessage-deflate compression if supported by client. Reduces bandwidth, but slight increase in CPU
# Use permessage-deflate compression if supported by client. Reduces bandwidth, but slight increase in CPU (restart required)
enabled = true

# Maintain a sliding window buffer for each connection. Improves compression, but uses more memory
# Maintain a sliding window buffer for each connection. Improves compression, but uses more memory (restart required)
slidingWindow = true
}

Expand Down

0 comments on commit 271b172

Please sign in to comment.