同期エラー
項目一覧
Overview
Atlas Device Sync を使用してアプリケーションを開発しているときに、 エラーが発生する可能性があります。 このセクションでは、一般的な同期エラーをリストアップし、その処理方法について説明します。
注意
このページに記載されていないエラーが発生した場合は、 サポート チケットを申請してください 。
同期プロトコル エラー
次の表では、 Device Sync プロトコルエラーとその処理方法について説明します。 Atlas App Services は、 Device Sync ログのエラーを報告します。
エラー名 | 説明 |
---|---|
ErrorBadClientFileIdent | このエラーは、 Device Sync を終了して再度有効にした後にサーバーがアクセスできない Realm ファイルをクライアントが使用している場合に発生します。 このエラーはクライアントのリセットをトリガーします。 このエラーから回復するには、クライアント リセットを実行します。 |
ErrorClientFileUserMismatch | このエラーは、指定されたユーザー以外の ID に関連付けられている Realm ファイルをクライアントが同期しようとしたことを示しています。 この問題は、ユーザーがオフラインのときに Device Sync が終了して再度有効になり、以前の ID が無効になった場合に発生することがあります。 このエラーを回復するには、ローカル Realm ファイルを削除してから、Realm を再度開きます。 |
ErrorDivergingHistories | このエラーは、サーバー Realm とは異なる同期履歴を持つ Realm ファイルをクライアントが同期しようとしたことを示しています。 この問題は、ユーザーがオフラインのときに Device Sync が終了して再度有効になり、以前の同期履歴が無効になります。 このエラーはクライアントのリセットをトリガーします。 このエラーから回復するには、クライアント リセットを実行します。 |
ErrorPermissionDenyed | このエラーは、ユーザーのデータアクセス権限が特定のリクエストに対して十分でない場合に発生します。 これは、ユーザーが読み取り権限なしで Realm を開いた場合、または書込み権限なしでデータを変更しようとした場合に発生する可能性があります。 このエラーをトラブルシューティングするには、ルールを確認して、ユーザーに適切なデータアクセス権限があることを確認します。 |
ErrorMoreError | このエラーは、より具体的なエラーではカバーされていない内部障害を示しています。 たとえば、無料階層の Atlas クラスターのストレージ制限に達した場合にこの問題が発生する可能性があります。 |
Flexible Sync エラー
アプリがFlexible Sync を使用している場合、次のエラーが発生する可能性があります。
エラー名 | 説明 | ||||
---|---|---|---|---|---|
ErrorBedQuery | このエラーは、クライアント クエリが無効または不正であることを示します。 このエラーには、クエリが無効な理由に関する詳細を示す メッセージが含まれます。 このエラーから回復するには、クエリ構文が正しいこと、およびサーバーでサポートされているクエリ演算子を使用していることを確認する必要がある場合があります。 さらに、Flexible Sync 構成内のクエリ可能なフィールドをクエリしていることを確認してください。 クエリでインデックス付きのクエリ可能なフィールドを使用する場合は、インデックス付きのクエリ可能なフィールドに対する有効なクライアント側クエリの要件を満たしていることを確認してください。 | ||||
limitExceeded | このエラーは、使用されているクエリが256 kB のサイズ制限を超えたことを示しています。 このエラーから回復するには、クエリを再構成して、クエリ内のデータが許容サイズ内に収まるようにします。 | ||||
ErrorServerPermissionsChecked | このエラーは、ファイル識別子に対するサーバー権限が最後に使用された以降に変更されたことを示しています。 このエラーはクライアントのリセットをトリガーします。 このエラーから回復するには、クライアント リセットを実行します。 | ||||
ErrorInitialSyncNotcompleted | このエラーは、最初の同期が完了する前にクライアントがセッションを開始しようとしたことを示しています。 これは、アプリが同期を有効にしたばかりで、まだ同期履歴を作成しているプロセスにある場合に発生することがあります。 このプロセスが完了するまで、クライアントは再接続を試みます。 その後、このエラーは解決され、同期は正常に動作するようになります。 | ||||
ErrorCompensingWrite | この致命的でないエラーは、クライアントが「不正」な書込みを試みた場合に発生します。 以下は、不正な書込みと見なされます。
ローカル Realm には「不正」書込みの概念が存在しないため、書込みは常にローカルで成功します。 同期時に、サーバーは不正な書き込みに注意します。 その後、サーバーは変更を元に戻します。 "Composing Write"と呼ばれる元に戻す操作は、クライアントに同期することで、クライアントの Realm で不正な書込み (write) が行われなくなります。 サーバーはこのエラーを送信して、クライアントに何が発生したかを通知します。 特定のオブジェクトへの不正な書込み (write) と、それに対応する書込み (write) の間にある特定のオブジェクトへのローカル書込み (write) は、いずれもなくなります。 例次の疑似コード例について考えてみましょう。
ここでは、ユーザーには 不正な書込みは、アプリログに致命的でないエラーとして表示されます。 不正な書き込みは、アプリケーション コードが意図しないことを実行していることを示している場合があります。 次の場合、「
|
MongoDB Translator のエラー
Device Sync と MongoDB Atlas の間の変換プロセスで次のエラーが発生する可能性があります。
エラー名 | 説明 |
---|---|
MaxIntegrationAtlas | MongoDB トランスレーターが変更セットを統合できない場合は、一定回数再試行します。 このエラーは、トランスレーターが最大再試行回数に達し、変更をコミットできなかった場合に発生します。 これは通常、クラスター サイズが不十分なことが原因です。 これは、トランザクションが非常に大規模で、クラスターの利用可能なリソースを超える可能性があります。 たとえば、デバイスが長時間オフラインではあり、非推奨の量のバッチ トランザクションを同期しようとします。 または、クラスター リソースが通常、アプリのニーズに対して不十分です。 このエラーは、クラスター階層をアップグレードすることで解決できます。 このエラーを回避するには、リンクされた MongoDB クラスターがアプリのニーズを満たしていることを確認します。 また、アプリがデータの読み取りと書き込みにベストプラクティスを使用していることを確認します。 詳細については、 「 Atlas クラスターのサイズ設定と階層の選択 」を参照してください。 |
MongoEncodingError | このエラーは、MongoDB Atlas の書込み (write)( 同期クライアントではない)ドキュメントが変更され、アプリのスキーマに準拠しなくなります。 スキーマに一致しないドキュメントは同期できず、このようなドキュメントで表されるオブジェクトに対するローカル アップデートは伝達されません。 詳細については、「 同期されていないドキュメント 」を参照してください。 |
TranslatorCollectioniveErasure | このエラーは、同期された MongoDB クラスターが伝達された Device Sync 変更の書込み (write) 操作を拒否した場合に発生します。 これは通常、重複キーの例外によって発生します。つまり、2 つのオブジェクトが同じプライマリキーを使用することを意味します。 このエラーを回避するには、プライマリキーの値として ObjectId またはUUID を使用します。 あるいは、同期されたすべてのオブジェクトには、パーティション間でも一意のプライマリキーがあることを確認します。 |
TranslatorFatalError - ChangeStreamHatryLogst | このエラーは、サーバー側の「トランスレータ」プロセスがそれらを読み取る前に、 oplog内の古いエントリが期限切れになった場合に発生します。 これらのエントリがないと、トランスレーターは MongoDB クラスターと Realm オブジェクト サーバーを同等の状態にすることはできません。 これは、次の場合に発生する可能性があります。
無料階層には共有 oplog があるため、このエラーに対する脆弱性が高くなります。 |
MongoDB 接続エラー
新しく作成されたクラスターで Device Sync を有効にすると、操作によってクラスター URI の解析が失敗する可能性があります。 これは、クラスターの SRV レコードがまだ伝達されていないために発生します。 次のいずれかの回避策が 2 つあります。
5 分待ってから、Atlas Device Sync を有効にします。
同期クライアント エラー
同期プロトコルは、接続済みのクライアントが原因でエラーが発生したと思われる場合、 ERROR
メッセージを返します。 各メッセージには、コード番号とエラーの説明が含まれています。
同期エラーの完全なリストを表示するには、 エラー コード リスト を参照してくださいRealm Database CoreGithub リポジトリ 。
同期エラーの処理
同期を使用するすべてのアプリケーションには同期エラー ハンドラーが必要です。 同期エラー処理の詳細については、使用する SDK を参照してください。
クライアント ログ レベルの設定
クライアントのログ レベルを指定できます。 ログレベルをtrace
またはdebug
に設定すると、アプリケーションの開発中に問題を診断するのに役立ちます。 すべての同期イベントに関する一般情報または詳細をログに記録することも、警告やエラーのみをログに記録することもできます。
重要
冗長なログはパフォーマンスに悪影響を及ぼします。 本番環境の配置では、ログ レベルを減らします。
クライアント ログ レベルの設定方法を含め、利用可能なログ レベルの詳細については、「 ご希望の SDK 」を参照してください。