# Procedura di commutazione e ripristino — modello da adattare

Il caso Capordia è un team che elabora lotti indipendenti. L'obiettivo
è riprendere i lavori identificati senza perdere la loro accettazione. Un'
interruzione pianificata è possibile. La durata ammissibile, i criteri di
qualità e le responsabilità sono decisi prima della finestra di migrazione.

## 1. Assegnare le responsabilità

| Ruolo | Responsabilità | Prova da conservare |
|---|---|---|
| Pilota della commutazione | Autorizza arresto, cambio di autorità e ripresa | Decisione e ora UTC |
| Responsabile dei dati | Congela gli input, controlla copia e inventario | Manifesto versionato e impronte |
| Responsabile dell'elaborazione | Ferma il produttore, classifica i tentativi | Registro dei lotti e log del processo |
| Responsabile della ricezione | Confronta output e criteri concordati | Risultati, rifiuti e accordo di ricezione |

Un team piccolo può cumulare ruoli, ma la persona che pronuncia
l'accettazione e quella che sa fermare la vecchia autorità devono essere
identificabili. Il modello CSV fornito non impone alcun nome di persona.

## 2. Stabilire il riferimento prima di copiare

Attribuire a ogni lotto un identificatore stabile e una versione di input.
Registrare il suo percorso, la sua impronta, l'elaborazione esatta e il criterio
di accettazione. Distinguere un tentativo avviato da un risultato accettato.
Conservare i parametri e le dipendenze necessari alla ripresa, compresi
gli stati di calcolo che il tuo software richiede. Un nome di file `final`
non basta a provare un'accettazione.

Nell'esercizio, otto lotti rappresentano 48 coupon fittizi. L'accettazione
si basa su un risultato deterministico in numeri interi; non è un modello di
checkpoint GPU. Gli otto output di riferimento sono calcolati prima della coupure.

## 3. Fermare l'arrivo di nuovi lavori

Chiudere l'ammissione di nuovi lotti e annotare l'ultimo identificatore ammesso.
Fermare il worker o attendere la frontiera di ripresa prevista. Confermare
che nessun processo della vecchia macchina possa ancora accettare output.
Classificare il registro: completato, in corso, da riprendere. Preservare le tracce
di un lotto ambiguo invece di dichiararlo completato per supposizione.

Nell'esercizio, la coupure su LOT-004 dà 3 / 1 / 4. Un rilancio senza
riconciliazione è rifiutato. Il registro e i suoi risultati restano insieme.

## 4. Copiare, controllare, cambiare autorità

La destinazione deve disporre del set congelato, dello stato necessario e del programma
compatibile. Verificare le impronte e l'inventario dalla destinazione.
Bloccare la ripresa se un input manca, se il manifesto è cambiato o se un
risultato non corrisponde più alla sua impronta e alla regola di accettazione.

In questo esercizio, `basculer` chiude prima la sorgente, poi copia i
file dopo la chiusura delle connessioni. Il programma apre la destinazione alla
produzione solo dopo il controllo. Non imitare una copia a caldo di un
database attivo al di fuori di questa procedura. Un fallimento lascia la sorgente ferma.

In un sistema reale, la chiusura di un file locale non impedisce a una vecchia
macchina isolata di continuare. Un diritto di pubblicazione esclusivo deve essere
imposto dal sistema che riceve i risultati, con rifiuto dei vecchi diritti
e prova di tale rifiuto. Il presente programma non fornisce questa protezione.

## 5. Riconciliare e ricevere

Verificare che tutti i risultati completati siano presenti e accettabili.
I tentativi in corso senza accettazione sono rimessi da riprendere dopo
conferma dell'arresto del loro vecchio produttore. Fare una ripresa limitata
prima di riaprire l'ammissione. Contabilizzare i lotti attesi, gli identificatori
unici accettati, gli errori e le riprese. Registrare un'accettazione
distinta dalla semplice fine del processo.

Nel programma: `preparer-reprise` trasforma l'unico lotto in corso in lotto
da riprendere. `executer` non ricalcola i tre lotti completati. Il controllo
finale richiede otto output accettati e identici al riferimento. LOT-004 ha
due tentativi, ma un solo output accettato.

## 6. Attivare il ritorno su un segnale osservabile

| Segnale | Decisione proposta per questo esercizio |
|---|---|
| Impronta di input diversa | Bloccare prima dell'elaborazione; recuperare la versione congelata |
| Risultato mancante o alterato | Bloccare la ricezione; esaminare il lotto e lo stato |
| Due autorità possibili | Interrompere la ripresa; stabilire un'autorità unica |
| Programma incapace di riprendere | Mantenere l'ammissione chiusa e trasferire lo stato recente verso l'ambiente compatibile |
| Finestra temporale superata | Applicare la decisione e il limite stabiliti dal team prima del passaggio |

Se la destinazione ha già accettato nuovi risultati, tornare alla vecchia copia
della sorgente perderebbe queste accettazioni. Congelare la destinazione, esportare il suo stato
recente, verificarlo e trasferirlo verso una nuova posizione di ritorno.
Riconciliare i risultati prima di rilanciare. In presenza di effetti esterni,
il loro inventario fa parte del ritorno; questo esercizio non ne produce alcuno.

```text
python exercice.py basculer --source manuel/cible --destination manuel/retour --proprietaire atelier-retour
python exercice.py preparer-reprise --dossier manuel/retour
python exercice.py executer --dossier manuel/retour
python exercice.py comparer --reference manuel/reference --candidat manuel/retour
```

Dopo questa operazione, `manuel/source` e `manuel/cible` sono chiusi. Solo
`manuel/retour` può lavorare. Se la copia fallisce o se il controllo rifiuta
un risultato, conservare le prove e non sbloccare due produttori.

## 7. Chiudere la migrazione

Conservare manifesto, registro prima/dopo, impronte, risultati del controllo,
versione del programma, decisione di ripresa e decisione di ritorno eventuale.
Eliminare la vecchia copia solo dopo il periodo di conservazione scelto
dal team. L'esercizio non elimina alcuna cartella; le sue risorse sono
fittizie e possono essere archiviate con il rapporto.
