Resumo

  • O participante só vota sim depois de guardar estado suficiente para refazer ou desfazer sua parte; a partir daí ele perde a liberdade de escolher sozinho, mas ainda não conhece o resultado global.
  • A decisão durável do coordenador é um fato separado. Se o participante preparado não consegue encontrá-la, esperar protege melhor a atomicidade do que fabricar um desfecho local.
  • O commit coordena os gerenciadores de recursos participantes. Ele não prova que e-mail, tarefa humana, caixa eletrônico ou outro efeito externo não gerenciado ocorreu exatamente uma vez.

Depois de uma falha, um participante encontra em seu log um registro prepare forçado. O trabalho local terminou, e ele se lembra de ter respondido sim. O veredito, porém, não chegou. Chamar isso de “quase commit” mistura prontidão e autoridade. O estado correto é preparado e em dúvida.

Os textos de Jim Gray sobre processamento de transações tornam essa diferença uma disciplina operacional. A primeira fase constrói a capacidade de aceitar dois resultados e restringe a ação unilateral. A segunda entrega a decisão que uma autoridade distinta tornou durável.

Preparar é registrar uma promessa

Em Notes on Data Base Operating Systems, de 1978, Gray descreve o coordenador pedindo que cada participante chegue a uma condição em que consiga refazer ou desfazer sua contribuição. Antes de responder AGREE, o participante precisa colocar as informações de UNDO e REDO em local seguro.

Antes do sim, ele ainda pode recusar e abortar. Depois, deve preservar log, locks ou versões que permitam cumprir commit e abort. O sucesso local não se transforma em conclusão global; torna-se uma obrigação condicionada.

C. Mohan, Bruce Lindsay e Ron Obermarck explicitam o limite no artigo sobre o sistema distribuído R*. O subordinado força a escrita do registro de preparo, envia YES e entra no estado prepared. A partir daí, não pode confirmar nem abortar por conta própria.

O ponto de commit está no coordenador

O coordenador reúne os votos e, quando as condições são satisfeitas, força seu registro global de commit antes de anunciar o resultado. R* chama essa escrita de ponto de commit. Portanto, o sim individual necessariamente existe antes do fato ao qual o participante terá de obedecer.

Sem essa separação, vários sucessos locais poderiam virar verdades incompatíveis. Um nó exporia alterações por interpretar seu sim como commit, enquanto outro, que falhou antes de se preparar, precisaria desfazê-las. As duas fases submetem capacidades locais a uma única decisão durável.

Até saber que todos votaram sim não concede automaticamente autoridade para decidir. Informação sobre votos e poder para estabelecer o resultado são propriedades diferentes. Recuperação significa reencontrar a decisão autêntica, não calcular a opção mais provável.

O log lembra a obrigação, não o desejo

A regra de recuperação de Gray é contida. Sem registro forçado de acordo, o participante pode abortar, pois nenhuma promessa durável saiu dele. Com o registro, deve consultar o coordenador ou outra via autorizada e executar REDO ou UNDO conforme a resposta.

Uma tela operacional precisa separar working, prepared ou in-doubt, committed e aborted. Agrupar prepared e committed como “sucesso” apaga a incerteza mais relevante. O serviço pode estar saudável, os dados locais íntegros e o desfecho global continuar desconhecido.

As evidências úteis incluem identificador da transação, coordenador ou autoridade de recuperação, horário do prepare, último contato confirmado e recursos ainda retidos. Repetir a ação comercial não resolve a primeira instância e pode duplicar justamente o efeito que se queria proteger.

Bloquear é recusar uma decisão inventada

Se o coordenador falha depois do voto sim e antes de o participante receber o desfecho, o 2PC clássico pode bloquear. Gray e Leslie Lamport partem dessa limitação em Consensus on Transaction Commit: um único coordenador conduz o caminho normal, mas sua falha pode interromper o protocolo.

A espera custa caro. Locks permanecem, capacidade fica ocupada e operações seguintes param. Mesmo assim, ela preserva duas verdades: o participante não sabe a decisão e não tem autoridade para criá-la. Presumir commit arrisca divisão; presumir abort pode contrariar um commit já durável em outro lugar.

O artigo de R* admite decisões heurísticas de operador em situações excepcionais e também alerta para a inconsistência possível. Uma escolha forçada precisa aparecer como exceção à garantia comum e exigir reconciliação. Não é uma forma oculta de tornar o 2PC não bloqueante.

A transação termina onde termina a participação

Em “The Transaction Concept: Virtues and Limitations”, Gray distingue ações protegidas de “ações reais”. Um log pode restaurar dados, mas não recolhe dinheiro já entregue, não retira e-mail recebido, não desfaz uma decisão humana nem reverte um equipamento que nunca participou da transação.

Esses efeitos exigem desenho próprio: adiá-los até depois do commit, usar chave de idempotência, registrar um pedido durável para entrega posterior ou definir compensação. Compensar é uma nova ação de negócio; não é um rollback perfeito.

Assim, o banco pode estar committed e a mensagem externa continuar pendente, duplicada ou falha. Também pode ocorrer a ação física e, depois, o banco abortar. O estado correto registra separadamente a decisão transacional e a evidência do efeito externo.

A história tem vários autores

A clareza de Gray não sustenta uma narrativa de inventor solitário. Sua própria nota histórica cita trabalhos de Ron Obermarck, Earl Jenner e Steve Weick e registra que Butler Lampson e Howard Sturgis descobriram o 2PC de forma independente. Mohan, Lindsay e Obermarck assinam o estudo e as otimizações de R*. Andreas Reuter é coautor do tratado posterior; Leslie Lamport, do trabalho sobre Paxos Commit.

Respeitar essas fronteiras deixa a contribuição de Gray mais precisa. Ele oferece uma maneira persistente de perguntar o que o sistema sabe, o que prometeu, quem pode decidir e quais consequências ainda estão fora de seu controle.

Fontes