Этап 2. (а) Если разработчик получает ответ от своих запросов на подготовку (нумерованный n) от большинства акцепторов, он отправляет запрос-прием каждому из этих акцепторов для предложения с номером n со значением v, где v - значение предложения с наивысшим номером среди ответов, или любое значение, если ответы не сообщают о каких-либо предложениях.
Как упоминалось в статье,
Заявитель выдает предложение, отправив некоторому набору акцепторов запрос о принятии этого предложения. ( Это не должен быть тот же набор акцепторов, который ответил на начальные запросы.) "
Но, как я понимаю, если мы изменим Фазу 2. (a) на:
Если разработчик получает ответ от своих запросов на подготовку (нумерованный n) от большинства акцепторов, он отправляет запрос accept на произвольный набор мажоритарных акцепторов для предложения с номером 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 отправляет 'подготовку 100' к AB
- Оба AB отвечают на P2 с обещанием не принимать запрос с номером меньше 100. Теперь статус: A (-: -, 100) B (-: -, 100) C (-: -, -)
- P2 принимает ответы, выбирает значение b и отправляет "принимать 100: b" в BC
- BC принимает и принимает запрос accept, статус: 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 терпит неудачу.
Я что-то пропустил? Спасибо.