IStateReplicator.ReplicateAsync Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Replica as alterações de estado do réplica Primário para as réplicas secundárias e recebe uma confirmação de quorum de que essas alterações de estado foram aplicadas.
public System.Threading.Tasks.Task<long> ReplicateAsync (System.Fabric.OperationData operationData, System.Threading.CancellationToken cancellationToken, out long sequenceNumber);
abstract member ReplicateAsync : System.Fabric.OperationData * System.Threading.CancellationToken * int64 -> System.Threading.Tasks.Task<int64>
Public Function ReplicateAsync (operationData As OperationData, cancellationToken As CancellationToken, ByRef sequenceNumber As Long) As Task(Of Long)
Parâmetros
- operationData
- OperationData
O OperationData que representa a alteração de estado que a réplica Primária deseja replicar.
- cancellationToken
- CancellationToken
Um quorum de gravação de réplicas que foram perdidas. Ele pode ser usado para enviar uma notificação de que a operação deve ser cancelada. Observe que o cancelamento é um aviso e que a operação ainda pode ser concluída mesmo se for cancelada.
- sequenceNumber
- Int64
Long, o LSN da operação. Observe que esse é o mesmo valor retornado pela tarefa. Fornecê-lo como um parâmetro out é útil para serviços que desejam preparar a gravação local para confirmar quando a tarefa for concluída.
Retornos
Retorna Task<TResult> do tipo long, o LSN da operação.
Exceções
Causado por um dos seguintes:
E_INVALIDARG é retornado quando um ou mais argumentos não são válidos.
FabricTransientException é uma exceção retriável. Ele é causado por um dos seguintes;
NoWriteQuorum é retornado quando o replicador não tem quorum de gravação no momento.
ReconfigurationPending é retornado quando o replicador tem uma reconfiguração pendente.
ReplicationQueueFull é retornado quando a fila do replicador está cheia.
FabricNotPrimaryException é causado por um dos seguintes;
NotPrimary é retornado quando o replicador tem uma reconfiguração pendente.
FabricObjectClosedException é causado por um dos seguintes;
ObjectClosed é retornado quando o replicador é fechado.
OperationCanceledException é causado por um dos seguintes;
E_ABORT quando o replicador cancela uma operação de replicação em andamento.
Comentários
A replicação no réplica Primário produz os objetos que implementam IOperation que o réplica Secundário obtém do Fluxo de Replicação por meio GetReplicationStream()de , que é seguido por GetOperationAsync(CancellationToken).
O réplica Primário tem muitas tarefas relacionadas às atualizações de estado do processo. As etapas a seguir mostram a sequência geral de eventos que um réplica Primário deve manipular para replicar e reconhecer uma alteração.
Parte 1: Manipulando solicitações de entrada: Solicitação de recebimento: Write(x) – O serviço recebe uma solicitação de gravação, x. CheckArguments – o serviço verifica os argumentos da solicitação. Essa marcar ajuda a garantir a consistência do estado do serviço.
Verificar o estado atual – o serviço examina seu estado atual para garantir que a operação seja válida e possa ou deva ser executada. Esse marcar também ajuda a garantir a consistência dos dados. Ele é executado pelo código do serviço.
Adquirir bloqueios – o serviço deve adquirir os bloqueios necessários para impedir que operações adicionais ocorram ao mesmo tempo. Essa operação ajuda a garantir o isolamento e a consistência.
Operação de tentativa (opcional) – o serviço pode tentar a operação localmente. Esta etapa reserva e aloca espaço e executa todos os cálculos necessários. Esta etapa inclui tudo, exceto o commit real do resultado. Essa operação melhora a durabilidade da operação e torna as falhas posteriores muito improváveis.
Fabricação do OperationData – Um OperationData objeto é a representação do Write(x) que foi apresentado ao serviço. O OperationData objeto contém a alteração de estado a ser transferida com a confirmação do réplica Primário para as réplicas secundárias. Os dados que o serviço coloca no OperationData definem a atualização atômica que o FabricReplicator transfere para as réplicas secundárias. Observe que a criação do OperationData objeto requer uma ou mais matrizes de bytes. O serviço deve determinar e serializar a alteração no estado e, em seguida, fornecer esse conjunto de bytes para o FabricReplicator por meio de ReplicateAsync(OperationData, CancellationToken, Int64). O serviço envia a operação para o FabricReplicator e recebe um LSN (número de sequência lógica) em troca. O LSN é a identidade da operação e ajuda o serviço e o Service Fabric a garantir que as operações sejam sempre aplicadas na mesma ordem em todos os lugares. O serviço deve registrar o OperationData junto com seu LSN em uma lista ordenada de operações em andamento. Isso garante que, quando as operações forem concluídas, elas possam ser aplicadas consistentemente na ordem correta.
Bloqueios de versão – continue processando ou aguardando solicitações adicionais.
Parte 2: concluindo solicitações e respondendo: a réplica Primária recebe um retorno de chamada que indica que a operação foi aplicada. ReplicateAsync foi concluído. Esse retorno de chamada indica que a operação foi confirmada por um quorum das réplicas no conjunto de réplica. Quando o réplica Primário recebe esse retorno de chamada, ele deve executar as seguintes ações:
Localize a operação correspondente indicada pelo LSN longo retornado de ReplicateAsync na lista em andamento do serviço e marque-a como "QuorumAck'd".
Agora, começando na primeira operação na lista em andamento, percorra a lista e confirme localmente todas as operações do QuorumAck'd, conclua as alterações no estado local e marque as alterações de estado com o LSN correspondente até que a primeira operação incompleta seja encontrada. Isso garante que a ordenação seja preservada (consistência) e que as operações sejam realmente aplicadas. Isso aproveita as preparações anteriores de durabilidade e isolamento. Observação: a maioria dos serviços deve armazenar em cache o último valor LSN confirmado para que as GetLastCommittedSequenceNumber() respostas ao não exijam consultar o repositório real para o maior LSN.
Quando uma operação é confirmada com êxito na réplica Primária, a réplica Primária agora pode responder ao cliente que iniciou a chamada e remover a operação da lista em andamento. Continue aguardando o próximo retorno de chamada de confirmação de quorum.
Aplica-se a
Azure SDK for .NET