Erros do Sync
Nesta página
Visão geral
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 .
Erros de protocolo de sincronização
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. |
Erros do Flexible Sync
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:
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. ExemploConsidere o seguinte exemplo de pseudocódigo:
Aqui, o usuário não tem permissão para escrever para 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á
|
Erros do tradutor do MongoDB
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:
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. |
Erros de conexão do MongoDB
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:
Aguarde cinco minutos e habilite o Atlas Device Sync.
Desvincule e vincule novamente o cluster.
Erros do cliente de sincronização
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 .
Gerenciar erros de sincronização
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:
Definir o nível de log do cliente
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.