From 1cd6401adbb643d27aa03fe2f31afd04c11b9d2c Mon Sep 17 00:00:00 2001 From: oskar Date: Tue, 4 Aug 2026 14:49:22 +0200 Subject: [PATCH] =?UTF-8?q?mitigation(solaria):=20M1=20=E2=80=94=20NODE=5F?= =?UTF-8?q?TYPE=3Dlte=5Fnode=20wy=C5=82=C4=85cza=20prune=20node-agenta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mitygacja tymczasowa z incydentu 2026-07-30-ollama-solaria-vanish (§7, M1), na czas backfillu embed (faza mailowa KB). Na SOLARII node-agent robił niefiltrowany `docker container prune` co cykl (60 s), kasując również kontenery z `restart: unless-stopped` zatrzymane świadomie przez operatora. Zweryfikowane w kodzie (services/node-agent/src/node_agent.py, linie zgodne z incydentem): `self.node_type` jest czytane wyłącznie w run_safe_cleanup() (648, 654) i w dwóch liniach logu (250, 1103). `lte_node` daje wczesny return w run_safe_cleanup — monitoring, eventy, dispatch akcji bez zmian. _cleanup_control_plane_fs jest bramkowane node_name == VPS, nie node_type. stability-agent nie prune'uje — node-agent był jedynym źródłem. Ścieżka deployu zweryfikowana: deploy-service.sh:100 składa ${HOST_DIR}/runtime/${SERVICE}/docker-compose.override.yml, a HOST_DIR to hosts/ w obu wywołaniach (deploy-node.sh:102 operatorskie, deploy-runner.sh:170 agentowe). Dowód, że plik nie jest martwy: działający kontener na SOLARII ma NODE_TYPE=ai_node, co występuje wyłącznie w tym pliku. `docker compose config` na złożeniu daje NODE_TYPE=lte_node, group_add 999+996 zachowane, projekt "node-agent" (bez zmiany nazwy projektu). Skutek uboczny: lte_node pomija CAŁY cleanup, więc dangling images i build cache też nie są sprzątane — pilnować miejsca na dysku SOLARII. Zdjąć po wdrożeniu R1 na nodzie → przywrócić NODE_TYPE=ai_node. Nie zdeployowane — deploy po stronie operatora. Co-Authored-By: Claude Opus 5 (1M context) --- docs/backlog.md | 20 +++++++++++++++++++ .../node-agent/docker-compose.override.yml | 15 +++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/docs/backlog.md b/docs/backlog.md index 9b4ee2a..0431cf1 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -4,6 +4,26 @@ Centralny tracker tech-długu i znanych usterek. Wpisy ze sesji — dodawaj z da --- +## M1 aktywna na SOLARII — cleanup node-agenta wyłączony do czasu R1 (2026-08-04) + +**Data**: 2026-08-04 +**Źródło**: `docs/incidents/2026-07-30-ollama-solaria-vanish.md` (§7, M1). +**Stan**: w `hosts/solaria/runtime/node-agent/docker-compose.override.yml` ustawiono +`NODE_TYPE=lte_node` (było `ai_node`) na czas backfillu embed (faza mailowa KB). +`lte_node` powoduje wczesny return w `run_safe_cleanup()`, więc na SOLARII nie działa +niefiltrowany `docker container prune` kasujący zatrzymane kontenery w ≤60 s — +łącznie z tymi, które mają `restart: unless-stopped` i zostały zatrzymane świadomie. +`self.node_type` jest czytane wyłącznie w `run_safe_cleanup()` i dwóch liniach logu, +więc monitoring, eventy i dispatch akcji działają bez zmian. +**Skutek uboczny**: `lte_node` pomija CAŁY cleanup — na czas mitygacji nie są sprzątane +dangling images ani build cache. Pilnować miejsca na dysku SOLARII. +**Nie zdeployowane** — zmiana jest tylko w repo (branch `task/m1-prune-mitigation`); +wchodzi przy najbliższym redeployu node-agenta na SOLARII. +**Zdjąć po**: wdrożeniu R1 (filtrowanie prune po restart policy / labelu compose) na tym +nodzie — wtedy przywrócić `NODE_TYPE=ai_node`. R1–R3 w toku po stronie subsystemu A. + +--- + ## deploy-runner: instalacja na węzłach + E2E redeployu (2026-08-03) **Data**: 2026-08-03 diff --git a/hosts/solaria/runtime/node-agent/docker-compose.override.yml b/hosts/solaria/runtime/node-agent/docker-compose.override.yml index 0d3de72..c603333 100644 --- a/hosts/solaria/runtime/node-agent/docker-compose.override.yml +++ b/hosts/solaria/runtime/node-agent/docker-compose.override.yml @@ -1,3 +1,16 @@ +# MITYGACJA TYMCZASOWA (M1) — założona 2026-08-04. +# NODE_TYPE=lte_node wyłącza run_safe_cleanup() (niefiltrowany +# `docker container prune`) na czas backfillu embed (faza mailowa KB). +# Incydent: docs/incidents/2026-07-30-ollama-solaria-vanish.md (§7, M1). +# Bez tego każdy zatrzymany kontener na SOLARII znika w ≤60 s — również taki +# z `restart: unless-stopped`, zatrzymany świadomie przez operatora. +# Warunek zdjęcia: R1 (filtrowanie prune po restart policy / labelu compose) +# wdrożony na tym nodzie — R1–R3 są w toku po stronie subsystemu A. +# Po zdjęciu przywrócić: NODE_TYPE=ai_node. +# Zakres wyłączenia: `lte_node` pomija CAŁY cleanup, więc na czas mitygacji +# nie są też sprzątane dangling images ani build cache — pilnować miejsca +# na dysku. Monitoring, eventy i dispatch akcji działają bez zmian +# (self.node_type jest czytane wyłącznie w run_safe_cleanup i dwóch liniach logu). services: node-agent: # Docker GID on SOLARIA is 996 (not the Debian default 999 the base compose @@ -10,7 +23,7 @@ services: - "996" # host docker gid, verified 2026-07-30 (getent group docker → 996) environment: - NODE_NAME=solaria - - NODE_TYPE=ai_node + - NODE_TYPE=lte_node # M1 (2026-08-04) — było: ai_node; przywrócić po R1 - VPS_EVENTS_HOST=100.95.58.48 - VPS_EVENTS_USER=oskar - VPS_EVENTS_PATH=/opt/homelab/events