2016-11-02 2 views
2

Я запускаю приложение Service Fabric в кластере Azure. Приложение не срабатывало в течение нескольких дней без каких-либо проблем. Однако вчера мы заметили, что одна из служб перешла в состояние «Ошибка» и с тех пор не восстановилась.Служба с сохранением состояния службы с FailFast

Услуга является надежной службой обслуживания с 1 разделом и 3 репликами (то есть одной первичной, второй вторичной). Служба реализует долгосрочную RunAsync(), а также читает и записывает в/из многих записей ReliableDictionary одновременно во время RunAsync().

Мы заметили следующее сообщение об ошибке в журнале событий на первичном узле:

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) 

Мы никогда не наблюдали это в наших местных условиях развития, до сих пор мы наблюдали только это в Azure кластере ,

  1. Что здесь происходит? Это похоже на поврежденную информацию о репликации.
  2. Что может сделать наш код, который может вызвать эту проблему?
+0

Вы пишете несколько слов в словаре в одном словаре в рамках одной транзакции? –

+0

Нет, одна запись за tx. Несколько одновременных tx для разных записей в одном словаре. –

+1

Хорошо, полезно знать. То, что вы видите здесь, - это общая проверка против ложного прогресса на вторичном. Лучший способ для нас отладить, почему это ударяется, - это посмотреть на журналы вашего кластера. Можете ли вы открыть билет поддержки через Azure Portal и включить ссылку на этот пост SO? Команда поддержки должна взять ее оттуда. –

ответ

0

Это была проблема в Service Fabric, которая была исправлена ​​в 5.3.311.