KeyAffinityService#getKeyForAddress runs in a tight loop looking for keys:
queue = address2key.get(address)
while (result == null)
result = queue.poll()
KeyAffinityService#handleViewChange clears and resets the queue list on membership change:
address2key.clear()
for each address
map.put(address, new queue)
If a view change comes in after getKeyForAddress gets the queue, and the queue is empty, it will get stuck in a tight loop looking at the wrong queue forever while new keys are added to the new queue.
This affects EAP 6 session clustering with <distributed-cache>.