Docs Menu
Docs Home
/ /
Atlas App Services
/ /

同期エラー

項目一覧

  • Overview
  • 同期プロトコル エラー
  • Flexible Sync エラー
  • MongoDB Translator のエラー
  • MongoDB 接続エラー
  • 同期クライアント エラー
  • 同期エラーの処理
  • クライアント ログ レベルの設定

Atlas Device Sync を使用してアプリケーションを開発しているときに、 エラーが発生する可能性があります。 このセクションでは、一般的な同期エラーをリストアップし、その処理方法について説明します。

注意

このページに記載されていないエラーが発生した場合は、 サポート チケットを申請してください 。

次の表では、 Device Sync プロトコルエラーとその処理方法について説明します。 Atlas App Services は、 Device Sync ログのエラーを報告します。

エラー名
説明
ErrorBadClientFileIdent
ErrorClientFileUserMismatch

このエラーは、指定されたユーザー以外の ID に関連付けられている Realm ファイルをクライアントが同期しようとしたことを示しています。 この問題は、ユーザーがオフラインのときに Device Sync が終了して再度有効になり、以前の ID が無効になった場合に発生することがあります。

このエラーを回復するには、ローカル Realm ファイルを削除してから、Realm を再度開きます。

ErrorDivergingHistories

このエラーは、サーバー Realm とは異なる同期履歴を持つ Realm ファイルをクライアントが同期しようとしたことを示しています。 この問題は、ユーザーがオフラインのときに Device Sync が終了して再度有効になり、以前の同期履歴が無効になります。

このエラーはクライアントのリセットをトリガーします。 このエラーから回復するには、クライアント リセットを実行します。

ErrorPermissionDenyed

このエラーは、ユーザーのデータアクセス権限が特定のリクエストに対して十分でない場合に発生します。 これは、ユーザーが読み取り権限なしで Realm を開いた場合、または書込み権限なしでデータを変更しようとした場合に発生する可能性があります。

このエラーをトラブルシューティングするには、ルールを確認して、ユーザーに適切なデータアクセス権限があることを確認します。

ErrorMoreError
このエラーは、より具体的なエラーではカバーされていない内部障害を示しています。 たとえば、無料階層の Atlas クラスターのストレージ制限に達した場合にこの問題が発生する可能性があります。

アプリがFlexible Sync を使用している場合、次のエラーが発生する可能性があります。

エラー名
説明
ErrorBedQuery

このエラーは、クライアント クエリが無効または不正であることを示します。 このエラーには、クエリが無効な理由に関する詳細を示す メッセージが含まれます。

このエラーから回復するには、クエリ構文が正しいこと、およびサーバーでサポートされているクエリ演算子を使用していることを確認する必要がある場合があります。 さらに、Flexible Sync 構成内のクエリ可能なフィールドをクエリしていることを確認してください。 クエリでインデックス付きのクエリ可能なフィールドを使用する場合は、インデックス付きのクエリ可能なフィールドに対する有効なクライアント側クエリの要件を満たしていることを確認してください。

limitExceeded

このエラーは、使用されているクエリが256 kB のサイズ制限を超えたことを示しています。

このエラーから回復するには、クエリを再構成して、クエリ内のデータが許容サイズ内に収まるようにします。

ErrorServerPermissionsChecked

このエラーは、ファイル識別子に対するサーバー権限が最後に使用された以降に変更されたことを示しています。

このエラーはクライアントのリセットをトリガーします。 このエラーから回復するには、クライアント リセットを実行します。

ErrorInitialSyncNotcompleted

このエラーは、最初の同期が完了する前にクライアントがセッションを開始しようとしたことを示しています。 これは、アプリが同期を有効にしたばかりで、まだ同期履歴を作成しているプロセスにある場合に発生することがあります。

このプロセスが完了するまで、クライアントは再接続を試みます。 その後、このエラーは解決され、同期は正常に動作するようになります。

ErrorCompensingWrite

