Azure service fabric 服务结构有状态服务因FailFast失败

Azure service fabric 服务结构有状态服务因FailFast失败,azure-service-fabric,Azure Service Fabric,我正在Azure集群中运行Service Fabric应用程序。应用程序运行了几天,没有出现任何问题。然而,昨天我们注意到其中一项服务进入“错误”状态,此后一直没有恢复 该服务是一个可靠的有状态服务,具有1个分区和3个副本(即一个主分区和两个辅助分区)。该服务实现了一个长时间运行的RunAsync(),并在RunAsync()期间并发地读写许多ReliableDictionary条目 我们注意到主节点上的事件日志中存在以下错误: Description: The application requ

我正在Azure集群中运行Service Fabric应用程序。应用程序运行了几天,没有出现任何问题。然而,昨天我们注意到其中一项服务进入“错误”状态,此后一直没有恢复

该服务是一个可靠的有状态服务,具有1个分区和3个副本(即一个主分区和两个辅助分区)。该服务实现了一个长时间运行的RunAsync(),并在RunAsync()期间并发地读写许多ReliableDictionary条目

我们注意到主节点上的事件日志中存在以下错误:

Description: The application requested process termination through System.Environment.FailFast(string message).
Message: ProgressVectorEntry.Lsn == failureLsn
Stack:
   at System.Environment.FailFast(System.String)
   at Microsoft.ServiceFabric.Replicator.ProgressVector.FindSharedVector(Microsoft.ServiceFabric.Replicator.ProgressVector, Microsoft.ServiceFabric.Replicator.ProgressVector)
   at Microsoft.ServiceFabric.Replicator.ProgressVector.FindCopyModePrivate(Microsoft.ServiceFabric.Replicator.CopyContextParameters, Microsoft.ServiceFabric.Replicator.CopyContextParameters, Int64)
   at Microsoft.ServiceFabric.Replicator.ProgressVector.FindCopyMode(Microsoft.ServiceFabric.Replicator.CopyContextParameters, Microsoft.ServiceFabric.Replicator.CopyContextParameters, Int64)
   at Microsoft.ServiceFabric.Replicator.LoggingReplicator.GetLogRecordsToCopy(Microsoft.ServiceFabric.Replicator.ProgressVector, System.Fabric.Epoch, Microsoft.ServiceFabric.Replicator.LogicalSequenceNumber, Microsoft.ServiceFabric.Replicator.LogicalSequenceNumber, Int64, Int64, Microsoft.ServiceFabric.Replicator.LogicalSequenceNumber ByRef, Microsoft.ServiceFabric.Replicator.LogicalSequenceNumber ByRef, Microsoft.ServiceFabric.Data.IAsyncEnumerator`1<Microsoft.ServiceFabric.Replicator.LogRecord> ByRef, Microsoft.ServiceFabric.Replicator.BeginCheckpointLogRecord ByRef)
   at Microsoft.ServiceFabric.Replicator.LoggingReplicatorCopyStream+<GetNextAsyncSafe>d__3.MoveNext()
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Start[[Microsoft.ServiceFabric.Replicator.LoggingReplicatorCopyStream+<GetNextAsyncSafe>d__3, Microsoft.ServiceFabric.Data.Impl, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]](<GetNextAsyncSafe>d__3 ByRef)
   at Microsoft.ServiceFabric.Replicator.LoggingReplicatorCopyStream.GetNextAsyncSafe(System.Threading.CancellationToken)
   at Microsoft.ServiceFabric.Replicator.LoggingReplicatorCopyStream.GetNextAsync(System.Threading.CancellationToken)
   at System.Fabric.StateProviderBroker+AsyncEnumerateOperationDataBroker.<BeginGetNext>b__8(System.Threading.CancellationToken)
   at System.Fabric.Interop.Utility.WrapNativeAsyncMethodImplementation(System.Func`2<System.Threading.CancellationToken,System.Threading.Tasks.Task>, IFabricAsyncOperationCallback, System.String, System.Fabric.Interop.InteropApi)
   at System.Fabric.StateProviderBroker+AsyncEnumerateOperationDataBroker.BeginGetNext(IFabricAsyncOperationCallback)
