private void onSessionEnd(Session session) { listeners.remove(session.sessionId().id()); Set<PartitionId> partitions = elections.keySet(); partitions.forEach(partitionId -> { PrimaryTerm oldTerm = term(partitionId); elections.compute(partitionId, (k, v) -> v.cleanup(session)); PrimaryTerm newTerm = term(partitionId); if (!Objects.equals(oldTerm, newTerm)) { notifyTermChange(partitionId, newTerm); scheduleRebalance(); } }); }