discard.java
来自「JGRoups源码」· Java 代码 · 共 139 行
JAVA
139 行
// $Id: DISCARD.java,v 1.10 2005/08/24 13:12:04 belaban Exp $package org.jgroups.protocols;import org.jgroups.Address;import org.jgroups.Event;import org.jgroups.Message;import org.jgroups.stack.Protocol;import java.util.Properties;import java.util.Vector;import java.util.Map;import java.util.HashMap;/** * Discards up or down messages based on a percentage; e.g., setting property 'up' to 0.1 causes 10% * of all up messages to be discarded. Setting 'down' or 'up' to 0 causes no loss, whereas 1 discards * all messages (not very useful). */public class DISCARD extends Protocol { final Vector members=new Vector(); double up=0.0; // probability of dropping up msgs double down=0.0; // probability of dropping down msgs boolean excludeItself=false; //if true don't discard messages sent/received in this stack Address localAddress; int num_down=0, num_up=0; /** * All protocol names have to be unique ! */ public String getName() { return "DISCARD"; } public boolean setProperties(Properties props) { String str; super.setProperties(props); str=props.getProperty("up"); if(str != null) { up=Double.parseDouble(str); props.remove("up"); } str=props.getProperty("down"); if(str != null) { down=Double.parseDouble(str); props.remove("down"); } str=props.getProperty("excludeitself"); if(str != null) { excludeItself=Boolean.valueOf(str).booleanValue(); props.remove("excludeitself"); } if(props.size() > 0) { log.error("DISCARD.setProperties(): these properties are not recognized: " + props); return false; } return true; } public void up(Event evt) { Message msg; double r; if(evt.getType() == Event.SET_LOCAL_ADDRESS) localAddress=(Address)evt.getArg(); if(evt.getType() == Event.MSG) { msg=(Message)evt.getArg(); if(up > 0) { r=Math.random(); if(r < up) { if(excludeItself && msg.getSrc().equals(localAddress)) { if(log.isTraceEnabled()) log.trace("excluding itself"); } else { if(log.isTraceEnabled()) log.trace("dropping message"); num_up++; return; } } } } passUp(evt); } public void down(Event evt) { Message msg; double r; if(evt.getType() == Event.MSG) { msg=(Message)evt.getArg(); if(down > 0) { r=Math.random(); if(r < down) { if(excludeItself && msg.getSrc().equals(localAddress)) { if(log.isTraceEnabled()) log.trace("excluding itself"); } else { if(log.isTraceEnabled()) log.trace("dropping message"); num_down++; return; } } } } passDown(evt); } public void resetStats() { super.resetStats(); num_down=num_up=0; } public Map dumpStats() { Map m=new HashMap(2); m.put("num_dropped_down", new Integer(num_down)); m.put("num_dropped_up", new Integer(num_up)); return m; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?