Menu Docs
Página inicial do Docs
/ /
Serviços Atlas App
/ /

Erros do Sync

Nesta página

  • Visão geral
  • Erros de protocolo de sincronização
  • Erros do Flexible Sync
  • Erros do tradutor do MongoDB
  • Erros de conexão do MongoDB
  • Erros do cliente de sincronização
  • Gerenciar erros de sincronização
  • Definir o nível de log do cliente

Ao desenvolver aplicativos com o Atlas Device Sync, você poderá encontrar erros. Esta seção lista erros comuns de sincronização e descreve como lidar com eles.

Observação

Se você encontrar um erro não listado nesta página, abra umticket de suporte .

A tabela abaixo descreve os erros de protocolo do Device Sync e como gerenciá-los. O Atlas App Services relata erros nos registros do Device Sync.

Nome do erro
Descrição
ErrorBadClientFileIdent

Este erro ocorre quando o cliente está usando um arquivo de Realm que o servidor não pode acessar após encerrar e habilitar novamente a sincronização do dispositivo.

Esse erro desencadeia a redefinição de um cliente. Para recuperar deste erro, execute uma redefinição de cliente.

ErrorClientFileUserMismatch

Este erro indica que o cliente tentou sincronizar um arquivo de domínio associado a uma identidade diferente do usuário especificado. Isso pode ocorrer se o Device Sync for encerrado e reabilitado enquanto o usuário estiver offline, o que invalida sua identidade anterior.

Para recuperar deste erro, exclua o arquivo de domínio local e, em seguida, reabra o domínio.

ErrorDivergingHistories

Esse erro indica que o cliente tentou sincronizar um arquivo de domínio que tem um histórico de sincronização diferente do domínio do servidor. Isso pode ocorrer se o Device Sync for encerrado e reabilitado enquanto o usuário estiver offline, o que invalida seu histórico de sincronização anterior.

Esse erro desencadeia a redefinição de um cliente. Para recuperar deste erro, execute uma redefinição de cliente.

ErrorPermissionDenied

Esse erro ocorre quando as permissões de acesso aos dados de um usuário não são suficientes para uma determinada solicitação. Isso pode ocorrer se um usuário tentar abrir um domínio sem permissão de leitura ou modificar dados sem permissão de gravação.

Para solucionar esse erro, revise suas regras para garantir que os usuários tenham as permissões adequadas de acesso a dados.

ErrorOtherError
Este erro indica uma falha interna que não está coberta por um erro mais específico. Por exemplo, pode ocorrer ao atingir o limite de armazenamento de um Atlas cluster de camada grátis.

Os erros a seguir podem ocorrer quando seu aplicativo usa a Flexible Sync.

Nome do erro
Descrição
ErrorBadQuery

Este erro indica que a query do cliente é inválida ou está malformada. Esse erro inclui uma mensagem que fornece detalhes sobre o motivo pelo qual a query é inválida.

Para se recuperar desse erro, talvez seja necessário verificar se a sintaxe da query está correta e se você está usando operadores de query compatíveis com o servidor. Além disso, confirme que você está executando query em um campo consultável em sua configuração de Flexible Sync. Se sua query usa um campo consultável indexado, certifique-se de que ele atenda aos requisitos de queries válidas do lado do cliente para campos consultáveis indexados.

Limites excedidos

Este erro indica que a query que está sendo usada excedeu o limite de tamanho de 256 kB.

Para recuperar deste erro, reestruture sua query para garantir que os dados na sua query estejam dentro do limite de tamanho aceitável.

Erro As permissões do servidor foram alteradas

Esse erro indica que as permissões do servidor para a identificação do arquivo foram alteradas desde a última vez em que ele foi usado.

Esse erro desencadeia a redefinição de um cliente. Para recuperar deste erro, execute uma redefinição de cliente.

ErrorInitialSyncNotCompleted

Esse erro indica que o cliente tentou abrir uma sessão antes de a sincronização inicial ser concluída. Isso pode ocorrer quando o aplicativo acabou de habilitar a sincronização e ainda está em processo de criação do histórico de sincronização.

O cliente tenta se reconectar até que este processo seja concluído. Depois, o erro é resolvido e a sincronização começa a funcionar normalmente.

ErroCompensatingWrite

Esse erro não fatal ocorre quando um cliente tenta escrever "ilegal". Os itens a seguir são considerados gravações ilegais:

  • Criando um objeto antes de abrir uma assinatura.

  • Criando um objeto que estaria fora da visualização de query do cliente. "Visualização de query" inclui as assinaturas do cliente e as permissões de leitura do cliente.

  • Modificar um objeto que está fora da visualização de query do cliente.

  • Criar, excluir ou modificar um objeto ou campo para o qual o cliente não tem permissões de gravação.

  • Modificar um objeto de forma que o cliente não tenha mais permissões de escrita nesse objeto ou campo após a escrita.

  • Atualizando o valor do campo de query indexado de um objeto existente.

Como o realm local não tem nenhum conceito de escrita "ilegal", a escrita sempre terá sucesso em nível local. Após a sincronização, o servidor notará a escrita ilegal. Depois, o servidor desfaz a alteração. A operação de desfazer, chamada de "escrita compensatória", é sincronizada novamente com o cliente para que o realm do cliente não tenha mais a escrita ilegal. O servidor também envia esse erro para que o cliente saiba o que aconteceu.

Qualquer escrita local em um determinado objeto entre uma escrita ilegal nesse objeto e a escrita compensatória correspondente será perdida.

Exemplo

Considere o seguinte exemplo de pseudocódigo:

