[ https://issues.apache.org/jira/browse/FLINK-7456?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16324465#comment-16324465 ]
ASF GitHub Bot commented on FLINK-7456: --------------------------------------- Github user NicoK commented on a diff in the pull request: https://github.com/apache/flink/pull/4552#discussion_r161247589 --- Diff: flink-runtime/src/main/java/org/apache/flink/runtime/io/network/netty/SequenceNumberingViewReader.java --- @@ -77,6 +92,46 @@ void requestSubpartitionView( } } + /** + * The credits from consumer are added in incremental way. + * + * @param creditDeltas The credit deltas + */ + public void addCredit(int creditDeltas) { + numCreditsAvailable += creditDeltas; + } + + /** + * Updates the value to indicate whether the reader is enqueued in the pipeline or not. + * + * @param isRegisteredAvailable True if this reader is already enqueued in the pipeline. + */ + public void notifyAvailabilityChanged(boolean isRegisteredAvailable) { + this.isRegisteredAvailable = isRegisteredAvailable; + } + + public boolean isRegisteredAvailable() { + return isRegisteredAvailable; + } + + /** + * Check whether this reader is available or not. + * + * <p>Return true only if the next buffer is event or the reader has both available + * credits and buffers. + */ + public boolean isAvailable() { + if (numBuffersAvailable.get() <= 0) { + return false; + } + + if (subpartitionView.nextBufferIsEvent() || numCreditsAvailable > 0) { --- End diff -- how about checking `numCreditsAvailable` first since that's the cheaper check? > Implement Netty sender incoming pipeline for credit-based > --------------------------------------------------------- > > Key: FLINK-7456 > URL: https://issues.apache.org/jira/browse/FLINK-7456 > 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. > On sender side, each subpartition view maintains an atomic integer > {{currentCredit}} from receiver. Once receiving the messages of > {{PartitionRequest}} and {{AddCredit}}, the {{currentCredit}} is added by > deltas. > Each view also maintains an atomic boolean field to mark it as registered > available for transfer to make sure it is enqueued in handler only once. If > the {{currentCredit}} increases from zero and there are available buffers in > the subpartition, the corresponding view will be enqueued for transferring > data. -- This message was sent by Atlassian JIRA (v6.4.14#64029)