CodamAIDocs
Themafertig

Der Lebenslauf eines Mandanten

Zwei getrennte Zustände: die geschäftliche Stellung (PENDING bis CLOSED) und der technische Rollout (NOT_PROVISIONED bis PROVISIONED). Wann ein Mandant bedient wird.

Ausprägungen
PENDINGACTIVESUSPENDEDCLOSEDNOT_PROVISIONEDIN_PROGRESSPROVISIONEDFAILEDGültigkeitsfenster

Worum es geht

Ein Mandant hat in CIAS zwei Zustände, die unabhängig voneinander sind:

  • Die Stellung (status) sagt, wie der Kunde geschäftlich dasteht: noch nicht in Betrieb, aktiv, gesperrt, beendet. Sie ändern Menschen, meist ein Plattform-Administrator.
  • Der Rollout (provisioningState) sagt, wie weit die technische Einrichtung gekommen ist, vor allem die Datenbank des Mandanten. Ihn ändert das System.

Beide sind getrennt, weil sie verschiedene Fragen beantworten. Ein Mandant kann fertig eingerichtet und gesperrt sein, etwa bei einer offenen Rechnung. Wären beide Zustände ein einziger, sähe „gesperrt“ genauso aus wie „halb eingerichtet“.

Die Stellung

stateDiagram-v2
    direction LR
    [*] --> PENDING: angelegt
    PENDING --> ACTIVE: aktivieren (nur wenn PROVISIONED)
    PENDING --> SUSPENDED: sperren
    ACTIVE --> SUSPENDED: sperren
    SUSPENDED --> ACTIVE: entsperren (wenn PROVISIONED)
    SUSPENDED --> PENDING: entsperren (Rollout nicht fertig)
    PENDING --> CLOSED: schließen
    ACTIVE --> CLOSED: schließen
    SUSPENDED --> CLOSED: schließen
    CLOSED --> [*]
StellungBedeutungBedient
PENDINGangelegt, noch nicht in Betrieb. Die Einrichtung läuft noch oder ist gescheitertnein
ACTIVEin Betriebja, innerhalb des Gültigkeitsfensters
SUSPENDEDvorübergehend gesperrt. Die Daten bleiben, der Mandant kann ohne neue Einrichtung entsperrt werden. Nur Entsperren hebt die Sperre auf, Aktivieren nichtnein
CLOSEDbeendet, endgültig. Der Datensatz bleibt, damit das Audit weiß, wem die alten Einträge gehörennein

Nach PENDING führt nur ein Weg zurück: Wer einen Mandanten entsperrt, dessen Einrichtung noch nicht fertig ist, bekommt ihn als PENDING zurück. Sobald die Einrichtung gelingt, wird er ACTIVE.

Der Rollout

stateDiagram-v2
    direction LR
    [*] --> NOT_PROVISIONED: angelegt
    NOT_PROVISIONED --> IN_PROGRESS: Einrichtung beginnt
    IN_PROGRESS --> PROVISIONED: Datenbank bereit
    IN_PROGRESS --> FAILED: Einrichtung gescheitert
    IN_PROGRESS --> FAILED: keine Rückmeldung nach 30 min
    FAILED --> IN_PROGRESS: erneut versuchen
RolloutBedeutung
NOT_PROVISIONEDnoch nichts eingerichtet. Kommt nur in dem Moment vor, in dem der Datensatz entsteht
IN_PROGRESSdie Einrichtung läuft. CIAS merkt sich, wann sie begonnen hat
PROVISIONEDDatenbank und Schema sind da. Erst jetzt darf der Mandant ACTIVE werden
FAILEDdie Einrichtung ist gescheitert oder hat sich nicht zurückgemeldet. Der Mandant wird nicht bedient, der Fehler bleibt sichtbar, ein neuer Versuch ist möglich

FAILED ist kein Endzustand. Genau dafür wird es gespeichert: Ein gescheiterter Rollout soll erkennbar und reparierbar sein, statt dass ein Mandant verschwindet oder halb fertig als „angelegt“ gilt. Wie der neue Versuch geht, steht unter Einen Mandanten anlegen und bereitstellen.

Wie beide zusammenspielen

