FreemiumProBusinessEnterprise

Risoluzione dei conflitti

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

  1. Durante la sincronizzazione, il server confronta i timestamp clientTs delle modifiche in conflitto.
  2. La modifica con il timestamp piu recente viene salvata automaticamente.
  3. La modifica con il timestamp precedente viene sovrascritta.
  4. Entrambe le modifiche vengono registrate nell'audit log (anche quella sovrascritta).

Esempio

OraAzioneRisultato
10:05Operatore A (offline): check-in + commento "VIP"Salvato localmente
10:07Operatore B (offline): check-in + commento "Standard"Salvato localmente
10:15Operatore A torna onlineModifica inviata
10:16Operatore B torna onlineConflitto. 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

  1. Durante la sincronizzazione, il server rileva un conflitto (il record e stato modificato dopo l'ultimo stato conosciuto dal client).
  2. Invece della sovrascrittura automatica, il server restituisce entrambe le versioni.
  3. All'utente viene mostrata la merge UI -- l'interfaccia di confronto delle versioni.
  4. 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

CampoLa tua versioneVersione del server
Check-inSiSi
CommentoVIP, posto A-12Standard
StatoConfermatoConfermato

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.

Domande frequenti

Quando si verificano i conflitti?
Un conflitto si verifica quando due o piu membri del team modificano lo stesso record mentre sono offline, o quando una modifica viene fatta offline e un'altra online. Ad esempio, due persone contemporaneamente registrano il check-in e aggiungono un commento allo stesso partecipante.
Cosa significa last-writer-wins?
Last-writer-wins e una strategia in cui viene salvata automaticamente l'ultima modifica in ordine temporale. Se due persone hanno modificato lo stesso record, viene conservata la versione con il timestamp piu recente. La modifica precedente viene sovrascritta.
Come funziona la merge UI su Business ed Enterprise?
Quando viene rilevato un conflitto, il sistema mostra entrambe le versioni della modifica affiancate. Puoi vedere chi e quando ha effettuato ciascuna modifica e scegliere quale versione conservare, oppure unirle manualmente.