@Override public TabletMetadata next() { long sleepTime = 250; TabletMetadata currTablet = null; while (currTablet == null) { TabletMetadata tmp = source.next(); if (prevTablet == null) { if (tmp.sawPrevEndRow()) { currTablet = tmp; } else { log.warn("Tablet has no prev end row " + tmp.getTableId() + " " + tmp.getEndRow()); } } else if (goodTransition(prevTablet, tmp)) { currTablet = tmp; } if (currTablet == null) { sleepUninterruptibly(sleepTime, TimeUnit.MILLISECONDS); resetSource(); sleepTime = Math.min(2 * sleepTime, 5000); } } prevTablet = currTablet; return currTablet; } }
static Iterable<TabletMetadata> convert(Scanner input, EnumSet<FetchedColumns> fetchedColumns, boolean checkConsistency, boolean buildKeyValueMap) { Range range = input.getRange(); Function<Range,Iterator<TabletMetadata>> iterFactory = r -> { synchronized (input) { input.setRange(r); RowIterator rowIter = new RowIterator(input); return Iterators.transform(rowIter, ri -> convertRow(ri, fetchedColumns, buildKeyValueMap)); } }; if (checkConsistency) { return () -> new LinkingIterator(iterFactory, range); } else { return () -> iterFactory.apply(range); } }