Compartilhar via


StateProvider Interface

public interface StateProvider

Define o comportamento que um serviço deve implementar para interagir com o FabricReplicator.

Resumo do método

Modificador e tipo Método e descrição
OperationDataStream getCopyContext()

Obtém contexto em um réplica secundário depois que ele é criado e aberto para enviar contexto à réplica Primária.

Observações:A réplica Primária analisa o contexto e envia o estado de volta por meio de getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext) . getCopyContext()é chamado em réplicas secundárias ociosas e recém-criadas e fornece um mecanismo para estabelecer de forma assíncrona uma conversa bidirecional com a réplica Primária. A réplica Secundária envia OperationData objetos com os quais a réplica Primária pode determinar o progresso da coleta de contexto no réplica Secundário. O réplica Primário responde enviando o estado necessário de volta. Consulte getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext) no réplica Primário para a outra metade da troca. Para serviços na memória, o getCopyContext() método não é chamado, pois o estado das réplicas secundárias é conhecido (elas estão vazias e exigirão todo o estado).

OperationDataStream getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext)

Obtém o estado em um réplica Primário necessário para criar uma réplica secundária.

Observações:Assim como getCopyContext() permite que o réplica Secundário envie contexto para a réplica Primária por meio de um OperationDataStream, getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext) permite que o réplica Primário responda com um OperationDataStream. O fluxo contém objetos que são entregues à réplica Secundária por meio do getCopyStream() método da FabricReplicator classe . Os objetos implementam Operation e contêm os dados especificados. Quando a réplica Primária recebe essa chamada, ela deve criar e retornar outra OperationDataStream que contenha OperationData. OperationDatarepresenta os dados/estado que o réplica Secundário

long getLastCommittedSequenceNumber()

Obtém o último número de sequência confirmado pelo serviço.

CompletableFuture<Boolean> onDataLossAsync(CancellationToken cancellationToken)

Indica que um quorum de gravação de réplicas neste conjunto de réplica foi perdido e, portanto, a perda de dados pode ter ocorrido. O conjunto de réplica consiste na maioria das réplicas, que inclui o réplica Primário.

Observações:Quando o runtime do Service Fabric observa a falha de um quorum de réplicas, que inclui o réplica Primário, elege um novo réplica Primário e chama imediatamente esse método na nova réplica Primária. Um réplica Primário que é informado de uma possível perda de dados pode optar por restaurar seu estado de alguma fonte de dados externa ou pode continuar a ser executado com o estado que ele tem atualmente. Se o serviço continuar a ser executado com seu estado atual, ele deverá retornar false desse método, o que indica que nenhuma alteração de estado foi feita. Se tiver restaurado ou alterado seu estado, como reverter o trabalho incompleto, ele deverá retornar true. Se true for retornado, o estado em outras réplicas deverá ser considerado incorreto. Portanto, o runtime do Service Fabric remove as outras réplicas do conjunto de réplica e as recria.

CompletableFuture<?> updateEpochAsync(Epoch epoch, SequenceNumber previousEpochLastSequenceNumber, CancellationToken cancellationToken)

Indica a um réplica que a configuração de um conjunto de réplica foi alterada devido a uma alteração ou tentativa de alteração no réplica Primário. A alteração ocorre devido à falha ou ao balanceamento de carga da réplica Primária anterior. As alterações de época atuam como uma barreira segmentando as operações nos períodos exatos de configuração em que foram enviadas por um réplica primário específico.

Observações:As informações no updateEpochAsync(Epoch epoch, SequenceNumber previousEpochLastSequenceNumber, CancellationToken cancellationToken) método permitem que o serviço mantenha um vetor de progresso, que é uma lista de cada época que o réplica recebeu e o LSN máximo que eles continham. Os dados de vetor de progresso, juntamente com o LSN máximo aplicado atual, são úteis para um réplica secundário enviar durante a operação de cópia para descrever o estado do réplica. Comparar vetores de progresso recebidos de réplicas secundárias durante a operação de cópia permite que réplicas primárias determinem se a réplica Secundária está atualizada, qual estado deve ser enviado para o réplica Secundário e se a réplica Secundária fez um progresso falso. O progresso falso significa que um réplica secundário relata que um LSN em uma época anterior era maior que o LSN que a réplica Primária tem em seu vetor de progresso.

Detalhes do método

getCopyContext

public OperationDataStream getCopyContext()

Obtém contexto em um réplica secundário depois que ele é criado e aberto para enviar contexto à réplica Primária.

