mutiny.zero.internal.BufferingTube Maven / Gradle / Ivy
package mutiny.zero.internal;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingDeque;
import org.reactivestreams.Subscriber;
public class BufferingTube extends BufferingTubeBase {
private final LinkedBlockingDeque overflowQueue;
public BufferingTube(Subscriber super T> subscriber, int bufferSize) {
super(subscriber, bufferSize);
overflowQueue = new LinkedBlockingDeque<>(bufferSize);
}
@Override
Queue overflowQueue() {
return overflowQueue;
}
@Override
protected void handleItem(T item) {
if (outstandingRequests() > 0L) {
dispatchQueue.offer(item);
drainLoop();
} else if (!overflowQueue.offer(item)) {
fail(new IllegalStateException(
"The following item cannot be propagated because there is no demand and the overflow buffer is full: "
+ item));
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy