StatefulServiceBase.RunAsync вызывается более одного раза в основном при запуске? - PullRequest
0 голосов
/ 22 марта 2019

Является ли метод StatefulServiceBase.RunAsync (CancellationToken) более одного раза в Primary при запуске?

В документации ([1] и [2]) говорится, что этот метод будет вызываться только в Primary, но ничего не говорится о том, сколько раз он будет вызываться во время запуска.

Ссылки:
[1] https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicefabric.services.runtime.statefulservicebase.runasync?view=azure-dotnet
[2] https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-lifecycle#stateful-service-startup

1 Ответ

1 голос
/ 22 марта 2019

docs предлагает:

RunAsync метод реализован как цикл обработки и будет вызываться только тогда, когда реплика является первичной с состоянием записи.

Но что не ясно, так это то, что RunAsync() вызывается не только при запуске, также вызывается при событии ChangeRole, когда реплика Secondary повышается до Primary .

Технически, он вызывается один раз при запуске, когда реплика становится первичной, и если по какой-либо причине она понижается до вторичной по событию ChangeRole, а затем снова повышается до основной, она будет вызываться снова, каждый раз токен отмены будет отменен для распространения изменений до новых вызовов.

Итак, в общем, он часто вызывается один раз, но не следует ожидать, что он будет вызываться несколько раз, и это будет проблемой, если логика там всегда будет запускаться один раз.

Другой распространенной проблемой является то, что CreateServiceReplicaListeners() также может вызываться несколько раз по тем же причинам, что и выше, но это может быть гораздо более серьезной проблемой, поскольку вторичные реплики также вызывают CreateServiceReplicaListeners(), распространенной ошибкой является добавление логики.при условии, что он вызывается только один раз.

Документы здесь и здесь показывают более подробную информацию о проблемах со сценарием выше.

Это - исходный файл для большей части логики, описанной выше.

...