public boolean hasNext() { return progressToken.getBucketCursor() < (1L << distributionBitCount); }
private void correctTruncatedBucketCursor() { // We've truncated the bucket cursor, but in doing so we might // have moved back beyond where there are pending buckets. Consider // having a cursor value of 3 at 31 bits and then moving to 11 bits. // With 1 pending we'll normally reach a cursor of 0, even though it // should be 1 for (ProgressToken.BucketKeyWrapper bucketKey : progressToken.getBuckets().keySet()) { BucketId bid = bucketKey.toBucketId(); long idx = bucketKey.getKey() >>> (64 - bid.getUsedBits()); if (bid.getUsedBits() == distributionBitCount && idx >= progressToken.getBucketCursor()) { progressToken.setBucketCursor(idx + 1); } } if (log.isLoggable(LogLevel.SPAM)) { log.log(LogLevel.SPAM, "New range bucket cursor is " + progressToken.getBucketCursor()); } }
protected boolean isLosslessResetPossible() { // #pending must be equal to cursor, i.e. all buckets ever fetched // must be located in the set of pending if (progressToken.getPendingBucketCount() != progressToken.getBucketCursor()) { return false; } // Check if all pending buckets have a progress of 0 for (Map.Entry<ProgressToken.BucketKeyWrapper, ProgressToken.BucketEntry> entry : progressToken.getBuckets().entrySet()) { if (entry.getValue().getState() != ProgressToken.BucketState.BUCKET_PENDING) { return false; } if (entry.getValue().getProgress().getId() != 0) { return false; } } return true; }
if (progressToken.getPendingBucketCount() <= progressToken.getBucketCursor()) { progressToken.setFinishedBucketCount(progressToken.getBucketCursor() - progressToken.getPendingBucketCount());
progressToken.setBucketCursor(progressToken.getBucketCursor() << delta); } else if (delta < 0) { if (log.isLoggable(LogLevel.DEBUG)) { progressToken.setBucketCursor(progressToken.getBucketCursor() >>> -delta); progressToken.setFinishedBucketCount(progressToken.getFinishedBucketCount() >>> -delta);
", active: " + progressToken.getActiveBucketCount() + ", pending: " + progressToken.getPendingBucketCount() + ", cursor: " + progressToken.getBucketCursor() + ", finished: " + progressToken.getFinishedBucketCount() + ", total: " + progressToken.getTotalBucketCount()); "from position " + progressToken.getBucketCursor()); progressToken.setFinishedBucketCount(progressToken.getBucketCursor() - progressToken.getPendingBucketCount()); } else { assert(progressToken.getBucketCursor() == progressToken.getTotalBucketCount());
public BucketProgress getNext() { assert(hasNext()) : "getNext() called with hasNext() == false"; long currentPosition = progressToken.getBucketCursor(); long key = ProgressToken.makeNthBucketKey(currentPosition, distributionBitCount); ++currentPosition; progressToken.setBucketCursor(currentPosition); return new BucketProgress( new BucketId(ProgressToken.keyToBucketId(key)), new BucketId()); }
"consistent with that of the current document selection"); if (progress.getBucketCursor() != 0) {