in lagerta-core/src/main/java/com/epam/lagerta/subscriber/lead/ReadTransactions.java [186:214]
private static Set<UUID> mergeWithDeduplication(List<ReaderTxScope> scopes, List<ReaderTxScope> mergedBuffer,
Comparator<ReaderTxScope> comparator, Set<UUID> lostReaders) {
Set<UUID> diedReaders = new HashSet<>();
ListIterator<ReaderTxScope> firstIter = scopes.listIterator();
Iterator<ReaderTxScope> secondIter = mergedBuffer.iterator();
ReaderTxScope a = getNext(firstIter);
ReaderTxScope b = getNext(secondIter);
while (a != null && b != null) {
int cmp = comparator.compare(a, b);
if (cmp > 0) {
firstIter.previous();
firstIter.add(b);
firstIter.next();
b = getNext(secondIter);
} else if (cmp < 0) {
a = getNext(firstIter);
} else if (lostReaders.contains(a.getReaderId())) {
diedReaders.add(a.getReaderId());
a = getNext(firstIter);
}
}
while (b != null) {
firstIter.add(b);
b = getNext(secondIter);
}
return diedReaders;
}