CodamAIDocs
Themafertig

Speicher-Backends

Wo die Dateiinhalte liegen: lokales Dateisystem oder Volume, und Anwendungen ganz ohne Dateispeicher.

Ausprägungen
FILESYSTEM: lokales Dateisystem / VolumeNONE: kein DateispeicherStartprüfung des BasisverzeichnissesHealth-CheckBetrieb im Container

Worum es geht

Den Inhalt von Dateien legt CDMS nicht in der Datenbank ab, sondern in einem Dateispeicher. Welcher das ist, heißt Speicher-Backend. Du wählst es im Hub am System, Feld Speicher:

  • FILESYSTEM: Die Inhalte liegen in einem Verzeichnis des Servers, im Container auf einem eingebundenen Volume.
  • NONE: Die Anwendung hat keinen Dateispeicher.

Den Dateispeicher bringt ein eigener Baustein in die Anwendung: cdms-localfs-storage. Mit NONE fehlt dieser Baustein.

Die Varianten

Speicher des Systems

Wann: Die Anwendung hat Datei-Modelle.

  1. 1
    Build
    nimmt den Baustein cdms-localfs-storage in die Anwendung auf
  2. 2
    Build
    der Projektrahmen trägt codamai.cdms.persistence.file.basePath in die Konfiguration ein, Standard /files/
  3. 3
    CDMS
    prüft beim Start das Basisverzeichnis
  4. 4
    CDMS→File storage
    legt Inhalte unter <basePath>/…/<fileId> ab

Ergebnis: Siehe Ablage und Mandantentrennung im Speicher.

Wann: Die Anwendung braucht keine Dateien.

  1. 1
    Build
    kein Dateispeicher-Baustein, kein Basisverzeichnis
  2. 2
    CDMS
    eine Anfrage will einen Inhalt schreiben oder lesen
  3. 3
    CDMS→Client
    abgelehnt, file-storage-not-configured

Ergebnis: Datei-Modelle ergeben hier keinen Sinn. Für sie braucht das System einen Dateispeicher.

Siehe auch Der Projektrahmen (Scaffold).

Das Basisverzeichnis einstellen

application.yaml
Anfrage
codamai:
  cdms:
    persistence:
      file:
        basePath: ${CODAMAI_CDMS_PERSISTENCE_FILE_BASE_PATH:/files/}
Im Container
env:
  - name: CODAMAI_CDMS_PERSISTENCE_FILE_BASE_PATH
    value: /data/files/
volumeMounts:
  - name: cdms-files
    mountPath: /data/files

Die Betriebsart (SINGLE oder MULTI) stellst du für die ganze Installation ein. Sie gilt für Datenbank und Dateispeicher gleichermaßen und entscheidet, ob Mandanten eigene Verzeichnisse bekommen. Siehe SINGLE und MULTI über beide Module.

Die Prüfung beim Start

Start einer Anwendung mit FILESYSTEM
  1. CDMS
    Eingetragen
    Ist basePath gesetzt?
    ↳ nein Anwendung startet nicht
  2. CDMS
    Vorhanden
    Gibt es das Verzeichnis, und ist es ein Verzeichnis?
    ↳ nein Anwendung startet nicht, das Log nennt den Pfad
  3. CDMS
    Beschreibbar
    Darf die Anwendung dort schreiben?
    ↳ nein Anwendung startet nicht, das Log nennt den Pfad
  4. Speicher bereit

CDMS legt das Basisverzeichnis bewusst nicht selbst an. Wäre das Volume nicht eingebunden, würde die Anwendung sonst in das Dateisystem des Containers schreiben und beim nächsten Neustart alle Dateien verlieren, während die Datensätze in der Datenbank bleiben.

Im laufenden Betrieb

Ist der Actuator eingebunden, meldet der Health-Check einen Eintrag storageRoot: writable, solange das Basisverzeichnis beschreibbar ist, sonst DOWN mit dem Grund. So fällt ein verlorenes Volume auf, bevor Benutzer es merken.

Fallen

Wie es weitergeht

Quellen im Code und in der Wissensdatenbank
  • CDMS/cdms-localfs-storage – FileProperties, FileStorageStartupCheck, FileStorageRoot, FileStorageHealthIndicator, LocalFSFileController; docs/05-configuration.md; docs/adr/ADR-001, ADR-008, ADR-020
  • CDMS/cdms-system-layer – AbstractLayer.fileStorage (file-storage-not-configured)
  • CDMS/cdms-scaffold – CdmsScaffoldService (storage FILESYSTEM/NONE, basePath, CODAMAI_CDMS_PERSISTENCE_FILE_BASE_PATH)
  • CDMS/cdms-commons – FileStorageControllerInterface (Vertrag des Dateispeichers)
Suchen