быть отменена даже после того , как все на prepare ответили положительно. Т.е например. Все ответили yes на prepare. Координатор посылает commit всем, но один из participiant не может сделать conmit. Что тогда будет? Может ли координатор сказать ,что теперь делаем abort ?
Насколько я помню — нет, не допускает. Т.е. этот participiant больше не может participate после такого (и так может быть, конечно). А так — ведь где-то было подробное описание протокола, т.е. действий в каждом состоянии (если действительно интересно, можете его найти).
2pc - двух фазный комит?
Зачем бы тогда он нужен то был...
Я думал — затем, чтобы обеспечить durability. Может, я и путаю, но тогда после этого получится "заклиненный" кластер.
да. это про него.
а что значит зачем бы он тогда был нужен?
Ну я имел в виду, что я бы думал, что надо иметь возможность откатывать транзакцию. Надо найти материалы и прочитать.
там так получается, что если такое допустить, то participiant тогда будет вынужден уметь откатывать закомиченную транзакцию. например есть 2 participiant - "A" ,"B". Координатор спрашивает их - Prepare. Каждый из них говорит, что готов. Координатор их получает и шлет теперь всем commit. Скажем "A" закомител и сказал ack. второй же, который - "B" не смог по какой-то причине. Если вот тут допустить, что координатор может сказать и "A" откатить транзакцию (Т.к "B" не смог сделать commit), то этот participiant "A" должен откатить уже закомиченную транзакцию. Это может быть сложным. Например кто-то уже смог залочить данные и в целом не понятно как откатывать уже закомиченые транзакции.
> что координатор может сказать и "A" откатить транзакцию Нет, этого он сказать не может. > то этот participiant "A" должен откатить уже закомиченную транзакцию Именно по этой причине, да.
Я посмотрел в Википедии, вроде координатор может откатить только до начала второй фазы.
Ну так я это и написал.
Да, ты был прав
Обсуждают сегодня