add launcher
This commit is contained in:
@@ -3,5 +3,48 @@
|
||||
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
|
||||
- `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
|
||||
```
|
||||
Reference in New Issue
Block a user