Guys, Some time ago we removed FairAffinityFunction from the project. However, my communication with users clearly shows that is was a rush decision. Distribution showed by Fair AF is much better than default and for some users it's extremely important. Basically, there are cases when rendezvous function is no-go.
The reason for removal was that it was possible to get inconsistent results in case multiple caches were created on different topologies. However, I think this is fixable. As far as I understand, the only thing we need to do is to maintain a single AffinityFunctionContext for all the caches with same affinity function. Currently for each cache we have separate context which holds the state used by Fair AF. If the state is different, we have an issue. The only question is how to check whether two functions are the same or not. In case both cache node filter and backup filter are not configured, this is easy - if number of partitions and excludeNeighbors flag are equal for two functions, these functions are also equal. With filters it's a bit more complicated as these are custom implementations and in general case we don't know how to compare them. Although, to solve this problem, we can enforce user to implement equals() method for these implementation if Fair AF is used. I propose to make changes described above and bring Fair AF back. Thoughts? -Val