P1-P3 admin cleanup: rank guard, SSRF guard, count caching, dead code removal, pagination rewrite
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
Gitea Actions Runner Test / test-job (push) Canceled after 0s
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
Gitea Actions Runner Test / test-job (push) Canceled after 0s
- P1: new src/lib/admin/rank-guard.ts with tryGuardRank/guardRank + RankGuardTarget/Result; extracted from users.ts; applied to admin-bans (create/lift + rank redirect) and admin-badges (caps + rank guard + error surfacing); import-url-safety.ts SSRF guard wired into clone save+icon fetch; logAudit await in help-tickets; antiddos mutations SETTINGS_EDIT; markAllAlertsRead NOTIFICATIONS_EDIT; rankError/saveError in all 25 message files; tests rew/new for bans/badges/rank-guard/import-url-safety - P2: ticket-inbox merged pagination reworked to single UNION ALL SQL with LIMIT/OFFSET (avoids O(offset) materialization); getCachedAdminCount with cacheFiltered option applied to devops/errors/photos/items/guilds/help-tickets/moderation pages; admin-theme catches→?error=1+banner+25 locales; logger in silent catches (rare-values/writeable-boxes); catalog-items-loader CAST→plain equality; count caching helper extended with opt-in cacheFiltered - P3: removed dead modules is-staff/notice/recent-furni-resync/log-filters plus load-user-sanctions/user-sanction-timeline; removed orphaned CATALOG_PAGE_COLUMNS re-export; removed getFurniIconUrl from studio-furni-icons Build: lint 0, typecheck 0, 3480 tests pass, i18n:check exit 0, colors exit 0. Circular chunk warning (9452/10535/66463) is webpack code-splitting artifact; build succeeds.
This commit is contained in:
1 parent
57529fd1ea
commit
7b249a7222
71 files changed
+1031
-1078
No files matched your search
@@ -26,9 +26,21 @@
|
||||
# systemd (cgroup MemoryMax)
|
||||
# Meet RSS over de héle procesboom. Dit is de echte garantie en wordt
|
||||
# overal gebruikt waar systemd beschikbaar is (de host waar deze
|
||||
# CMS draait). De RSS-plafonds in package.json zijn hierop gekozen:
|
||||
# `next build` piekte op 6,5GB, dus 10GB laat ruimte over terwijl er
|
||||
# 6GB basislast naast blijft passen binnen de 23,5GB van deze machine.
|
||||
# CMS draait). De plafonds in package.json zijn hierop gekozen:
|
||||
# `next build` piekt op ~9,7GB in `memory.current` (inclusief de
|
||||
# page cache die de build zelf opbouwt), dus 10GB laat net genoeg ruimte
|
||||
# over terwijl er ~6-9GB basislast naast blijft passen op deze machine.
|
||||
#
|
||||
# Twee extra vangnetten, omdat de basislast inmiddels groter kan zijn
|
||||
# (Docker, de emulator en de agent tikken samen ~9GB aan) en een vaste cap
|
||||
# die hoger is dan het vrije geheugen de host alsnog kan laten OOM-killen:
|
||||
# - MemoryHigh (95% van de cap) dwingt de kernel eerder te reclaimen en
|
||||
# te throttlen, zodat een allocatiestorm de harde grens niet voorbij
|
||||
# schiet voordat de cgroup-OOM-killer reageert;
|
||||
# - het plafond wordt teruggeschroefd tot `MemAvailable - reserve`, met
|
||||
# `CMS_MEMORY_CAP_RESERVE` (standaard 4g) als marge voor de rest van
|
||||
# de machine. Is er minder dan 1GB over, dan weigert het script.
|
||||
# MemorySwapMax=0 staat expliciet aan: deze host heeft geen swap.
|
||||
#
|
||||
# ulimit -v (per proces, virtuele adresruimte)
|
||||
# Alleen als expliciet gevraagd. Meet virtuele adresruimte, NIET RSS, en
|
||||
@@ -58,6 +70,7 @@
|
||||
# Gebruik: bash scripts/with-memory-cap.sh 10g <command...>
|
||||
# Backend kiezen: CMS_MEMORY_CAP_BACKEND=systemd|ulimit|none|auto
|
||||
# ulimit-waarde kiezen: CMS_MEMORY_CAP_VIRTUAL=40g
|
||||
# Marge bovenop de basislast: CMS_MEMORY_CAP_RESERVE=4g
|
||||
set -Eeuo pipefail
|
||||
|
||||
usage() {
|
||||
@@ -122,9 +135,46 @@ probe_systemd() {
|
||||
return 1
|
||||
}
|
||||
|
||||
# Beschikbaar geheugen in bytes: wat het systeem kan toewijzen zonder te
|
||||
# swappen. Dit is inclusief opvraagbare page cache, dus de juiste maat om te
|
||||
# bepalen hoeveel een nieuwe cgroup nog mag gebruiken zonder de host in de
|
||||
# globale OOM-killer te duwen.
|
||||
mem_available_bytes() {
|
||||
local kb
|
||||
kb="$(grep -m1 '^MemAvailable:' /proc/meminfo 2>/dev/null | tr -dc '0-9')"
|
||||
[ -n "$kb" ] || kb=0
|
||||
echo $((kb * 1024))
|
||||
}
|
||||
|
||||
run_systemd() {
|
||||
echo "[mem-cap] systemd cgroup MemoryMax=$((bytes / 1024 / 1024 / 1024))GB: $*" >&2
|
||||
exec "${systemd_cmd[@]}" -p "MemoryMax=$bytes" "$@"
|
||||
local effective="$bytes"
|
||||
# Houd marge voor de al draaiende basislast (MariaDB, Docker, de live
|
||||
# release, de agent) plus kernel/page cache. Zonder die marge kan een cap
|
||||
# die hoger is dan het werkelijk beschikbare geheugen alsnog de host laten
|
||||
# OOM-killen voordat de cgroup-grens grijpt.
|
||||
local reserve
|
||||
reserve="$(to_bytes "${CMS_MEMORY_CAP_RESERVE:-4g}")" || exit 64
|
||||
local available
|
||||
available="$(mem_available_bytes)"
|
||||
if [ "$available" -gt 0 ]; then
|
||||
local headroom=$((available > reserve ? available - reserve : 0))
|
||||
if [ "$headroom" -lt "$effective" ]; then
|
||||
echo "[mem-cap] plafond verlaagd naar $((headroom / 1024 / 1024))MB: MemAvailable=$((available / 1024 / 1024))MB reserve=$((reserve / 1024 / 1024))MB" >&2
|
||||
effective="$headroom"
|
||||
fi
|
||||
fi
|
||||
if [ "$effective" -lt $((1024 * 1024 * 1024)) ]; then
|
||||
echo "[mem-cap] te weinig vrij geheugen (MemAvailable=$((available / 1024 / 1024))MB) om begrensd te starten; weiger." >&2
|
||||
echo "[mem-cap] maak geheugen vrij of verhoog CMS_MEMORY_CAP_RESERVE bewust niet." >&2
|
||||
return 1
|
||||
fi
|
||||
# MemoryHigh laat de kernel proactief reclaimen en throttlen vóór de harde
|
||||
# MemoryMax, zodat een snelle allocatiestorm niet voorbij de grens schiet en
|
||||
# de (globale) OOM-killer de hele machine meeneemt. MemorySwapMax=0 is
|
||||
# expliciet: deze host heeft geen swap.
|
||||
local high=$((effective * 95 / 100))
|
||||
echo "[mem-cap] systemd cgroup MemoryHigh=$((high / 1024 / 1024))MB MemoryMax=$((effective / 1024 / 1024))MB MemorySwapMax=0: $*" >&2
|
||||
exec "${systemd_cmd[@]}" -p "MemoryHigh=$high" -p "MemoryMax=$effective" -p "MemorySwapMax=0" "$@"
|
||||
}
|
||||
|
||||
run_ulimit() {
|
||||
|
||||
Reference in new issue
Block a user