Docs Menu
Docs Home
/ /
Manejar errores

Errores de sincronización

Al desarrollar aplicaciones con Atlas Device Sync, pueden producirse errores. Esta sección enumera errores comunes de sincronización y describe cómo solucionarlos.

Nota

Si encuentra un error que no aparece en esta página, puede presentar una reclamación. ticket de soporte.

La siguiente tabla describe los errores del protocolo de sincronización de dispositivos y cómo gestionarlos. Atlas App Services informa de los errores en los registros de sincronización de dispositivos.

Nombre del error
Descripción

ErrorBadClientFileIdent

Este error ocurre cuando el cliente usa un archivo de reino al que el servidor no puede acceder después de finalizar y volver a habilitar la sincronización del dispositivo.

Este error activa el reinicio del cliente. Para solucionarlo,reinícielo.

ErrorClientFileUserNo coincide

Este error indica que el cliente intentó sincronizar un archivo de dominio asociado con una identidad distinta a la del usuario especificado. Esto puede ocurrir si la sincronización de dispositivos se cancela y se vuelve a habilitar mientras el usuario está desconectado, lo que invalida su identidad anterior.

Para recuperarse de este error, elimine el archivo del reino local y luego vuelva a abrir el reino.

Historiales de errores divergentes

Este error indica que el cliente intentó sincronizar un archivo de dominio con un historial de sincronización diferente al del dominio del servidor. Esto puede ocurrir si la sincronización de dispositivos se cancela y se vuelve a habilitar mientras el usuario está desconectado, lo que invalida su historial de sincronización anterior.

Este error activa el reinicio del cliente. Para solucionarlo,reinícielo.

ErrorPermisoDenegado

Este error se produce cuando los permisos de acceso a los datos de un usuario son insuficientes para una solicitud determinada. Esto puede ocurrir si un usuario intenta abrir un dominio sin permiso de lectura o modificar datos sin permiso de escritura.

Para solucionar este error, revise sus reglas para asegurarse de que los usuarios tengan los permisos de acceso a los datos adecuados.

ErrorOtroError

Este error indica una falla interna que no está cubierta por un error más específico. Por ejemplo, esto puede ocurrir cuando alcanzas el límite de almacenamiento de un clúster de Atlas con nivel gratuito.

Los siguientes errores pueden ocurrir cuando su aplicación utiliza sincronización flexible.

Nombre del error
Descripción

ErrorBadQuery

Este error indica que la consulta del cliente no es válida o tiene un formato incorrecto. Incluye un mensaje que detalla el motivo.

Para solucionar este error, es posible que deba verificar que la sintaxis de la consulta sea correcta y que esté utilizando operadores de consulta compatibles con el servidor. Además, confirme que está consultando un campo consultable en su configuración de Sincronización Flexible. Si su consulta utiliza un campo consultable indexado, asegúrese de que cumpla con los requisitos para consultas válidas del lado del cliente para campos consultables indexados.

Límites excedidos

Este error indica que la consulta utilizada ha excedido el límite de tamaño de 256 kB.

Para recuperarse de este error, reestructura tu consulta para garantizar que los datos en tu consulta estén dentro del límite de tamaño aceptable.

ErrorPermisos del servidor cambiados

Este error indica que los permisos del servidor para el archivo ident han cambiado desde la última vez que se utilizó.

Este error activa el reinicio del cliente. Para solucionarlo,reinícielo.

ErrorInitialSyncNotCompleted

Este error indica que el cliente intentó abrir una sesión antes de que se completara la sincronización inicial. Esto puede ocurrir cuando la aplicación acaba de habilitar la sincronización y aún está creando el historial de sincronización.

El cliente intenta reconectarse hasta que este proceso esté completo. Luego, este error se resuelve y sincronizar comienza a funcionar normalmente.

ErrorCompensatingWrite

Este error no fatal ocurre cuando un cliente intenta una escritura ilegal. Las siguientes se consideran escrituras ilegales:

  • Crear un objeto antes de abrir una suscripción.

  • Creación de un objeto que quedaría fuera de la vista de consulta del cliente. Esta vista incluye tanto las suscripciones como los permisos de lectura del cliente.

  • Modificar un objeto que está fuera de la vista de consulta del cliente.

  • Crear, eliminar o modificar un objeto o campo para el cual el cliente no tiene permisos de escritura.

  • Modificar un objeto de tal manera que el cliente ya no tenga permisos de escritura en ese objeto o campo después de la escritura.

  • Actualización del valor del campo consultable indexado de un objeto existente.

Dado que el dominio local no reconoce las escrituras "ilegales", la escritura siempre se realizará correctamente localmente. Al sincronizar, el servidor detectará la escritura ilegal y deshará el cambio. Esta operación, llamada "escritura compensatoria", se sincroniza con el cliente para que su dominio ya no tenga la escritura ilegal. El servidor también envía este error para informar al cliente de lo sucedido.

Cualquier escritura local en un objeto determinado entre una escritura ilegal en ese objeto y la escritura compensatoria correspondiente se perderá.

Ejemplo

Considere el siguiente ejemplo de pseudocódigo:

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