この致命的でないエラーは、クライアントが「不正」な書込みを試みた場合に発生します。 以下は、不正な書込みと見なされます。

  • サブスクリプションを開く前に オブジェクトを作成します。

  • クライアントのクエリ ビューの外部にあるオブジェクトを作成します。 「クエリ ビュー」には、クライアントのサブスクライブとクライアントの読み取り権限の両方が含まれます。

  • クライアントのクエリ ビューの外部にあるオブジェクトを変更している。

  • クライアントが書込み (write) 権限を持たないオブジェクトまたはフィールドを作成、削除、または変更します。

  • 書き込み後にクライアントがそのオブジェクトまたはフィールドに対する書込み権限を持たなくなるようにオブジェクトを変更すると、

  • 既存のオブジェクトのインデックス付きクエリ可能なフィールド値を更新

ローカル Realm には「不正」書込みの概念が存在しないため、書込みは常にローカルで成功します。 同期時に、サーバーは不正な書き込みに注意します。 その後、サーバーは変更を元に戻します。 "Composing Write"と呼ばれる元に戻す操作は、クライアントに同期することで、クライアントの Realm で不正な書込み (write) が行われなくなります。 サーバーはこのエラーを送信して、クライアントに何が発生したかを通知します。

特定のオブジェクトへの不正な書込み (write) と、それに対応する書込み (write) の間にある特定のオブジェクトへのローカル書込み (write) は、いずれもなくなります。

次の疑似コード例について考えてみましょう。

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

ここでは、ユーザーには fieldAへの書込み権限がないが、少なくとも に書込み操作を実行しようとします。これは不正書込みです。 次に、ユーザーは同じオブジェクトに対して 2 回の有効な書込みを実行し、別のオブジェクトに対して 1 回の有効な書込みを実行します。 obj1.fieldAへの不正な書込みの埋め込みを受信すると、そのオブジェクトへのその後の 2 回の正規書込みが失われます。 最終結果は、obj1 は引き続き存在し、その 2 つのフィールド値は変更を試みる前と同じであるということです。 一方、obj2 の削除は、代替書込み (write) の原因となった不正な書込み (write) とは無関係であるため、オブジェクトは削除され、Object2 は削除されたままになります。

不正な書込みは、アプリログに致命的でないエラーとして表示されます。 不正な書き込みは、アプリケーション コードが意図しないことを実行していることを示している場合があります。

次の場合、「ErrorWriteNotAllowed ErrorCompensatingWritenull」書込み後に ではなく が表示されます。

  • Realm Core 12.1.0 より前の Realm Core バージョンにリンクされている古い SDK バージョンを使用している場合。 この場合、サーバーは不正な書き込みを元に戻し ない ため、クライアントを手動でリセットする必要があります。

  • Data Ingestが有効になっているコレクション内のオブジェクトを変更する場合。 この場合、エラーは致命的なものではなく、クライアントのリセットはtriggerされません。 サーバーは不正な変更をスキップし、同期された MongoDB クラスターには適用しません。

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 クラスターに長時間アクセスできません。

無料階層には共有 oplog があるため、このエラーに対する脆弱性が高くなります。

このエラーを解決するには、同期を終了して再度有効にします。

新しく作成されたクラスターで Device Sync を有効にすると、操作によってクラスター URI の解析が失敗する可能性があります。 これは、クラスターの SRV レコードがまだ伝達されていないために発生します。 次のいずれかの回避策が 2 つあります。

同期プロトコルは、接続済みのクライアントが原因でエラーが発生したと思われる場合、 ERRORメッセージを返します。 各メッセージには、コード番号とエラーの説明が含まれています。

同期エラーの完全なリストを表示するには、 エラー コード リスト を参照してくださいRealm Database CoreGithub リポジトリ 。

同期を使用するすべてのアプリケーションには同期エラー ハンドラーが必要です。 同期エラー処理の詳細については、使用する SDK を参照してください。

クライアントのログ レベルを指定できます。 ログレベルをtraceまたはdebugに設定すると、アプリケーションの開発中に問題を診断するのに役立ちます。 すべての同期イベントに関する一般情報または詳細をログに記録することも、警告やエラーのみをログに記録することもできます。

重要

冗長なログはパフォーマンスに悪影響を及ぼします。 本番環境の配置では、ログ レベルを減らします。

クライアント ログ レベルの設定方法を含め、利用可能なログ レベルの詳細については、「 ご希望の SDK 」を参照してください。

戻る

クライアント リセット