[ https://issues.apache.org/jira/browse/FLINK-7468?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16269115#comment-16269115 ]
ASF GitHub Bot commented on FLINK-7468: --------------------------------------- Github user NicoK commented on a diff in the pull request: https://github.com/apache/flink/pull/4559#discussion_r153564859 --- Diff: flink-runtime/src/main/java/org/apache/flink/runtime/io/network/partition/ResultSubpartitionView.java --- @@ -22,32 +22,52 @@ import java.io.IOException; +import static org.apache.flink.util.Preconditions.checkNotNull; + /** * A view to consume a {@link ResultSubpartition} instance. */ -public interface ResultSubpartitionView { +public abstract class ResultSubpartitionView { + + /** The parent subpartition this view belongs to. */ + private final ResultSubpartition parent; + + public ResultSubpartitionView(ResultSubpartition parent) { + this.parent = checkNotNull(parent); + } /** * Returns the next {@link Buffer} instance of this queue iterator. - * <p> - * If there is currently no instance available, it will return <code>null</code>. + * + * <p>If there is currently no instance available, it will return <code>null</code>. * This might happen for example when a pipelined queue producer is slower * than the consumer or a spilled queue needs to read in more data. - * <p> - * <strong>Important</strong>: The consumer has to make sure that each + * + * <p><strong>Important</strong>: The consumer has to make sure that each * buffer instance will eventually be recycled with {@link Buffer#recycle()} * after it has been consumed. */ - Buffer getNextBuffer() throws IOException, InterruptedException; + public Buffer getNextBuffer() throws IOException, InterruptedException { + Buffer buffer = getNextBufferInternal(); + if (buffer != null) { + parent.decreaseStatistics(buffer); + } + return buffer; + } + + public int getBuffersInBacklog() { + return parent.getBuffersInBacklog(); + } - void notifyBuffersAvailable(long buffers) throws IOException; + protected abstract Buffer getNextBufferInternal() throws IOException, InterruptedException; --- End diff -- please add a javadoc with the intended relation to `getNextBuffer` > Implement sender backlog logic for credit-based > ----------------------------------------------- > > Key: FLINK-7468 > URL: https://issues.apache.org/jira/browse/FLINK-7468 > Project: Flink > Issue Type: Sub-task > Components: Network > Reporter: zhijiang > Assignee: zhijiang > Fix For: 1.5.0 > > > This is a part of work for credit-based network flow control. > Receivers should know how many buffers are available on the sender side (the > backlog). The receivers use this information to decide how to distribute > floating buffers. > The {{ResultSubpartition}} maintains the backlog which only indicates the > number of buffers in this subpartition, not including the number of events. > The backlog is increased for adding buffer to this subpartition, and > decreased for polling buffer from it. > The backlog is attached in {{BufferResponse}} by sender as an absolute value > after the buffer being transferred. -- This message was sent by Atlassian JIRA (v6.4.14#64029)