Description:应用程序通过System.Environment.FailFast(字符串消息)请求进程终止。
消息:ProgressVectorEntry.Lsn==failureLsn
堆栈:
at System.Environment.FailFast(System.String)
位于Microsoft.ServiceFabric.Replicator.ProgressVector.FindSharedVector(Microsoft.ServiceFabric.Replicator.ProgressVector,Microsoft.ServiceFabric.Replicator.ProgressVector)
位于Microsoft.ServiceFabric.Replicator.ProgressVector.FindCopyModePrivate(Microsoft.ServiceFabric.Replicator.CopyContextParameters,Microsoft.ServiceFabric.Replicator.CopyContextParameters,Int64)
位于Microsoft.ServiceFabric.Replicator.ProgressVector.FindCopyMode(Microsoft.ServiceFabric.Replicator.CopyContextParameters,Microsoft.ServiceFabric.Replicator.CopyContextParameters,Int64)
位于Microsoft.ServiceFabric.Replicator.LoggingReplicator.GetLogRecordsToCopy(Microsoft.ServiceFabric.Replicator.ProgressVector、System.Fabric.Epoch、Microsoft.ServiceFabric.Replicator.LogicalSequenceNumber、Microsoft.ServiceFabric.Replicator.LogicalSequenceNumber、Int64、Int64、Microsoft.ServiceFabric.Replicator.LogicalSequenceNumber ByRef、Microsoft.ServiceFabric.Replicator.LogicalSequenceNumber ByRef、Microsoft.ServiceF)abric.Data.iasyncumerator`1 ByRef,Microsoft.ServiceFabric.Replicator.BeginCheckpointLogRecord ByRef)
在Microsoft.ServiceFabric.Replicator.LoggingReplicatorCopyStream+d_u3.MoveNext()中
在System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.\uu Canon,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]。启动[[Microsoft.ServiceFabric.Replicator.LoggingReplicatorCopyStream+d_u3,Microsoft.ServiceFabric.Data.Impl,Version=5.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35]](d_u3)
位于Microsoft.ServiceFabric.Replicator.LoggingReplicatorCopyStream.GetNextAsyncSafe(System.Threading.CancellationToken)
位于Microsoft.ServiceFabric.Replicator.LoggingReplicatorCopyStream.GetNextAsync(System.Threading.CancellationToken)
位于System.Fabric.StateProviderBroker+AsyncEnumerationDataBroker.b__8(System.Threading.CancellationToken)
在System.Fabric.Interop.Utility.WrapNativeAsyncMethodImplementation(System.Func`2,IFabricAsyncOperationCallback,System.String,System.Fabric.Interop.InteropApi)
位于System.Fabric.StateProviderBroker+AsyncEnumerationDataBroker.BeginGetNext(IFabricAsyncOperationCallback)
我们从未在本地开发环境中观察到这一点,到目前为止,我们只在Azure集群中观察到这一点

  • 这里发生了什么?看起来复制信息已损坏
  • 我们的代码会做什么导致这个问题

  • 这是在中修复的Service Fabric中的一个问题。

    您是否在一个事务中写入同一个字典上的多个字典条目?否,每个发送一个条目。多个并发发送到一个字典中的不同条目。好的,很高兴知道。您在这里看到的是针对辅助事务上错误进度的一般验证。我们调试此问题的最佳方法是查看您的群集日志。您可以通过Azure门户打开支持票证并包含指向此SO帖子的链接吗?支持团队应该从那里开始。支持请求已创建,非常感谢您的帮助@VaclavTurecek:)此问题的结果是什么@AdrianHofman?