2026-09-13 01:57:46 +02:00
2026-09-02 20:06:04 +02:00
2026-09-13 01:57:46 +02:00
2026-09-13 01:57:46 +02:00
2026-09-13 01:57:46 +02:00
2026-09-13 01:57:46 +02:00
2026-09-13 01:57:46 +02:00
2026-09-02 16:14:24 +00:00
2026-09-13 01:57:46 +02:00

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
  • web/ – Statistik-Webseite

Rolling Updates (Generation-Mechanismus)

Zentrale Tabelle (eine Zeile, id = 1):

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:

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
S
Description
das komplette serverjonas search
Readme MIT
538 KiB
Languages
Python 98.1%
Shell 1.3%
PLpgSQL 0.6%