Sincronização
A sincronização de bae é a sincronização de coven: bae declara suas tabelas e blobs, e coven faz o resto. Esta página cobre a mecânica como ela se aplica a bae; a documentação própria de coven cobre cada peça em profundidade.
Captura
Seção intitulada “Captura”coven possui a conexão SQLite, então toda escrita que bae grava passa por ele. Quando uma transação que muda tabelas sincronizadas é gravada, coven registra cada mudança de linha, com as colunas que ela tocou, na mesma transação, então uma mudança gravada nunca se perde, mesmo que o app feche um instante depois. Sem diff, sem flags de sujo: captura é uma propriedade da conexão, e uma escrita não pode ser perdida. A mudança espera no dispositivo e só é criptografada e assinada quando é enviada, então escrever não precisa de chave nem de rede.
A sequência
Seção intitulada “A sequência”Todo o histórico de uma biblioteca no local na nuvem é uma sequência numerada de objetos. Cada um contém o lote de mudanças de um dispositivo, uma entrada de administração, uma chave selada para um membro ou um anúncio de snapshot. Todo dispositivo os aplica em ordem e nunca pula nenhum, então todos os dispositivos concordam sobre o que aconteceu e quando. Um dispositivo só adiciona o próximo objeto depois de aplicar todos os anteriores.
Uma passada de sincronização lê adiante a partir do último objeto que o dispositivo aplicou até faltar um, confere a assinatura de cada um e o aplica, envia as mudanças pendentes deste dispositivo como um objeto novo e depois faz o trabalho que o estado novo pede: compartilhar ou deixar de compartilhar acesso, tirar snapshots, apagar histórico antigo. Uma passada em uma biblioteca quieta custa duas requisições, seja qual for o tamanho dela.
As passadas rodam depois de mudanças locais, em um temporizador ocioso e imediatamente em Sincronizar agora. Falhas tentam de novo seguindo um único cronograma de espera, e tudo que não consegue avançar diz o que está esperando, o que bae mostra na sua linha de status de sincronização.
Mesclagem
Seção intitulada “Mesclagem”Dois dispositivos editando a mesma biblioteca enquanto separados é o caso normal, não a exceção. Quando suas mudanças se encontram:
- Edições em linhas diferentes ou colunas diferentes se aplicam. Editar o ano de um lançamento no laptop e seu selo no desktop produz ambos.
- Edições na mesma coluna da mesma linha são ordenadas por carimbo de tempo: a edição posterior vence, de modo determinístico e igual em todo dispositivo.
- Exclusões vencem sobre edições concorrentes: uma edição feita em uma linha que foi excluída depois perde, não importa quando chegue, então um lançamento excluído em um dispositivo permanece excluído mesmo se outro dispositivo o editou no mesmo intervalo.
coven guarda cada valor substituído como valor perdido; bae não mostra nenhum e não descarta nenhum, então não há interface de conflito. Todo dispositivo converge para o mesmo resultado a partir de qualquer ordem de chegada.
Snapshots
Seção intitulada “Snapshots”Um dispositivo que entra ou restaura não reproduz o histórico desde o começo. Os dispositivos tiram snapshots, o estado completo da biblioteca em um ponto da sequência, e quando a biblioteca e cada círculo privado têm um, o histórico anterior é apagado. Um dispositivo novo carrega o snapshot mais recente e depois aplica só o que veio depois dele. Um dispositivo que ficou ausente por mais tempo do que o histórico guardado faz o mesmo, e mantém suas edições não enviadas.
Versões de esquema
Seção intitulada “Versões de esquema”O esquema de bae é uma única migração, e toda mudança que um dispositivo envia registra a versão do esquema com que foi feita. Um dispositivo que chega a uma mudança de um esquema mais novo que o seu para ali, sem aplicar nada depois dela, até o app atualizar; nada se perde e nada é aplicado errado.
Acima da versão de esquema fica a era de compatibilidade: a revisão fixada de coven embutida em cada binário. Dois builds sincronizam só dentro de uma era; uma quebra de formato de fio de coven é uma nova era e um aumento de versão major em todos os apps. Antes de 1.0, todo build é era zero e formatos mudam sem migração.
O que o provedor vê
Seção intitulada “O que o provedor vê”O provedor armazena mudanças, snapshots, registros de associação e arquivos criptografados; consegue contar objetos, observar tamanhos e tempos e ver qual conta escreve cada objeto, e não lê nada do conteúdo. Todo objeto que um dispositivo puxa é verificado, por assinatura e associação, antes de qualquer coisa tocar o banco de dados: o armazenamento é uma caixa de correio passiva e não confiável. Veja Criptografia e Identidade e associação.