[
https://issues.jboss.org/browse/JGRP-1901?page=com.atlassian.jira.plugin....
]
Bela Ban commented on JGRP-1901:
--------------------------------
Thinking about this, I don't think that installing a view via 2PC is a good idea, that
is in JGroups (might make more sense in Infinispan).
In JGroups, it is perfectly OK to install view [A,B,C] (C is partitioned away, but
hasn't yet been suspected) before installing [A,B].
Waiting for C to ack the view leads to questions about how long we need to wait etc. For
example, in a large cluster with (say) 500 nodes, if we need to install a new view, the
chances of receiving acks from 500 nodes in a resonable amount of time are decreasing with
increasing cluster size. A node might be garbage collection, its thread pool is busy and
discards the message (which is later retransmited), some nodes failed etc.
This could lead to an excessively long wait until we install a new view. All RPCs
depending on speedy view installation (to remove failed nodes) would block until the new
view is finally installed.
Use of 2PC would also make the code more complex.
Note that I changed the title from consensus to 2PC.
GMS: view installation by consensus
-----------------------------------
Key: JGRP-1901
URL:
https://issues.jboss.org/browse/JGRP-1901
Project: JGroups
Issue Type: Feature Request
Reporter: Bela Ban
Assignee: Bela Ban
Fix For: 3.6.2
Investigate whether view installation should optionally be done via 2PC. Example:
* View is A,B,C,D, splits into A,B and C,D
* Before AB is installed in A and B, view A,B,C is installed
** (C hasn't been suspected yet. This can happen with {{FD}})
Infinispan's rebalancing algorithm has problems with this, as it tries to assign
state to C which however isn't reachable from the A,B side of the network partition.
It would be better if A,B,C,D went directly to A,B and C,D
Investigate whether we should add a property to {{GMS}} which defines whether to use 2PC
for view installation (default would be {{false}}). The algorithm would work as follows:
* Send a {{PREPARE_VIEW(view)}} message
* When all responses have been received -> send a {{COMMIT_VIEW}} message
* Else
** Inject SUSPECT(C) event for all misisng acks OR
** Set a timer to go off in N ms -> when it fires, send the {{COMMIT_VIEW}} msg
** If another view is installed before the tmer goes off (e.g. A,B) -> kill the timer
--
This message was sent by Atlassian JIRA
(v6.3.11#6341)