I - CORRETO: Essa é a idéia básica do two-phase commit(2PC), confirmar apenas se todos estiverem de acordo.
II - CORRETO: Uma das premissas do 2PC é que existe um coordenador da transação distribuída que irá se comunicar com os demais nós a respeito da confirmação da transação, se apenas um deles disser que não a transação será abortada, do contrário, se o coordenador obtiver apenas confirmações positivas a transação será confirmada(commit) e os demais nós serão avisados pelo coordenador para persistência da mesma em memória estável
III - CORRETO: Na primeira fase os nós coordenados preparam o envio da mensagem para o coordenador se é possível efetivar a transação. Durante a segunda fase o coordenador já recebeu a informação de todos os nós sobre a efetivação da transação e ele irá decidir se enviará um commit(caso todas as confirmações sejam positivas sobre a efetivação da transação) ou abort(caso pelo menos uma confirmação seja negativa)
COMMIT EM DUAS FASES
1ª Fase: todos os nós participantes da transação sinalizam ao coordenador que sua parte da transação foi realizada. O coordenador envia uma mensagem preparar “para commit”. Cada nó fará uma gravação forçada em disco de todos os registros de log e informações necessárias para recuperação local, e em seguida envia um sinal “OK” ao coordenador, caso contrário envia um sinal “não OK”. Na falta de uma resposta o coordenador considera o nó “não OK”.
2ª Fase: se todos os nós respondem “OK’ e o voto do coordenador também for “OK”, a transação foi bem sucedida e o coordenador envia um sinal “commit” para os nós, caso contrário, a transação falhou e o coordenador envia uma mensagem para “rollback”. Neste caso a transação será desfeita utilizando-se os arquivos de log.
COMMIT EM TRÊS FASES
1ª Fase: o coordenador envia uma mensagem “canCommit” para os nós e passa para o estado “waiting”. Os nós respondem com “OK” ou “não OK”.
2ª Fase: se o coordenador receber alguma mensagem “não OK” a transação é abortada e manda a mensagem “abort” para os nós que passam para o estado “abort”. Caso contrário o coordenador envia a mensagem “preCommit” para os nós e estes passam para o estado “prepared”.
3ª Fase: o coordenador recebe o “OK” de todos os nós e todos passam para o estado “commit”, caso contrário aborta a transação