obj1.fieldA = 10 // illegal due to field-level permissions
obj1.fieldB = 5 // legal
DELETE obj1 // legal
DELETE obj2 // legal

Aqui, o usuário não tem permissão para escrever para fieldA, mas tenta escrever para ele de qualquer maneira — uma gravação ilegal. Em seguida, o usuário executa duas gravações legais no mesmo objeto e outra gravação legal em um objeto diferente. Ao receber a gravação de compensação para a gravação ilegal em obj1.fieldA, as duas gravações legais subsequentes nesse objeto são perdidas. O resultado final é que obj1 ainda existe e seus dois valores de campo são o que eram antes das modificações tentadas. Enquanto isso, a eliminação de obj2 não tem relação com a escrita ilegal que causou a escrita compensatória, então ela permanece e obj2 permanece excluída.

A gravação ilegal aparece no applog como um erro não fatal. Escreve ilegalmente pode indicar que o código da sua aplicação está a fazer algo que não pretendia.

Nos seguintes casos, você verá ErrorWriteNotAllowed em vez de ErrorCompensatingWrite após uma escrita "ilegal":

  • Ao usar versões antigas do SDK vinculadas a uma versão realm-core anterior ao realm-core 12.1.0. Nesse caso, o servidor não irá desfazer a gravação ilegal, e será necessário executar um reinício do cliente manual.

  • Ao modificar um objeto em uma collection com a ingestão de dados habilitada. Nesse caso, o erro não é fatal e não aciona o reinício do cliente. O servidor ignora a alteração ilegal e não a aplica ao cluster MongoDB sincronizado.

Os seguintes erros podem ocorrer no processo de tradução entre a Device Syncs e o Atlas MongoDB.

Nome do erro
Descrição
MaxIntegrationAttempts

Quando o tradutor do MongoDB não consegue integrar um conjunto de alterações, ele tenta novamente por um número fixo de tentativas. Esse erro ocorre quando o conversor atinge o número máximo de tentativas e sem conseguir confirmar as alterações. Isso geralmente é causado por um tamanho insuficiente do cluster. Pode ser devido a uma transação muito grande que excede os recursos disponíveis do cluster. Por exemplo, um dispositivo fica offline por muito tempo e tenta sincronizar uma quantidade atípica de transações em lote. Ou os recursos do cluster geralmente são insuficientes para as necessidades do aplicativo.

Você pode resolver esse erro atualizando a camada do cluster.

Para evitar esse erro, certifique-se de que o cluster do MongoDB vinculado atenda às necessidades do seu aplicativo. Além disso, verifique se seu aplicativo aplica as práticas recomendadas para ler e gravar dados. Consulte Dimensionamento do cluster do Atlas e Seleção de níveis para obter mais informações.

Erro de codificação do Mongo

Esse erro ocorre quando uma gravação do MongoDB Atlas (ou seja, não um cliente Sync) modifica um documento de forma que ele não esteja mais em conformidade com o esquema do aplicativo. Os documentos que não correspondem ao esquema não podem ser sincronizados e nenhuma atualização local do objeto representado por esse documento será propagada.

Para obter mais informações, consulte Documentos não sincronizados.

Eliminação corretiva do tradutor
Esse erro ocorre quando um cluster MongoDB sincronizado rejeita a operação de gravação para uma alteração propagada do Device Sync. Isso normalmente é causado por uma exceção de chave duplicada, o que significa que dois objetos usam a mesma chave primária. Para evitar esse erro, use um ObjectId ou UUID como o valor da chave primária. Como alternativa, certifique-se de que cada objeto sincronizado tenha uma chave primária única, mesmo entre partições.
TranslatorFatalError - ChangeStreamHistoryLost

Esse erro ocorre quando entradas antigas no oplog expiram antes que o processo do tradutor "do lado do servidor" possa lê-las. Sem essas entradas, o tradutor não pode trazer o cluster MongoDB e o servidor de objetos Realm para um estado equivalente.

Isso pode acontecer quando:

  • A sincronização é pausada por tanto tempo que as entradas caem do oplog.

  • Você deixa uma coleção que o tradutor estava usando.

  • O cluster MongoDB está inacessível por muito tempo.

Como o nível livre tem um oplog compartilhado, ele é mais vulnerável a este erro.

Para solucionar esse erro, encerre e reabilite o Sync.

Se você habilitar a Device Sync em um cluster recém-criado, a operação poderá falhar ao analisar o URI do cluster. Isso acontece porque um registro SRV para o cluster ainda não foi propagado. Existem duas soluções alternativas possíveis:

O protocolo de sincronização retorna uma mensagem ERROR quando um erro parece ter sido causado por um cliente conectado. Cada mensagem contém um número de código e uma descrição do erro.

Para ver a lista completa de erros de sincronização, consulte a lista de códigos de erro Realm no Github repositório do Database Core .

Cada aplicativo que usa a sincronização precisa de um manipulador de erros de sincronização. Para saber mais sobre o tratamento de erros de sincronização, consulte seu SDK preferido:

Você pode especificar o nível de registro do cliente. Definir o nível de registro como trace ou debug pode ajudar a diagnosticar problemas enquanto seu aplicativo está em desenvolvimento. Você pode registrar informações gerais ou detalhes sobre todos os eventos de sincronização ou registrar somente avisos ou erros.

Importante

Registro de verbosidade afeta negativamente o desempenho. Para sistemas de produção, reduza o nível de registro.

Para obter mais informações sobre os níveis de log disponíveis, incluindo como definir o nível de log do cliente, consulte o SDK de sua preferência.

Voltar

Reinício do cliente