Observações:A réplica Primária analisa o contexto e envia o estado de volta por meio de getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext) . getCopyContext()é chamado em réplicas secundárias ociosas e recém-criadas e fornece um mecanismo para estabelecer de forma assíncrona uma conversa bidirecional com a réplica Primária. A réplica Secundária envia OperationData objetos com os quais a réplica Primária pode determinar o progresso da coleta de contexto no réplica Secundário. O réplica Primário responde enviando o estado necessário de volta. Consulte getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext) no réplica Primário para a outra metade da troca. Para serviços na memória, o getCopyContext() método não é chamado, pois o estado das réplicas secundárias é conhecido (elas estão vazias e exigirão todo o estado).

Retornos:

getCopyState

public OperationDataStream getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext)

Obtém o estado em um réplica Primário necessário para criar uma réplica secundária.

Observações:Assim como getCopyContext() permite que o réplica Secundário envie contexto para a réplica Primária por meio de um OperationDataStream, getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext) permite que o réplica Primário responda com um OperationDataStream. O fluxo contém objetos que são entregues à réplica Secundária por meio do getCopyStream() método da FabricReplicator classe . Os objetos implementam Operation e contêm os dados especificados. Quando a réplica Primária recebe essa chamada, ela deve criar e retornar outra OperationDataStream que contenha OperationData. OperationDatarepresenta os dados/estado que o réplica Secundário

Parâmetros:

upToSequenceNumber - O LSN (número máximo da última sequência) que deve ser colocado no fluxo de cópia por meio do getCopyStream() método . LSNs maiores que esse número são entregues à réplica Secundária como parte do fluxo de replicação por meio do getReplicationStream() método .
copyContext - Um OperationDataStream que contém os OperationData objetos criados pelo réplica Secundário. requer atualizar o fornecido

Retornos:

getLastCommittedSequenceNumber

public long getLastCommittedSequenceNumber()

Obtém o último número de sequência confirmado pelo serviço.

Retornos:

Retorna long.

onDataLossAsync

public CompletableFuture onDataLossAsync(CancellationToken cancellationToken)

Indica que um quorum de gravação de réplicas neste conjunto de réplica foi perdido e, portanto, a perda de dados pode ter ocorrido. O conjunto de réplica consiste na maioria das réplicas, que inclui o réplica Primário.

Observações:Quando o runtime do Service Fabric observa a falha de um quorum de réplicas, que inclui o réplica Primário, elege um novo réplica Primário e chama imediatamente esse método na nova réplica Primária. Um réplica Primário que é informado de uma possível perda de dados pode optar por restaurar seu estado de alguma fonte de dados externa ou pode continuar a ser executado com o estado que ele tem atualmente. Se o serviço continuar a ser executado com seu estado atual, ele deverá retornar false desse método, o que indica que nenhuma alteração de estado foi feita. Se tiver restaurado ou alterado seu estado, como reverter o trabalho incompleto, ele deverá retornar true. Se true for retornado, o estado em outras réplicas deverá ser considerado incorreto. Portanto, o runtime do Service Fabric remove as outras réplicas do conjunto de réplica e as recria.

Parâmetros:

cancellationToken -

CancellationTokenpara indicar o status de cancelamento da operação.

Retornos:

Retorna CompletableFuture do tipo java.lang.Boolean, que indica se o provedor de estado como parte do processamento dessa notificação alterou seu estado

updateEpochAsync

public CompletableFuture updateEpochAsync(Epoch epoch, SequenceNumber previousEpochLastSequenceNumber, CancellationToken cancellationToken)

Indica a um réplica que a configuração de um conjunto de réplica foi alterada devido a uma alteração ou tentativa de alteração no réplica Primário. A alteração ocorre devido à falha ou ao balanceamento de carga da réplica Primária anterior. As alterações de época atuam como uma barreira segmentando as operações nos períodos exatos de configuração em que foram enviadas por um réplica primário específico.

Observações:As informações no updateEpochAsync(Epoch epoch, SequenceNumber previousEpochLastSequenceNumber, CancellationToken cancellationToken) método permitem que o serviço mantenha um vetor de progresso, que é uma lista de cada época que o réplica recebeu e o LSN máximo que eles continham. Os dados de vetor de progresso, juntamente com o LSN máximo aplicado atual, são úteis para um réplica secundário enviar durante a operação de cópia para descrever o estado do réplica. Comparar vetores de progresso recebidos de réplicas secundárias durante a operação de cópia permite que réplicas primárias determinem se a réplica Secundária está atualizada, qual estado deve ser enviado para o réplica Secundário e se a réplica Secundária fez um progresso falso. O progresso falso significa que um réplica secundário relata que um LSN em uma época anterior era maior que o LSN que a réplica Primária tem em seu vetor de progresso.

Parâmetros:

epoch - O novo Epoch.
previousEpochLastSequenceNumber - O LSN (número máximo de sequência) na época anterior.
cancellationToken -

CancellationTokenpara indicar o status de cancelamento da operação.

Retornos:

Retorna CompletableFuture.

Aplica-se a