Zum Hauptinhalt springen

Tab-Sperrmodell

Otto serialisiert die Befehlsausführung pro Tab-Sitzung und erlaubt parallele Ausführung über verschiedene Tab-Sitzungen hinweg. Dieses Modell gibt jedem Tab eine FIFO-Ausführungswarteschlange und vermeidet unnötige Blockierung zwischen unabhängigen Seiten.

Kerngarantien

  • Gleiche-Tab-Befehle werden in FIFO-Reihenfolge ausgeführt (geschlüsselt nach targetNodeId:tabSessionId).
  • Cross-Tab-Befehle werden parallel ausgeführt.
  • Jeder angenommene Befehl erzeugt ein deterministisches Terminalergebnis (result oder error).

Sperrlebenszyklus

Sperrschlüssel sind targetNodeId:tabSessionId. Nur ein Controller kann zu einer Zeit eine Sperre für einen bestimmten Schlüssel halten. Leasing-Ablauf gibt Sperren automatisch frei; Sperrereignisse enthalten Leasing-Metadaten (lockOwnerControllerId, lockLeaseMs, lockExpiresAt) für Beobachtbarkeit.

Warte-Strategien

StrategieVerhalten
fail_fast (Standard)Gibt sofort tab_busy zurück, wenn die Sperre gehalten wird
wait_with_timeoutStellt den Befehl in die Warteschlange; führt aus, wenn die Sperre freigegeben wird oder gibt nach Timeout queue_wait_timed_out zurück

Setzen Sie die Strategie in der Befehlshülle:

{
"payload": {
"targetNodeId": "node_local_1",
"tabSessionId": "ts_abc",
"action": "command.run",
"waitPolicy": "wait_with_timeout",
"timeoutMs": 30000
}
}

Warteschlangenlimits

LimitBeschreibung
OTTO_TAB_QUEUE_LIMITMaximal wartende Befehle pro Tab-Sitzung
OTTO_CONTROLLER_QUEUE_LIMITMaximal wartende Befehle pro Controller-Sitzung

Das Überschreiten任何一个 Limits gibt tab_queue_limit_exceeded zurück.

Konflikt- und Timeout-Codes

CodeUrsacheLösung
tab_busySperre gehalten, fail_fast-StrategieMit begrenztem Backoff erneut versuchen oder zu wait_with_timeout wechseln
tab_lockedSperre von konkurrierendem Controller gehaltenNach Ablauf des Leasings erneut versuchen
queue_wait_timed_outSperre nicht vor timeoutMs freigegebenTimeout erhöhen oder parallele Befehlsanzahl reduzieren
command_timed_outBefehlsausführung hat Zeitebudget überschrittentimeoutMs erhöhen oder Operationsbereich eingrenzen
tab_queue_limit_exceededPro-Tab-Warteschlange vollParallele Befehle auf dieser Tab-Sitzung reduzieren
lock_conflictKonfliktereignissignalBeobachten und zurückweichen; wird als event-Frame neben dem Fehler ausgesendet

Nächste Schritte

  • Tab-Verwaltung — verwalteter Tab-Sitzungslebenszyklus und eigentumsbereichsbezogene Bereinigung.
  • Protokollreferenz — Befehlshüllenfelder einschließlich waitPolicy und timeoutMs.
  • Fehlercodes — vollständiger Fehlerkatalog mit Wiederholbarkeit.