Этап 2. (a) Если предлагающий получает ответ на свои запросы подготовки (пронумерованные n) от большинства акцепторов, то он отправляет запрос принятия каждому из этих акцепторов для предложения, пронумерованного n со значением v, где v - значение предложения с наибольшим номером среди ответов или любое значение, если в ответах не было предложений.
Как упоминалось в статье,
Претендент выдает предложение, отправляя некоторому набору акцепторов запрос о принятии предложения. (Это не обязательно должен быть тот же набор приемников, которые ответили на первоначальные запросы.) "
Но, как я понимаю, если мы изменим Фазу 2 (а) на:
Если предлагающий получает ответ на свои запросы на подготовку (пронумерованные n) от большинства принимающих, то он отправляет запрос на принятие предложения произвольному набору большинства принимающих. пронумерованный n со значением v, где v - значение предложения с наибольшим номером среди ответов, или любое значение, если в ответах не было предложений.
алгоритм не сработает, следующий пример. Учтите, что всего существует 3 акцептора ABC. Мы будем использовать X (n: v, m) для обозначения статуса акцептора X: предложение n: v - это предложение с наибольшим номером, принятое X, где n - номер предложения, v - значение предложения, а m - номер самого большого пронумерованного запроса на подготовку, на который X когда-либо ответил.
- P1 отправляет «подготовить 1» к AB
- Оба AB отвечают P1 обещанием не принимать запросы с номерами меньше 1. Теперь статус: A (-: -, 1) B (-: -, 1) C (-: -, -)
- P1 получает ответы, затем застревает и работает очень медленно
- P2 отправляет команду AB «приготовить 100»
- Оба AB отвечают P2, обещая не принимать запросы с номерами меньше 100. Теперь статус: A (-: -, 100) B (-: -, 100) C (-: -, -)
- P2 получает ответы, выбирает значение b и отправляет BC accept 100: b.
- BC принимает и принимает запрос принятия, статус: A (-: -, 100) B (100: b, 100) C (100: b, -). Обратите внимание, что было выбрано предложение 100: b.
- P1 возобновляет работу, выбирает значение a и отправляет «accept 1: a» в BC
- B не принимает это, но C принимает это, потому что C никогда ничего не обещал. Статус: A (-: -, 100) B (100: b, 100) C (1: a, -). Выбранное предложение - отказаться, Paxos терпит неудачу.
Я что-то здесь пропустил? Спасибо.