rp-dag
Scopo
Gestisce i trigger dei workflow e il log di esecuzione. Non esegue nulla.
Confine di responsabilità
Qui appartengono due cose e nient'altro:
- Trigger — "quando appare questo topic del bus, esegui quel workflow". Configurazione di sistema: decine di righe gestite da un operatore, mantenute per intero nella memoria del runtime invece di essere interrogate.
- Il log di esecuzione — un albero di ciò che ha fatto un'esecuzione. Il runtime lo scrive mentre lo script è in esecuzione: un nodo viene aperto prima dell'esecuzione del suo corpo e chiuso quando termina, così un'esecuzione in corso mostra il nodo su cui si trova.
Il catalogo dei workflow non è gestito qui. Ptah inserisce i descrittori della Solution attiva nell'ambiente di questo servizio (, WORKFLOWS,WORKFLOW_DIGESTS) e MODULE_PROXY li ripubblica per il runtime e l'interfaccia utente. I byte sorgente restano dietro Ptah-proxy.listAvailableWorkflows
Il log viene scritto dal runtime, non da questo servizio
Qui non viene scritta alcuna voce di log. Il runtime la formatta, la inserisce in Valkey sotto una chiave che compone autonomamente e in seguito trasferisce le chiavi — mai le voci. trasforma ogni chiave in una posizione dello store e indica allo storage di prelevare la voce; lo storage legge direttamente dalla cache, quindi una voce attraversa il trasporto una sola volta, come byte che nessuno ricodifica.commitLog
thread del workflow ─► coda ─► scrittore del log ─► valkey
│
└─ commitLog([keys]) ─► rp-dag ─► lo storage legge valkey
│
◄──── committed ─────────────────────┘
└─ elimina le chiavi sottoposte a commit
È questo che mantiene la registrazione fuori dal percorso critico del workflow: un nodo costa al runtime un'aggiunta alla coda e nient'altro. Significa anche che il log è intrinsecamente best effort — una voce può essere eliminata sotto pressione e un batch può essere sottoposto a commit due volte dopo un arresto anomalo. Le chiavi derivano dall'esecuzione e dalla sequenza del nodo, quindi il secondo commit è una riscrittura anziché un duplicato.
Le chiavi provengono dal runtime proprio per questo motivo: un numero assegnato da questo servizio costerebbe un round trip per nodo e non sarebbe riproducibile dopo un riavvio.
— l'esecuzionedag:log:<executionId>:exec— uno dei suoi nodi, con il numero completato con zeri fino a sei cifredag:log:<executionId>:n:<seq>
ricava la posizione dello store dalla chiave e rifiuta qualsiasi elemento al di fuori del prefisso commitLog, quindi una chiave costituisce l'intera autorità trasportata dalla chiamata.dag:log:
Il log è un albero
exec:<id> l'esecuzione
node:<id>:<seq> i suoi nodi, nell'ordine in cui sono stati aperti
Un nodo che ha delegato tramite contiene l'id dell'esecuzione figlia, e la figlia è un'esecuzione ordinaria con nodi propri. rt.sub segue quel collegamento in profondità e restituisce il risultato in forma piatta, con ogni riga contrassegnata dal proprio executionTree — così un client visualizza l'albero applicando un'indentazione e nient'altro. Non è necessario alcun indice del genitore: il collegamento è il nodo che lo ha creato.depth
Le sequenze sono completate con zeri nella chiave, perché il KV store restituisce un intervallo di prefisso in ordine lessicografico e tale ordine deve corrispondere all'ordine in cui sono stati eseguiti i nodi. Il runtime usa la stessa larghezza quando compone la chiave della cache; le due larghezze costituiscono un unico contratto.
La conservazione è un limite sul numero di esecuzioni ( per impostazione predefinita), applicato ogni cento aperture. Il log è diagnostico, non un archivio.5000
Le modifiche ai trigger raggiungono il runtime tramite il bus
La creazione, la modifica o l'eliminazione di un trigger pubblica . Il runtime si iscrive a quel topic oltre che a quello specifico dei trigger, quindi una modifica è attiva per l'evento successivo invece di attendere la fine di un intervallo di polling. La pubblicazione è best effort — un bus non disponibile non deve far fallire la modifica di un operatore — e l'aggiornamento periodico del runtime rimane il meccanismo di sicurezza.dag.triggers.changed
Dipendenze dirette dal modulo
- g-bus — per annunciare una modifica ai trigger
Appartenenza alla Solution
- Non incluso in una Solution predefinita
Sorgente
modules/repositories/automation/rp-dag