Dokument-Cache¶
Alle Dateien angebundener Quellen, also Vorlagen, Anlagen und Niederschriften, praktisch nur PDFs, werden lokal zwischengespeichert. Vorschau und Download kommen dann von der Platte, unabhängig davon, ob das Ratsinformationssystem der Kommune gerade erreichbar ist. Der Proxy hält keine Worker mehr minutenlang fest: kurze Timeouts, lokale Datei zuerst.
Speicherlayout¶
Je Kommune ein Verzeichnis, benannt nach dem Slug der Kommune (stadt-musterstadt). Dadurch lässt sich pro Kommune ein eigener externer Speicher unter genau diesem Pfad einhängen, oder ein großer für alle.
Speicherbedarf planen¶
Der Bedarf hängt von den angebundenen Kommunen ab. Erfahrungswerte: Eine Großstadt mit langer OParl-Historie bringt 50 000 bis 100 000 Dateien mit durchschnittlich 0,2 bis 0,7 MB, also grob 10 bis 40 GB Bestand und wenige GB Zuwachs pro Jahr. Der Median liegt deutlich unter dem Durchschnitt, einzelne große Anlagen dominieren.
cache_files --stats zeigt Abdeckung, Belegung und freien Speicher der eigenen Installation. Ein Systemlaufwerk mit unter 100 GB reicht für mehrere Großstädte nicht sicher, dafür gibt es den Festplattenschutz und die Auslagerung auf externen Speicher.
Betrieb¶
| Variable | Standard | Bedeutung |
|---|---|---|
OPARL_FILES_ROOT | <MEDIA_ROOT>/oparl_files | Wurzelverzeichnis des Caches, im Container /app/files |
FILE_CACHE_MAX_MB | 80 | Größere Dateien werden nicht gecacht, aber weiter durchgereicht |
FILE_CACHE_MIN_FREE_GB | 15 | Unter dieser Grenze wird nichts mehr geschrieben (Schutz des Systemlaufwerks) |
FILE_PROXY_TIMEOUT_SECONDS | 15 | Lese-Timeout des Proxys für Live-Abrufe |
INSIGHT_SOURCE_BACKOFF_FAILURES | 3 | Ab so vielen Sync-Fehlversuchen in Folge pausieren Nachladen und Live-Abruf für die Quelle |
40 * * * * docker exec mandari python manage.py cache_files --limit 400 >> /var/log/mandari-file-cache.log 2>&1
- Der Cron lädt neueste Dokumente zuerst nach. Jeder Live-Abruf über die Vorschau legt die Datei ebenfalls ab (Write-Through).
- Der Betriebsmonitor hat den Check „Dokument-Cache“ mit denselben Werten wie
cache_files --stats. purge_deletedentfernt lokale Kopien getilgter Dateien.
Quellen-Schonung¶
Ratsinformationssysteme sperren IP-Adressen, die zu viele Verbindungen aufbauen. Sobald der Ingestor eine Quelle INSIGHT_SOURCE_BACKOFF_FAILURES-mal in Folge nicht erreicht hat, lassen cache_files und der Vorschau-Proxy diese Quelle in Ruhe. Der Proxy antwortet dann mit HTTP 503 und Retry-After. Der Ingestor selbst verdoppelt den Abstand zwischen den Versuchen (10, 20, 40 Minuten und so weiter, höchstens 6 Stunden). Ein erfolgreicher Sync setzt den Zähler zurück, danach läuft alles automatisch weiter. Der Betriebsmonitor zeigt die Schonung als Grund an der Quelle.
Externen Speicher je Kommune einhängen¶
Beispiel für ein per CIFS eingehängtes Netzlaufwerk:
apt install cifs-utils
mkdir -p /srv/mandari-files/stadt-musterstadt
cat > /root/.smb-musterstadt <<EOF
username=<benutzer>
password=<passwort>
EOF
chmod 600 /root/.smb-musterstadt
echo "//<speicher-host>/<freigabe> /srv/mandari-files/stadt-musterstadt cifs credentials=/root/.smb-musterstadt,uid=1000,gid=1000,iocharset=utf8,_netdev,nofail 0 0" >> /etc/fstab
mount -a
Der Container sieht /srv/mandari-files als /app/files, die Kommune landet automatisch im eingehängten Unterverzeichnis. Nach dem Einhängen einmal cache_files --body <slug> --limit 100000 für den Erstbestand ausführen. Das dauert je nach Umfang mehrere Stunden.