void (@NotNull TimestampGetter timestampGetter, @NotNull BekEdgeRestrictions edgeRestrictions) { assert myPrepareForInsertPart == null; int currentNode = myNodeIndexes.get(myNoInsertSize - 1); if (edgeRestrictions.hasRestriction(currentNode)) return; int prevIndex; for (prevIndex = myNoInsertSize - 1; prevIndex > 0; prevIndex--) { int upNode = myNodeIndexes.get(prevIndex - 1); int downNode = myNodeIndexes.get(prevIndex); // for correct topological order if (edgeRestrictions.hasRestriction(upNode)) break; // upNode is mergeCommit List<Integer> downNodes = getDownNodes(myPermanentGraph, upNode); if (downNodes.size() > 1 && downNodes.contains(downNode)) continue; // division if (!downNodes.contains(downNode)) break; long delta = Math.abs(timestampGetter.getTimestamp(upNode) - timestampGetter.getTimestamp(downNode)); // long time between commits if (delta > MAX_DELTA_TIME) break; // if block so long if (prevIndex < myNoInsertSize - MAX_BLOCK_SIZE && delta > SMALL_DELTA_TIME) break; } myPrepareForInsertPart = myNodeIndexes.subList(prevIndex, myNoInsertSize); }