ackcollector.java

来自「JGRoups源码」· Java 代码 · 共 115 行

JAVA
115
字号
package org.jgroups.util;import org.jgroups.TimeoutException;import org.jgroups.View;import org.jgroups.ViewId;import java.util.ArrayList;import java.util.HashSet;import java.util.Set;import java.util.Vector;/** * @author Bela Ban * @version $Id: AckCollector.java,v 1.11 2006/10/30 11:19:20 belaban Exp $ */public class AckCollector {    /** List<Object>: list of members from whom we haven't received an ACK yet */    private final java.util.List missing_acks;    private final Set            received_acks=new HashSet();    private final Promise        all_acks_received=new Promise();    private ViewId               proposed_view;    private final Set            suspected_mbrs=new HashSet();    public AckCollector() {        missing_acks=new ArrayList();    }    public AckCollector(ViewId v, java.util.List l) {        missing_acks=new ArrayList(l);        proposed_view=v;    }    public String printMissing() {        synchronized(this) {            return missing_acks.toString();        }    }    public String printReceived() {        synchronized(this) {            return received_acks.toString();        }    }    public ViewId getViewId() {        return proposed_view;    }    public void reset(ViewId v, java.util.List l) {        synchronized(this) {            suspected_mbrs.clear();            proposed_view=v;            missing_acks.clear();            received_acks.clear();            if(l != null)                missing_acks.addAll(l);            missing_acks.removeAll(suspected_mbrs);            all_acks_received.reset();        }    }    public int size() {        synchronized(this) {            return missing_acks.size();        }    }    public void ack(Object member) {        synchronized(this) {            missing_acks.remove(member);            received_acks.add(member);            if(missing_acks.size() == 0)                all_acks_received.setResult(Boolean.TRUE);        }    }    public void suspect(Object member) {        synchronized(this) {            ack(member);            suspected_mbrs.add(member);        }    }    public void unsuspect(Object member) {        synchronized(this) {            suspected_mbrs.remove(member);        }    }    public void handleView(View v) {        if(v == null) return;        Vector mbrs=v.getMembers();        suspected_mbrs.retainAll(mbrs);    }    public boolean waitForAllAcks() {        if(missing_acks.size() == 0)            return true;        Object result=all_acks_received.getResult();        return result != null && result instanceof Boolean && ((Boolean)result).booleanValue();    }    public boolean waitForAllAcks(long timeout) throws TimeoutException {        if(missing_acks.size() == 0)            return true;        Object result=all_acks_received.getResultWithTimeout(timeout);        return result != null && result instanceof Boolean && ((Boolean)result).booleanValue();    }    public String toString() {        return "missing=" + printMissing() + ", received=" + printReceived();    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?