Hello everyone, As far as I know nodes are connected in a ring. For example if i have 6 nodes, with names A, B, C, D, E, and F they can connect in ring any possible way: A-B-C-D-E-F-A, or A-F-B-E-C-D-A, etc. And if some node falls out of topology neighboring nodes must reconnect. If nodes A,B and C located in the same physical location, and D, E and F in another, and in some time one physical location is not available in another, we can get different number of reconnections. Best case scenario if we have ring like A-B-CxD-E-FxA ('x' mean disconnect) -- then we get only one reconnect (C reconnect to A or F reconnect to D -- depending on what part of the cluster we leave alive). But now possible that case AxFxBxExCxDxA -- then we get a lot of reconnections (A to B, B to C, C to A -- in general n/2 reconnections, where n -- number of nodes). And i think to add something to ensure that we always have good sorting of nodes connections (A-B-C-...-Z-A).
Of course in real world we can have multiple levels of physical closeness. In my opinion enough to add one parameter of 'int' to configuration (with name like 'ExtraNodeOrder') and to change the method of comparison nodes so that it first compared the 'ExtraNodeOrder', and then according to the old criterion (as far as I know Ignite use topology version). So if some users have multiple levels of physical closeness, he can use different bits. For example use 16 high bits for DC number, and low 16 bits for racks. Alternatively, we can add array of ‘int’ to configuration and compare nodes in sequence from the zero element to the last.