Aquí el usuario no tiene permiso para escribir. fieldA Pero intenta escribir en él de todas formas (una escritura ilegal). El usuario realiza entonces dos escrituras legales en el mismo objeto y otra escritura legal en un objeto diferente. Al recibir la escritura compensatoria por la escritura ilegal obj1.fieldA en, las dos escrituras legales subsiguientes en ese objeto se pierden. Como1 resultado, obj sigue existiendo y sus dos valores de campo son los que eran antes de los intentos de modificación. Mientras tanto, la eliminación de obj2 no está relacionada con la escritura ilegal que causó la escritura compensatoria, por lo que se mantiene y obj2 permanece eliminado.

La escritura ilegal aparece en el registro de aplicaciones como un error no fatal. Las escrituras ilegales podrían indicar que el código de la aplicación está haciendo algo inesperado.

En los siguientes casos, verá ErrorWriteNotAllowed en lugar de ErrorCompensatingWrite después de una escritura "ilegal":

  • Al usar versiones anteriores del SDK vinculadas a una versión de realm-core anterior a realm-core,12.1.0 el servidor no deshará la escritura ilegal y deberá reiniciar el cliente manualmente.

  • Al modificar un objeto en una colección con la ingesta de datos habilitada, el error no es grave y no provoca el reinicio del cliente. El servidor omite el cambio ilegal y no lo aplica al clúster MongoDB sincronizado.

Los siguientes errores pueden ocurrir en el proceso de traducción entre Device Sync y MongoDB Atlas.

Nombre del error
Descripción

Máximos intentos de integración

Cuando el traductor de MongoDB no puede integrar un conjunto de cambios, realiza un número fijo de reintentos. Este error se produce cuando el traductor alcanza el número máximo de reintentos y no puede confirmar los cambios. Esto suele deberse a un tamaño de clúster insuficiente. Esto puede deberse a una transacción muy grande que excede los recursos disponibles del clúster. Por ejemplo, un dispositivo permanece sin conexión durante un tiempo prolongado e intenta sincronizar una cantidad inusual de transacciones por lotes. O bien, los recursos del clúster son generalmente insuficientes para las necesidades de la aplicación.

Puedes resolver este error actualizando el nivel del clúster.

Para evitar este error, asegúrese de que el clúster de MongoDB vinculado cumpla con las necesidades de su aplicación. Además, asegúrese de que su aplicación utilice las prácticas recomendadas para leer y escribir datos. Consulte "Tamaño del clúster de Atlas y selección de niveles" para obtener más información.

Error de codificación de Mongo

Este error se produce cuando una escritura de MongoDB Atlas (es decir, que no sea un cliente de sincronización) modifica un documento de forma que ya no se ajusta al esquema de la aplicación. Los documentos que no coinciden con el esquema no se pueden sincronizar y las actualizaciones locales del objeto representado por dicho documento no se propagarán.

Para obtener más información,consulte Documentos no sincronizados.

TranslatorCorrectiveErasure

Este error se produce cuando un clúster MongoDB sincronizado rechaza la operación de escritura de un cambio propagado en la sincronización de dispositivos. Esto suele deberse a una excepción de clave duplicada, lo que significa que dos objetos usan la misma clave principal. Para evitar este error, utilice ObjectId o UUID como valor de clave principal. Como alternativa, asegúrese de que cada objeto sincronizado tenga una clave principal única, incluso en diferentes particiones.

Error fatal del traductor: historial de cambios perdido

Este error se produce cuando las entradas antiguas del registro de operaciones han expirado antes de que el proceso traductor del servidor pudiera leerlas. Sin estas entradas, el traductor no puede restablecer el clúster de MongoDB ni el servidor de objetos Realm a un estado equivalente.

Esto puede suceder cuando:

  • La sincronización se pausa durante tanto tiempo que las entradas desaparecen del registro de operaciones.

  • Elimina una colección que estaba usando el traductor.

  • El clúster MongoDB no está accesible desde hace demasiado tiempo.

Debido a que el nivel gratuito tiene un registro de operaciones compartido, es más vulnerable a este error.

Para resolver este error, finalice y vuelva a habilitar la sincronización.

Si habilita la sincronización de dispositivos en un clúster recién creado, es posible que la operación no pueda analizar el URI del clúster. Esto se debe a que aún no se ha propagado un registro SRV para el clúster. Existen dos posibles soluciones alternativas:

El protocolo de sincronización devuelve un mensaje cuando un error parece haber sido causado por un cliente conectado. Cada mensaje contiene un número de código y una descripción del ERROR error.

Para ver la lista completa de errores de sincronización, consulte la lista de códigos de error en el repositorio GitHub de Realm Database Core.

Toda aplicación que usa Sync necesita un gestor de errores de sincronización. Para obtener más información sobre el manejo de errores de sincronización, consulte su SDK preferido:

Puede especificar el nivel de registro del cliente. Configurarlo en trace o debug puede ayudar a diagnosticar problemas durante el desarrollo de su aplicación. Puede registrar información general o detalles sobre todos los eventos de sincronización, o solo advertencias o errores.

Importante

El registro detallado afecta negativamente al rendimiento. Para la implementación en producción, reduzca el nivel de registro.

Para obtener más información sobre los niveles de registro disponibles, incluido cómo configurar el nivel de registro del cliente, consulte su SDK preferido.

Volver

Restablecimiento del cliente

En esta página