Quando si verificano i conflitti
Un conflitto di dati si verifica quando lo stesso record viene modificato da fonti diverse prima che le modifiche siano state sincronizzate. Scenari tipici:
Due dispositivi offline
Due membri del team lavorano offline su dispositivi diversi e modificano lo stesso record. Ad esempio:
- L'operatore all'ingresso registra il check-in di un partecipante e aggiunge il commento "VIP"
- Il manager su un altro dispositivo registra lo stesso check-in e aggiunge il commento "Posto extra"
- Al ripristino della connessione, entrambe le modifiche vengono inviate al server
Offline + online
Un membro del team lavora offline, l'altro online:
- Il manager al computer (online) modifica lo stato della registrazione
- L'operatore sul posto (offline) modifica lo stesso stato
- Durante la sincronizzazione, la modifica offline entra in conflitto con quella gia applicata online
Quando i conflitti sono improbabili
In pratica, i conflitti si verificano raramente perche:
- Diversi membri del team di solito lavorano con partecipanti diversi
- Il check-in e un'operazione unidirezionale (registrazione dell'arrivo), il conflitto di check-in e possibile solo con la doppia scansione
- Le operazioni di pagamento sono protette dall'idempotency-key
Strategia: last-writer-wins (Free, Pro)
Nei piani Free e Pro viene utilizzata la strategia automatica last-writer-wins (vince l'ultimo):
Come funziona
- Durante la sincronizzazione, il server confronta i timestamp
clientTsdelle modifiche in conflitto. - La modifica con il timestamp piu recente viene salvata automaticamente.
- La modifica con il timestamp precedente viene sovrascritta.
- Entrambe le modifiche vengono registrate nell'audit log (anche quella sovrascritta).
Esempio
| Ora | Azione | Risultato |
|---|---|---|
| 10:05 | Operatore A (offline): check-in + commento "VIP" | Salvato localmente |
| 10:07 | Operatore B (offline): check-in + commento "Standard" | Salvato localmente |
| 10:15 | Operatore A torna online | Modifica inviata |
| 10:16 | Operatore B torna online | Conflitto. Vince B (10:07 > 10:05). Commento = "Standard" |
Vantaggi e limitazioni
Vantaggi:
- Completamente automatico -- non richiede intervento dell'utente
- Non interrompe il flusso di lavoro
- Adatto alla maggior parte degli scenari (check-in, stati semplici)
Limitazioni:
- La modifica precedente viene persa senza notifica
- Non c'e possibilita di unire due modifiche
- Per dati critici puo portare alla perdita di informazioni
Strategia: optimistic locking + merge UI (Business, Enterprise)
Nei piani Business ed Enterprise e disponibile una strategia interattiva di risoluzione dei conflitti con interfaccia visuale.
Come funziona
- Durante la sincronizzazione, il server rileva un conflitto (il record e stato modificato dopo l'ultimo stato conosciuto dal client).
- Invece della sovrascrittura automatica, il server restituisce entrambe le versioni.
- All'utente viene mostrata la merge UI -- l'interfaccia di confronto delle versioni.
- L'utente sceglie quale versione conservare o unisce le modifiche manualmente.
Merge UI
L'interfaccia di risoluzione dei conflitti mostra:
-
Colonna sinistra: la tua versione (modifica locale)
- Autore della modifica
- Ora della modifica
- Campi modificati con i relativi valori
-
Colonna destra: versione del server (modifica altrui)
- Autore della modifica
- Ora della modifica
- Campi modificati con i relativi valori
-
Azioni:
- "Mantieni la mia versione" -- la tua modifica sovrascrive quella del server
- "Accetta la versione del server" -- la versione del server viene conservata, la tua modifica viene annullata
- "Unisci" -- scegli manualmente il valore per ogni campo
Esempio
| Campo | La tua versione | Versione del server |
|---|---|---|
| Check-in | Si | Si |
| Commento | VIP, posto A-12 | Standard |
| Stato | Confermato | Confermato |
Puoi accettare il check-in da entrambe le versioni (coincidono), prendere il tuo commento e lo stato del server.
Optimistic locking
Sotto il cofano viene utilizzato l'optimistic locking:
- Ogni record ha una versione (version counter)
- Quando invia una modifica, il client indica su quale versione e basata
- Se la versione sul server e cambiata (qualcun altro ha aggiornato il record), il server restituisce un conflitto
- Il client mostra la merge UI
Notifiche sui conflitti
Quando viene rilevato un conflitto:
Free / Pro: notifica toast "Conflitto di dati risolto automaticamente" (informativa, senza azioni).
Business / Enterprise: notifica toast "Rilevato conflitto. E necessaria la tua decisione" con un pulsante per accedere alla merge UI. Il conflitto blocca la sincronizzazione delle altre modifiche fino alla sua risoluzione.
Raccomandazioni
- Distribuite le zone di responsabilita. Assegnate ai membri del team gruppi diversi di partecipanti o zone di check-in per minimizzare i conflitti.
- Sincronizzate piu spesso. Brevi periodi di lavoro offline riducono la probabilita di conflitti.
- Utilizzate la merge UI per i dati critici. Se il vostro team lavora attivamente sugli stessi record, considerate il passaggio a Business per accedere alla risoluzione interattiva dei conflitti.