0

レガシー SQL データベースからデータを読み取り、それをより実用的なものに変換して RavenDB に保存するデータ移行ツールを作成しました。

1 つの Raven セッションで 22500 個の 1KB オブジェクトを書き込もうとすると、次のエラーが発生します。

System.InvalidOperationException: Could not replicate POST operation to secondary node, failover behavior is: AllowReadsFromSecondaries

このメッセージは、Master Raven インスタンスで致命的なエラーが発生し、移行ツールが Slave Slave Raven インスタンスにフェールオーバーして書き込みを試みたことを示しています。私が知らないのは、その理由です。

背景情報:

  • .NET 4.0
  • RavenDB #2025 - 不安定 (Json.NET に依存しているため、安定したビルドを使用できません)
  • RavenDB レプリケーション バンドルを使用する (レプリケーションが正しく構成されている)
  • 書き込み操作は TransactionScope にラップされます (別の Raven セッションを使用して、移行ツールの別の場所で書き込みが行われます)。
  • Windows イベント ログにエラーなし

マスター Raven インスタンスのログオンに次のエラーが含まれています:

System.Threading.ThreadAbortException: Thread was being aborted.
   at Microsoft.Isam.Esent.Interop.Implementation.NativeMethods.JetSeek(IntPtr sesid, IntPtr tableid, UInt32 grbit)
   at Microsoft.Isam.Esent.Interop.Implementation.JetApi.JetSeek(JET_SESID sesid, JET_TABLEID tableid, SeekGrbit grbit) in C:\Work\ravendb\SharedLibs\Sources\managedesent-61618\EsentInterop\JetApi.cs:line 3172
   at Microsoft.Isam.Esent.Interop.Api.TrySeek(JET_SESID sesid, JET_TABLEID tableid, SeekGrbit grbit) in C:\Work\ravendb\SharedLibs\Sources\managedesent-61618\EsentInterop\MoveHelpers.cs:line 127
   at Raven.Storage.Esent.StorageActions.DocumentStorageActions.EnsureDocumentIsNotCreatedInAnotherTransaction(String key, Guid txId) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Storage.Esent\StorageActions\Util.cs:line 77
   at Raven.Storage.Esent.StorageActions.DocumentStorageActions.AddDocument(String key, Nullable`1 etag, RavenJObject data, RavenJObject metadata) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Storage.Esent\StorageActions\Documents.cs:line 296
   at Raven.Database.DocumentDatabase.<>c__DisplayClass37.<Put>b__30(IStorageActionsAccessor actions) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Database\DocumentDatabase.cs:line 480
   at Raven.Storage.Esent.TransactionalStorage.Batch(Action`1 action) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Storage.Esent\TransactionalStorage.cs:line 328
   at Raven.Database.DocumentDatabase.Put(String key, Nullable`1 etag, RavenJObject document, RavenJObject metadata, TransactionInformation transactionInformation) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Database\DocumentDatabase.cs:line 468
   at Raven.Database.DocumentDatabase.<>c__DisplayClass67.<Commit>b__64(DocumentInTransactionData doc) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Database\DocumentDatabase.cs:line 654
   at Raven.Storage.Esent.StorageActions.DocumentStorageActions.CompleteTransaction(Guid txId, Action`1 perDocumentModified) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Storage.Esent\StorageActions\General.cs:line 272
   at Raven.Database.DocumentDatabase.<>c__DisplayClass67.<Commit>b__63(IStorageActionsAccessor actions) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Database\DocumentDatabase.cs:line 658
   at Raven.Storage.Esent.TransactionalStorage.ExecuteBatch(Action`1 action) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Storage.Esent\TransactionalStorage.cs:line 374
   at Raven.Storage.Esent.TransactionalStorage.Batch(Action`1 action) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Storage.Esent\TransactionalStorage.cs:line 334
   at Raven.Database.DocumentDatabase.Commit(Guid txId) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Database\DocumentDatabase.cs:line 668
   at Raven.Database.Server.Responders.TransactionCommit.Respond(IHttpContext context) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Database\Server\Responders\TransactionCommit.cs:line 28
   at Raven.Database.Server.HttpServer.DispatchRequest(IHttpContext ctx) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Database\Server\HttpServer.cs:line 582
   at Raven.Database.Server.HttpServer.HandleActualRequest(IHttpContext ctx) in c:\Builds\RavenDB-Unstable-v1.2\Raven.Database\Server\HttpServer.cs:line 347

レプリケーションでトランザクションを使用する場合、セッションあたりの書き込み数に上限はありますか?
これはおそらく、不安定なビルドを使用した結果でしょうか?

編集: RavenDB Google グループに相互投稿: https://groups.google.com/forum/?fromgroups#!starred/ravendb/FZZ_Q1y59qI

4

1 に答える 1

0

これはバグのようです。再現を提供したので、うまくいけば、開発チームの誰かがそれを調べます。

詳細については、RavenDBGoogleグループスレッドhttps://groups.google.com/forum/?fromgroups#!starred/ravendb/FZZ_Q1y59qIを参照してください。

より多くの情報が利用可能になると、この回答を更新します。

更新:単一のDTCセッション内でこれだけ多くのオブジェクトを書き込むことはサポートされていません:https://groups.google.com/d/msg/ravendb/FZZ_Q1y59qI/fimWkX8NZm0J

于 2012-07-11T22:43:02.117 に答える