Skip to content

Commit 28dfd35

Browse files
committed
Bound Tari resources and stagger periodic service restarts
1 parent 6264324 commit 28dfd35

6 files changed

Lines changed: 41 additions & 4 deletions

File tree

‎deployment/common.bash‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,11 +299,17 @@ After=network.target
299299
[Service]
300300
ExecStart=$exec_start
301301
Restart=always
302+
RestartSec=10s
303+
RuntimeMaxSec=6h
304+
RuntimeRandomizedExtraSec=30min
305+
TimeoutStopSec=60s
306+
OOMPolicy=kill
302307
User=$TARI_USER
303308
Environment=HOME=$TARI_HOME
304309
Nice=10
305-
CPUQuota=400%
310+
CPUQuota=200%
306311
MemoryHigh=$TARI_MEMORY_HIGH
312+
MemoryMax=${TARI_MEMORY_MAX:-14G}
307313
MemorySwapMax=$TARI_MEMORY_SWAP_MAX
308314
309315
[Install]

‎deployment/deploy.bash‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,13 @@ Unattended-Upgrade::Package-Blacklist {
116116
EOF
117117
}
118118

119-
TARI_MEMORY_HIGH="${TARI_MEMORY_HIGH:-10G}"
119+
TARI_MEMORY_HIGH="${TARI_MEMORY_HIGH:-12G}"
120+
TARI_MEMORY_MAX="${TARI_MEMORY_MAX:-14G}"
120121
TARI_MEMORY_SWAP_MAX="${TARI_MEMORY_SWAP_MAX:-768M}"
121122
TARI_MM_MEMORY_HIGH="${TARI_MM_MEMORY_HIGH:-1200M}"
122123
TARI_MM_MEMORY_SWAP_MAX="${TARI_MM_MEMORY_SWAP_MAX:-384M}"
123124
validate_systemd_memory_limit "$TARI_MEMORY_HIGH" TARI_MEMORY_HIGH
125+
validate_systemd_memory_limit "$TARI_MEMORY_MAX" TARI_MEMORY_MAX
124126
validate_systemd_memory_limit "$TARI_MEMORY_SWAP_MAX" TARI_MEMORY_SWAP_MAX
125127
validate_systemd_memory_limit "$TARI_MM_MEMORY_HIGH" TARI_MM_MEMORY_HIGH
126128
validate_systemd_memory_limit "$TARI_MM_MEMORY_SWAP_MAX" TARI_MM_MEMORY_SWAP_MAX

‎deployment/leaf.bash‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,12 +401,14 @@ configure_pool_firewall() {
401401
ufw reload
402402
}
403403

404-
TARI_MEMORY_HIGH="${TARI_MEMORY_HIGH:-$(default_tari_memory_high)}"
404+
TARI_MEMORY_HIGH="${TARI_MEMORY_HIGH:-12G}"
405+
TARI_MEMORY_MAX="${TARI_MEMORY_MAX:-14G}"
405406
TARI_MEMORY_SWAP_MAX="${TARI_MEMORY_SWAP_MAX:-768M}"
406407
TARI_MM_MEMORY_HIGH="${TARI_MM_MEMORY_HIGH:-1200M}"
407408
TARI_MM_MEMORY_SWAP_MAX="${TARI_MM_MEMORY_SWAP_MAX:-384M}"
408409

409410
validate_systemd_memory_limit "$TARI_MEMORY_HIGH" TARI_MEMORY_HIGH
411+
validate_systemd_memory_limit "$TARI_MEMORY_MAX" TARI_MEMORY_MAX
410412
validate_systemd_memory_limit "$TARI_MEMORY_SWAP_MAX" TARI_MEMORY_SWAP_MAX
411413
validate_systemd_memory_limit "$TARI_MM_MEMORY_HIGH" TARI_MM_MEMORY_HIGH
412414
validate_systemd_memory_limit "$TARI_MM_MEMORY_SWAP_MAX" TARI_MM_MEMORY_SWAP_MAX