Ein Mandant vom Anlegen bis zum Betrieb
  1. 1
    Admin→CIAS
    legt den Mandanten nordbau an
  2. 2
    CIAS
    speichert ihn als PENDING / IN_PROGRESS mit Startzeit
  3. 3
    CIAS→Database
    lässt die Datenbank einrichten
  4. 4
    CIAS
    Einrichtung gelungen → PROVISIONED, dann sofort ACTIVE
    Ergebnis: Der Mandant wird bedient. Events Created und Activated

Ein erfolgreich angelegter Mandant ist also sofort aktiv. PENDING sieht man nur, solange die Einrichtung läuft oder wenn sie gescheitert ist.

Aber: Die Einrichtung macht nur einen Mandanten in PENDING aktiv. Die Einrichtung dauert eine Weile, und in dieser Zeit kann ein Administrator den Mandanten sperren oder schließen. Diese Entscheidung eines Menschen gilt:

Die Einrichtung gelingt, und die Stellung hat sich inzwischen geändert

Wann: Niemand hat eingegriffen, der Normalfall

  1. 1
    CIAS
    Rollout → PROVISIONED, Stellung → ACTIVE

Ergebnis: Der Mandant wird bedient. Events Created und Activated

Wann: Der Mandant wurde während der Einrichtung oder nach einem Fehlschlag gesperrt, danach lief ein Neuversuch

  1. 1
    CIAS
    Rollout → PROVISIONED, Stellung bleibt SUSPENDED

Ergebnis: Der Mandant wird nicht bedient. Nur das Event Created, kein Activated. Er wird erst bedient, wenn ihn jemand entsperrt

Wann: Der Mandant wurde während der Einrichtung geschlossen

  1. 1
    CIAS
    Rollout → PROVISIONED, Stellung bleibt CLOSED

Ergebnis: Die Datenbank ist da, der Mandant bleibt beendet. Einen Neuversuch für einen geschlossenen Mandanten lehnt CIAS ab

Alle Kombinationen, die vorkommen:

StellungRolloutWas das heißt
PENDINGIN_PROGRESSEinrichtung läuft gerade
PENDINGFAILEDEinrichtung gescheitert, wartet auf einen neuen Versuch
ACTIVEPROVISIONEDnormaler Betrieb
SUSPENDEDPROVISIONEDgesperrt, Datenbank vorhanden, jederzeit entsperrbar
SUSPENDEDFAILED oder IN_PROGRESSgesperrt, bevor die Einrichtung fertig war
CLOSEDbeliebigbeendet

Wird der Mandant bedient?

Die Antwort, die das Mandanten-Tor bei jeder Anfrage bekommt, rechnet CIAS aus Stellung und Gültigkeitsfenster aus:

Wird der Mandant heute bedient?
StellungGültig abGültig bisAntwort
ACTIVEleer oder heute oder früherleer oder heute oder späterja
ACTIVEnach heute–nein, der Vertrag hat noch nicht begonnen
ACTIVE–vor heutenein, der Vertrag ist abgelaufen
PENDING, SUSPENDED oder CLOSED––nein

Beide Grenzen des Gültigkeitsfensters sind Tage und zählen mit: Ein Mandant mit „gültig bis 31.12.“ wird am 31.12. noch bedient und am 1.1. nicht mehr. „Heute“ ist das Datum des Servers, auf dem CIAS läuft. Wie man das Fenster setzt, steht unter Mandanten sperren, schließen, Gültigkeit.

Der Rollout steht nicht in der Tabelle, weil er schon in der Stellung steckt: Ohne PROVISIONED kann ein Mandant nie ACTIVE werden.

Fallen

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-tenancy – Tenant (create, markProvisioningStarted, markProvisioned, markProvisioningFailed, markProvisioningAbandoned, completeRollout, activate, suspend, resume, close, isServedOn), TenantStatus, ProvisioningState
  • CIAS/cias-tenancy – TenantService (createTenant, retryProvisioning, rollOut), TenantEvent
  • CIAS/cias-tenancy – V1__cias_tenant.sql, V2__provisioning_started_at.sql
  • CIAS/cias-tenancy/docs/adr – ADR-016 (Abschnitte 3, 3a und 5), ADR-020
Suchen