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

Reply via email to