/** * Calculate the missing intervals based on the subpartitions availability. * formula is: * Union(subpart availabilitiy) - Union(subpart missing intervals) * * @param constraint The filtering constraint * * @return The intervals which are available for the given constraint */ private SimplifiedIntervalList mergeAvailabilities(PhysicalDataSourceConstraint constraint) { SimplifiedIntervalList unionOfAvailableIntervals = new SimplifiedIntervalList(); SimplifiedIntervalList unionOfMissingIntervals = new SimplifiedIntervalList(); for (Availability availability : filteredAvailabilities(constraint).collect(Collectors.toSet())) { unionOfAvailableIntervals = unionOfAvailableIntervals.union(availability.getAvailableIntervals(constraint)); unionOfMissingIntervals = unionOfMissingIntervals.union( getBoundedMissingIntervalsWithConstraint(availability, constraint) ); } return unionOfAvailableIntervals.subtract(unionOfMissingIntervals); }