Files
search/README.md
T
2026-09-13 01:57:46 +02:00

50 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# search
das komplette serverjonas search
- `crawler.py` – PostgreSQL-Crawler, baut den Suchindex auf
- `launcher.py` – startet/überwacht den Crawler und rollt Updates aus (siehe unten)
- `search/` – Suchmaschine darüber (CLI + HTTP-API), siehe [search/README.md](search/README.md)
- `web/` – Statistik-Webseite
## Rolling Updates (Generation-Mechanismus)
Zentrale Tabelle (eine Zeile, `id = 1`):
```sql
CREATE TABLE IF NOT EXISTS deployment_state (
id INTEGER PRIMARY KEY,
generation BIGINT NOT NULL,
required_version INTEGER NOT NULL
);
```
**Ablauf:**
1. Einmalig initialisieren: `python3 crawler.py --init-deployment`
2. Launcher starten: `python3 launcher.py` (startet + überwacht den Crawler)
3. Neue Version verteilen:
- Neue `crawler.py` mit erhöhter `JONASSEARCH_CRAWLER_VERSION` bereitstellen
(Update-Quelle im `.env` setzen oder Datei nach `releases/<VERSION>/crawler.py` legen)
- `python3 launcher.py --check-update`
→ neue Version wird gestaget → geprüft (`--self-update`) → aktiviert
→ **erst dann** wird die Generation in PostgreSQL erhöht (`--update-deployment`)
4. Alle laufenden alten Crawler merken das beim nächsten sicheren Punkt
(vor jedem relevanten Commit bzw. spätestens nach
`JONASSEARCH_UPDATE_CHECK_SECONDS` im Hintergrund-Check),
rollen ihre offene Transaktion sauber zurück und beenden sich mit
**Exit-Code 42** – nie mitten in einer Transaktion, kein hartes Killen.
5. Der jeweilige Launcher erkennt 42 und startet die bereits bereitgestellte
neue Version, die die neue Generation beim Start liest.
Exit-Codes des Crawlers: `0` = normal beendet, `1` = Fehler/Crash,
`42` = ausschließlich „Update erforderlich".
Nützliche Befehle:
```bash
python3 crawler.py --version # installierte Version
python3 launcher.py --status # Generation + Versionen anzeigen
python3 crawler.py --self-update 2 # gestagte Release prüfen (ohne zu aktivieren)
python3 crawler.py --update-deployment 2 # Generation+1 und required_version=2 setzen
```