findepi commented on code in PR #10691:
URL: https://github.com/apache/iceberg/pull/10691#discussion_r1678859403
##########
core/src/main/java/org/apache/iceberg/util/ParallelIterable.java:
##########
@@ -192,4 +209,65 @@ public synchronized T next() {
return queue.poll();
}
}
+
+ private static class Task<T> implements Callable<Optional<Task<T>>>,
Closeable {
+ private final Iterable<T> input;
+ private final ConcurrentLinkedQueue<T> queue;
+ private final AtomicBoolean closed;
+ private final int approximateMaxQueueSize;
+
+ private Iterator<T> iterator;
+
+ Task(
+ Iterable<T> input,
+ ConcurrentLinkedQueue<T> queue,
+ AtomicBoolean closed,
+ int approximateMaxQueueSize) {
+ this.input = Preconditions.checkNotNull(input, "input cannot be null");
+ this.queue = Preconditions.checkNotNull(queue, "queue cannot be null");
+ this.closed = Preconditions.checkNotNull(closed, "closed cannot be
null");
+ this.approximateMaxQueueSize = approximateMaxQueueSize;
+ }
+
+ @Override
+ public Optional<Task<T>> call() throws Exception {
+ try {
+ if (iterator == null) {
+ iterator = input.iterator();
+ }
+ while (iterator.hasNext()) {
+ if (queue.size() >= approximateMaxQueueSize) {
+ // yield
+ return Optional.of(this);
Review Comment:
That's a good explanation, thank you @dekimir !
> re-submitting the task
Worth noting that it's impl detail of the Task class that this is the same
task.
It could be something else. It's just "a continuation". The task says "i did
what i did, i am giving up now, and here, in the return value is the
continuation that will do the rest of the work".
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]