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());
boolean maybeInconsistent = true; long bucketsSplit = 0, bucketsMerged = 0; long pendingBefore = progressToken.getPendingBucketCount(); ProgressToken p = progressToken; "distribution bits; performed " + bucketsSplit + " split ops and " + bucketsMerged + " merge ops. Pending: " + pendingBefore + " -> " + p.getPendingBucketCount());
|| (progress.getFinishedBucketCount() + progress.getPendingBucketCount() + progress.getActiveBucketCount() != totalBucketCount)) { throw new IllegalArgumentException("Total bucket count in existing progress is not " +
"bits: " + progressToken.getDistributionBitCount() + ", active: " + progressToken.getActiveBucketCount() + ", pending: " + progressToken.getPendingBucketCount() + ", cursor: " + progressToken.getBucketCursor() + ", finished: " + progressToken.getFinishedBucketCount() + progressToken.getPendingBucketCount()); } else { assert(progressToken.getBucketCursor() == progressToken.getTotalBucketCount());
progressToken.setPendingBucketCount(progressToken.getPendingBucketCount() - 1);