Aller au contenu

Synchronisation

La synchronisation de bae est celle de coven : bae déclare ses tables et blobs, et coven fait le reste. Cette page décrit la mécanique telle qu’elle s’applique à bae ; la propre documentation de coven couvre chaque partie en détail.

coven possède la connexion SQLite, donc chaque écriture validée par bae passe par lui. Quand une transaction qui modifie des tables synchronisées est validée, coven enregistre chaque changement de ligne, avec les colonnes touchées, dans la même transaction, donc un changement validé n’est jamais perdu, même si l’application plante un instant plus tard. Pas de comparaison de diff, pas d’indicateurs de saleté : la capture est une propriété de la connexion, et une écriture ne peut pas être manquée. Le changement attend sur l’appareil et n’est chiffré et signé qu’à l’envoi, donc écrire ne demande ni clé ni réseau.

Tout l’historique d’une bibliothèque dans l’emplacement cloud est une séquence numérotée d’objets. Chacun contient le lot de changements d’un appareil, une entrée d’administration, une clé scellée pour un membre ou une annonce d’instantané. Chaque appareil les applique dans l’ordre et n’en saute jamais aucun, donc tous les appareils s’accordent sur ce qui s’est passé et quand. Un appareil n’ajoute l’objet suivant qu’après avoir appliqué tous ceux d’avant.

Une passe de synchronisation lit en avant depuis le dernier objet que l’appareil a appliqué jusqu’à ce qu’il en manque un, vérifie la signature de chacun et l’applique, envoie les changements en attente de cet appareil comme un nouvel objet, puis fait le travail que demande le nouvel état : partager ou retirer un accès, prendre des instantanés, supprimer l’ancien historique. Une passe sur une bibliothèque calme coûte deux requêtes, quelle que soit sa taille.

Les passes s’exécutent après les changements locaux, sur un minuteur d’inactivité, et immédiatement avec Synchroniser maintenant. Les échecs sont réessayés selon un calendrier d’attente unique, et tout ce qui ne peut pas avancer nomme ce qu’il attend, ce que bae affiche dans sa ligne d’état de synchronisation.

Deux appareils qui modifient la même bibliothèque pendant qu’ils sont séparés sont le cas normal, pas l’exception. Quand leurs changements se rencontrent :

  • Les modifications de lignes différentes ou de colonnes différentes s’appliquent toutes les deux. Modifier l’année d’une sortie sur le portable et son label sur l’ordinateur de bureau donne les deux.
  • Les modifications de la même colonne de la même ligne sont ordonnées par horodatage : la modification la plus tardive gagne, de façon déterministe et identique sur chaque appareil.
  • Les suppressions gagnent sur les modifications concurrentes : une modification faite sur une ligne supprimée depuis perd, quel que soit son moment d’arrivée, donc une sortie supprimée sur un appareil reste supprimée même si un autre appareil l’a modifiée dans le même intervalle.

coven conserve chaque valeur remplacée comme valeur perdue ; bae n’en affiche aucune et n’en écarte aucune, donc il n’y a pas d’interface de conflit. Chaque appareil converge vers le même résultat quel que soit l’ordre d’arrivée.

Un appareil qui rejoint ou restaure ne rejoue pas l’historique depuis le début. Les appareils prennent des instantanés, l’état complet de la bibliothèque à un point de la séquence, et une fois que la bibliothèque et chaque cercle privé en ont un, l’historique antérieur est supprimé. Un nouvel appareil charge l’instantané le plus récent, puis n’applique que ce qui est venu après. Un appareil absent plus longtemps que l’historique conservé fait de même, et garde ses modifications non envoyées.

Versions de schéma

Lien vers cette section

Le schéma de bae est une seule migration, et chaque changement qu’envoie un appareil enregistre la version de schéma avec laquelle il a été fait. Un appareil qui atteint un changement d’un schéma plus récent que le sien s’arrête là, sans rien appliquer au-delà, jusqu’à ce que l’application soit mise à jour ; rien n’est perdu et rien n’est appliqué au mauvais format.

Au-dessus de la version de schéma se trouve l’ère de compatibilité : la révision de coven épinglée dans chaque binaire. Deux versions ne synchronisent qu’au sein d’une ère ; une rupture de format de communication coven est une nouvelle ère et une augmentation de version majeure sur chaque application. Avant la 1.0, chaque version est en ère zéro et les formats changent sans migration.

Ce que le fournisseur voit

Lien vers cette section

Le fournisseur stocke des changements, instantanés, enregistrements d’appartenance et fichiers chiffrés ; il peut compter les objets, observer tailles et timings et voir quel compte écrit chaque objet, sans rien lire de leur contenu. Chaque objet tiré par un appareil est vérifié, signature et appartenance, avant que quoi que ce soit ne touche la base de données : le stockage est une boîte aux lettres passive et non fiable. Consultez Chiffrement et Identité et appartenance.