This is an automated email from the ASF dual-hosted git repository. mblow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 695c4d7bbe006c49263bbf96b12c41cc387712c8 Author: Murtadha Hubail <[email protected]> AuthorDate: Thu Jan 9 05:02:06 2020 +0300 [NO ISSUE][NET] Ensure Channel Was Not Recycled Before Adding Credit - user model changes: no - storage format changes: no - interface changes: no Details: - Before attempting to add credit to an existing channel, ensure the channel slot was not recycled and reused by a new channel. Without this, some additional credit might erroneously be added to the new channel. Change-Id: I0a5ec70ad4c2568477fac9eb98c030fc3d8b1ce9 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/4623 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Michael Blow <[email protected]> Contrib: Michael Blow <[email protected]> --- .../apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java | 2 +- .../java/org/apache/hyracks/net/protocols/muxdemux/ChannelSet.java | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java index 75d442f..f7b4fbd 100644 --- a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java +++ b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelControlBlock.java @@ -144,7 +144,7 @@ public class ChannelControlBlock implements IChannelControlBlock { @Override public void addPendingCredits(int credit) { - cSet.addPendingCredits(channelId, credit); + cSet.addPendingCredits(this, credit); } @Override diff --git a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelSet.java b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelSet.java index f5cdf2c..7784fc4 100644 --- a/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelSet.java +++ b/hyracks-fullstack/hyracks/hyracks-net/src/main/java/org/apache/hyracks/net/protocols/muxdemux/ChannelSet.java @@ -140,13 +140,15 @@ public class ChannelSet { } } - void addPendingCredits(int channelId, int delta) { + void addPendingCredits(ChannelControlBlock targetCcb, int delta) { if (delta <= 0) { return; } synchronized (mConn) { + final int channelId = targetCcb.getChannelId(); ChannelControlBlock ccb = ccbArray[channelId]; - if (ccb != null) { + // ensure the channel slot id was not recycled and used for a diffierent channel + if (ccb == targetCcb) { if (ccb.getRemoteEOS()) { return; }