‎deployment/patch-tari-config.sh‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ lines = Path(src).read_text().splitlines(keepends=True)
180180
181181
section_re = re.compile(r"^\s*\[([A-Za-z0-9_.-]+)\]\s*(?:#.*)?$")
182182
sections = {m.group(1): i for i, line in enumerate(lines) if (m := section_re.match(line))}
183-
required = {"base_node", "base_node.storage", "base_node.p2p", "base_node.p2p.transport", "wallet", "merge_mining_proxy"}
183+
required = {"base_node", "base_node.lmdb", "base_node.storage", "base_node.p2p", "base_node.p2p.transport", "wallet", "merge_mining_proxy"}
184184
missing = sorted(required - set(sections))
185185
if missing:
186186
raise SystemExit(f"missing required section(s): {', '.join(missing)}")
@@ -258,6 +258,7 @@ set_value("base_node", "use_libtor", "false")
258258
set_value("base_node.storage", "pruning_horizon", pruning_horizon)
259259
set_value("base_node.storage", "pruning_interval", pruning_interval)
260260
261+
set_value("base_node.lmdb", "no_read_ahead", "true")
261262
set_value("base_node.p2p", "public_addresses", f'["/ip4/{external_ip}/tcp/18189",]')
262263
set_value("base_node.p2p.transport", "type", '"tcp"')
263264
set_value("base_node.p2p.transport", "tcp.listener_address", '"/ip4/0.0.0.0/tcp/18189"')

‎tests/deploy/common.js‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"use strict";
22
const assert = require("node:assert/strict");
33
const fs = require("node:fs");
4+
const os = require("node:os");
45
const path = require("node:path");
56
const { spawnSync } = require("node:child_process");
67
const test = require("node:test");
@@ -9,6 +10,28 @@ const DEPLOYMENT_DIR = path.join(__dirname, "..", "..", "deployment");
910
const COMMON_PATH = path.join(DEPLOYMENT_DIR, "common.bash");
1011
const ENTRYPOINTS = ["deploy.bash", "leaf.bash"];
1112

13+
test("Tari config patch disables read-ahead and remains idempotent", () => {
14+
const shim = fs.readFileSync(path.join(__dirname, "common", "container_shim.sh"), "utf8");
15+
const fixture = shim.match(/const configToml = String.raw`([\s\S]*?)`;/)[1];
16+
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "tari-config-test-"));
17+
try {
18+
const config = path.join(dir, "config.toml");
19+
fs.writeFileSync(config, fixture);
20+
const args = [path.join(DEPLOYMENT_DIR, "patch-tari-config.sh"), config,
21+
"--external-ip", "127.0.0.1", "--no-backup"];
22+
const first = runBash(args);
23+
assert.equal(first.status, 0, first.stderr);
24+
const contents = fs.readFileSync(config, "utf8");
25+
assert.match(contents, /\[base_node\.lmdb\]\s+no_read_ahead = true/);
26+
assert.match(contents, /pruning_horizon = 10000/);
27+
const second = runBash(args);
28+
assert.equal(second.status, 0, second.stderr);
29+
assert.equal(fs.readFileSync(config, "utf8"), contents);
30+
} finally {
31+
fs.rmSync(dir, { recursive: true, force: true });
32+
}
33+
});
34+
1235
function runBash(args, options = {}) {
1336
return spawnSync("bash", args, {
1437
cwd: path.join(__dirname, "..", ".."),

‎tests/deploy/common/container_shim.sh‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ grpc_server_allow_methods = [
120120
]
121121
use_libtor = true
122122
123+
[base_node.lmdb]
124+
no_read_ahead = false
125+
123126
[base_node.storage]
124127
pruning_horizon = 0
125128
pruning_interval = 0

0 commit comments

Comments
 (0)