Author: j16sdiz Date: 2008-10-30 08:37:30 +0000 (Thu, 30 Oct 2008) New Revision: 23221
Modified: trunk/freenet/src/freenet/node/PacketSender.java trunk/freenet/src/freenet/node/PeerManager.java trunk/freenet/src/freenet/node/PeerNodeStatus.java Log: more generic Modified: trunk/freenet/src/freenet/node/PacketSender.java =================================================================== --- trunk/freenet/src/freenet/node/PacketSender.java 2008-10-30 08:37:02 UTC (rev 23220) +++ trunk/freenet/src/freenet/node/PacketSender.java 2008-10-30 08:37:30 UTC (rev 23221) @@ -3,6 +3,8 @@ * http://www.gnu.org/ for further details of the GPL. */ package freenet.node; +import java.util.ArrayList; +import java.util.List; import java.util.TreeMap; import java.util.Vector; @@ -36,7 +38,7 @@ * this many milliseconds. */ static final int MIN_OLD_OPENNET_CONNECT_DELAY = 60 * 1000; /** ~= Ticker :) */ - private final TreeMap timedJobsByTime; + private final TreeMap<Long, Object> timedJobsByTime; final NativeThread myThread; final Node node; NodeStats stats; @@ -46,7 +48,7 @@ /** For watchdog. 32-bit to avoid locking. */ volatile int lastTimeInSeconds; private long timeLastSentOldOpennetConnectAttempt; - private Vector rpiTemp; + private Vector<ResendPacketItem> rpiTemp; private int[] rpiIntTemp; private boolean started = false; @@ -60,13 +62,13 @@ } PacketSender(Node node) { - timedJobsByTime = new TreeMap(); + timedJobsByTime = new TreeMap<Long, Object>(); this.node = node; myThread = new NativeThread(this, "PacketSender thread for " + node.getDarknetPortNumber(), NativeThread.MAX_PRIORITY, false); myThread.setDaemon(true); logMINOR = Logger.shouldLog(Logger.MINOR, this); logDEBUG = Logger.shouldLog(Logger.DEBUG, this); - rpiTemp = new Vector(); + rpiTemp = new Vector<ResendPacketItem>(); rpiIntTemp = new int[64]; } @@ -328,14 +330,14 @@ if((now - oldNow) > (10 * 1000)) Logger.error(this, "now is more than 10 seconds past oldNow (" + (now - oldNow) + ") in PacketSender"); - Vector jobsToRun = null; + List<Job> jobsToRun = null; synchronized(timedJobsByTime) { while(!timedJobsByTime.isEmpty()) { - Long tRun = (Long) timedJobsByTime.firstKey(); + Long tRun = timedJobsByTime.firstKey(); if(tRun.longValue() <= now) { if(jobsToRun == null) - jobsToRun = new Vector(); + jobsToRun = new ArrayList<Job>(); Object o = timedJobsByTime.remove(tRun); if(o instanceof Job[]) { Job[] r = (Job[]) o; @@ -354,8 +356,7 @@ } if(jobsToRun != null) - for(int i = 0; i < jobsToRun.size(); i++) { - Job r = (Job) jobsToRun.get(i); + for(Job r : jobsToRun) { if(logMINOR) Logger.minor(this, "Running " + r); if(r.job instanceof FastRunnable) Modified: trunk/freenet/src/freenet/node/PeerManager.java =================================================================== --- trunk/freenet/src/freenet/node/PeerManager.java 2008-10-30 08:37:02 UTC (rev 23220) +++ trunk/freenet/src/freenet/node/PeerManager.java 2008-10-30 08:37:30 UTC (rev 23221) @@ -70,11 +70,11 @@ /** PeerNode status summary log interval (milliseconds) */ private static final long peerNodeStatusLogInterval = 5000; /** PeerNode statuses, by status */ - private final HashMap peerNodeStatuses; + private final HashMap<Integer, HashSet<PeerNode>> peerNodeStatuses; /** DarknetPeerNode statuses, by status */ - private final HashMap peerNodeStatusesDarknet; + private final HashMap<Integer, HashSet<PeerNode>> peerNodeStatusesDarknet; /** PeerNode routing backoff reasons, by reason */ - private final HashMap peerNodeRoutingBackoffReasons; + private final HashMap<String, HashSet<PeerNode>> peerNodeRoutingBackoffReasons; /** Next time to update routableConnectionStats */ private long nextRoutableConnectionStatsUpdateTime = -1; /** routableConnectionStats update interval (milliseconds) */ @@ -119,9 +119,9 @@ public PeerManager(Node node) { Logger.normal(this, "Creating PeerManager"); logMINOR = Logger.shouldLog(Logger.MINOR, this); - peerNodeStatuses = new HashMap(); - peerNodeStatusesDarknet = new HashMap(); - peerNodeRoutingBackoffReasons = new HashMap(); + peerNodeStatuses = new HashMap<Integer, HashSet<PeerNode>>(); + peerNodeStatusesDarknet = new HashMap<Integer, HashSet<PeerNode>>(); + peerNodeRoutingBackoffReasons = new HashMap<String, HashSet<PeerNode>>(); System.out.println("Creating PeerManager"); myPeers = new PeerNode[0]; connectedPeers = new PeerNode[0]; @@ -303,7 +303,6 @@ if(pn instanceof DarknetPeerNode) ((DarknetPeerNode) pn).removeExtraPeerDataDir(); if(isInPeers) { - int peerNodeStatus = pn.getPeerNodeStatus(); if(pn.recordStatus()) removePeerNodeStatus(peerNodeStatus, pn, !isInPeers); @@ -312,22 +311,22 @@ removePeerNodeRoutingBackoffReason(peerNodePreviousRoutingBackoffReason, pn); // removing from connectedPeers - ArrayList a = new ArrayList(); - for(int i = 0; i < myPeers.length; i++) { - if((myPeers[i] != pn) && myPeers[i].isConnected() && myPeers[i].isRealConnection()) - a.add(myPeers[i]); + ArrayList<PeerNode> a = new ArrayList<PeerNode>(); + for(PeerNode mp : myPeers) { + if((mp != pn) && mp.isConnected() && mp.isRealConnection()) + a.add(mp); } PeerNode[] newConnectedPeers = new PeerNode[a.size()]; - newConnectedPeers = (PeerNode[]) a.toArray(newConnectedPeers); + newConnectedPeers = a.toArray(newConnectedPeers); connectedPeers = newConnectedPeers; // removing from myPeers PeerNode[] newMyPeers = new PeerNode[myPeers.length - 1]; int positionInNewArray = 0; - for(int i = 0; i < myPeers.length; i++) { - if(myPeers[i] != pn) { - newMyPeers[positionInNewArray] = myPeers[i]; + for(PeerNode mp : myPeers) { + if(mp != pn) { + newMyPeers[positionInNewArray] = mp; positionInNewArray++; } } @@ -365,13 +364,13 @@ if(!isInPeers) return false; // removing from connectedPeers - ArrayList a = new ArrayList(); - for(int i = 0; i < myPeers.length; i++) { - if((myPeers[i] != pn) && myPeers[i].isRoutable()) - a.add(myPeers[i]); + ArrayList<PeerNode> a = new ArrayList<PeerNode>(); + for(PeerNode mp : myPeers) { + if((mp != pn) && mp.isRoutable()) + a.add(mp); } PeerNode[] newConnectedPeers = new PeerNode[a.size()]; - newConnectedPeers = (PeerNode[]) a.toArray(newConnectedPeers); + newConnectedPeers = a.toArray(newConnectedPeers); connectedPeers = newConnectedPeers; } updatePMUserAlert(); @@ -551,8 +550,7 @@ } }; - protected static class LocationUIDPair implements Comparable { - + protected static class LocationUIDPair implements Comparable<LocationUIDPair> { double location; long uid; @@ -561,9 +559,8 @@ uid = pn.swapIdentifier; } - public int compareTo(Object arg0) { + public int compareTo(LocationUIDPair p) { // Compare purely on location, so result is the same as getPeerLocationDoubles() - LocationUIDPair p = (LocationUIDPair) arg0; if(p.location > location) return 1; if(p.location < location) @@ -643,9 +640,8 @@ return pn; } //could not easily find a good random one... filter the ones which are acceptable - ArrayList l = new ArrayList(); - for(int i = 0; i < connectedPeers.length; i++) { - PeerNode pn = connectedPeers[i]; + ArrayList<PeerNode> l = new ArrayList<PeerNode>(); + for(PeerNode pn : connectedPeers) { if(pn == exclude) continue; if(node.netid.inSeparateNetworks(pn, exclude)) @@ -657,7 +653,7 @@ //Are there any acceptable peers? if(l.size() == 0) return null; - return (PeerNode) l.get(node.random.nextInt(l.size())); + return l.get(node.random.nextInt(l.size())); } } @@ -680,10 +676,9 @@ // Move the un-connected ones out // This is safe as they will add themselves when they // reconnect, and they can't do it yet as we are synchronized. - Vector v = new Vector(connectedPeers.length); + ArrayList<PeerNode> v = new ArrayList<PeerNode>(connectedPeers.length); logMINOR = Logger.shouldLog(Logger.MINOR, this); - for(int i = 0; i < myPeers.length; i++) { - PeerNode pn = myPeers[i]; + for(PeerNode pn : myPeers) { if(pn == exclude) continue; if(pn.isRoutable()) @@ -696,7 +691,7 @@ if((exclude != null) && exclude.isRoutable()) v.add(exclude); PeerNode[] newConnectedPeers = new PeerNode[v.size()]; - newConnectedPeers = (PeerNode[]) v.toArray(newConnectedPeers); + newConnectedPeers = v.toArray(newConnectedPeers); if(logMINOR) Logger.minor(this, "Connected peers (in getRandomPeer): " + newConnectedPeers.length + " was " + connectedPeers.length); connectedPeers = newConnectedPeers; @@ -815,8 +810,8 @@ return closestDist < nodeDist; } - public PeerNode closerPeer(PeerNode pn, Set routedTo, double loc, boolean ignoreSelf, boolean calculateMisrouting, - int minVersion, Vector addUnpickedLocsTo, Key key) { + public PeerNode closerPeer(PeerNode pn, Set<PeerNode> routedTo, double loc, boolean ignoreSelf, boolean calculateMisrouting, + int minVersion, List<Double> addUnpickedLocsTo, Key key) { return closerPeer(pn, routedTo, loc, ignoreSelf, calculateMisrouting, minVersion, addUnpickedLocsTo, 2.0, key); } @@ -832,8 +827,8 @@ * @param key The original key, if we have it, and if we want to consult with the FailureTable * to avoid routing to nodes which have recently failed for the same key. */ - public PeerNode closerPeer(PeerNode pn, Set routedTo, double target, boolean ignoreSelf, - boolean calculateMisrouting, int minVersion, Vector addUnpickedLocsTo, double maxDistance, Key key) { + public PeerNode closerPeer(PeerNode pn, Set<PeerNode> routedTo, double target, boolean ignoreSelf, + boolean calculateMisrouting, int minVersion, List<Double> addUnpickedLocsTo, double maxDistance, Key key) { PeerNode[] peers; synchronized(this) { peers = connectedPeers; @@ -1442,11 +1437,11 @@ addPeerNodeStatuses(pnStatus, peerNode, peerNodeStatus, peerNodeStatusesDarknet, noLog); } - private void addPeerNodeStatuses(int pnStatus, PeerNode peerNode, Integer peerNodeStatus, HashMap statuses, boolean noLog) { - HashSet statusSet = null; + private void addPeerNodeStatuses(int pnStatus, PeerNode peerNode, Integer peerNodeStatus, HashMap<Integer, HashSet<PeerNode>> statuses, boolean noLog) { + HashSet<PeerNode> statusSet = null; synchronized(statuses) { if(statuses.containsKey(peerNodeStatus)) { - statusSet = (HashSet) statuses.get(peerNodeStatus); + statusSet = statuses.get(peerNodeStatus); if(statusSet.contains(peerNode)) { if(!noLog) Logger.error(this, "addPeerNodeStatus(): node already in peerNodeStatuses: " + peerNode + " status " + PeerNode.getPeerNodeStatusString(peerNodeStatus.intValue())); @@ -1454,7 +1449,7 @@ } statuses.remove(peerNodeStatus); } else - statusSet = new HashSet(); + statusSet = new HashSet<PeerNode>(); if(logMINOR) Logger.minor(this, "addPeerNodeStatus(): adding PeerNode for '" + peerNode.getIdentityString() + "' with status '" + PeerNode.getPeerNodeStatusString(peerNodeStatus.intValue()) + "'"); statusSet.add(peerNode); @@ -1468,13 +1463,13 @@ */ public int getPeerNodeStatusSize(int pnStatus, boolean darknet) { Integer peerNodeStatus = new Integer(pnStatus); - HashSet statusSet = null; - HashMap statuses = darknet ? peerNodeStatusesDarknet : this.peerNodeStatuses; + HashSet<PeerNode> statusSet = null; + HashMap<Integer, HashSet<PeerNode>> statuses = darknet ? peerNodeStatusesDarknet : this.peerNodeStatuses; synchronized(statuses) { if(statuses.containsKey(peerNodeStatus)) - statusSet = (HashSet) statuses.get(peerNodeStatus); + statusSet = statuses.get(peerNodeStatus); else - statusSet = new HashSet(); + statusSet = new HashSet<PeerNode>(); return statusSet.size(); } } @@ -1490,11 +1485,11 @@ removePeerNodeStatus(pnStatus, peerNodeStatus, peerNode, peerNodeStatusesDarknet, noLog); } - private void removePeerNodeStatus(int pnStatus, Integer peerNodeStatus, PeerNode peerNode, HashMap statuses, boolean noLog) { - HashSet statusSet = null; + private void removePeerNodeStatus(int pnStatus, Integer peerNodeStatus, PeerNode peerNode, HashMap<Integer, HashSet<PeerNode>> statuses, boolean noLog) { + HashSet<PeerNode> statusSet = null; synchronized(statuses) { if(statuses.containsKey(peerNodeStatus)) { - statusSet = (HashSet) statuses.get(peerNodeStatus); + statusSet = statuses.get(peerNodeStatus); if(!statusSet.contains(peerNode)) { if(!noLog) Logger.error(this, "removePeerNodeStatus(): identity '" + peerNode.getIdentityString() + " for " + peerNode.shortToString() + "' not in peerNodeStatuses with status '" + PeerNode.getPeerNodeStatusString(peerNodeStatus.intValue()) + "'", new Exception("debug")); @@ -1503,7 +1498,7 @@ if(statuses.isEmpty()) statuses.remove(peerNodeStatus); } else - statusSet = new HashSet(); + statusSet = new HashSet<PeerNode>(); if(logMINOR) Logger.minor(this, "removePeerNodeStatus(): removing PeerNode for '" + peerNode.getIdentityString() + "' with status '" + PeerNode.getPeerNodeStatusString(peerNodeStatus.intValue()) + "'"); if(statusSet.contains(peerNode)) @@ -1516,16 +1511,16 @@ */ public void addPeerNodeRoutingBackoffReason(String peerNodeRoutingBackoffReason, PeerNode peerNode) { synchronized(peerNodeRoutingBackoffReasons) { - HashSet reasonSet = null; + HashSet<PeerNode> reasonSet = null; if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) { - reasonSet = (HashSet) peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason); + reasonSet = peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason); if(reasonSet.contains(peerNode)) { Logger.error(this, "addPeerNodeRoutingBackoffReason(): identity '" + peerNode.getIdentityString() + "' already in peerNodeRoutingBackoffReasons as " + peerNode.getPeer() + " with status code " + peerNodeRoutingBackoffReason); return; } peerNodeRoutingBackoffReasons.remove(peerNodeRoutingBackoffReason); } else - reasonSet = new HashSet(); + reasonSet = new HashSet<PeerNode>(); if(logMINOR) Logger.minor(this, "addPeerNodeRoutingBackoffReason(): adding PeerNode for '" + peerNode.getIdentityString() + "' with status code " + peerNodeRoutingBackoffReason); reasonSet.add(peerNode); @@ -1539,7 +1534,7 @@ public String[] getPeerNodeRoutingBackoffReasons() { String[] reasonStrings; synchronized(peerNodeRoutingBackoffReasons) { - reasonStrings = (String[]) peerNodeRoutingBackoffReasons.keySet().toArray(new String[peerNodeRoutingBackoffReasons.size()]); + reasonStrings = peerNodeRoutingBackoffReasons.keySet().toArray(new String[peerNodeRoutingBackoffReasons.size()]); } Arrays.sort(reasonStrings); return reasonStrings; @@ -1549,10 +1544,10 @@ * How many PeerNodes have a particular routing backoff reason? */ public int getPeerNodeRoutingBackoffReasonSize(String peerNodeRoutingBackoffReason) { - HashSet reasonSet = null; + HashSet<PeerNode> reasonSet = null; synchronized(peerNodeRoutingBackoffReasons) { if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) { - reasonSet = (HashSet) peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason); + reasonSet = peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason); return reasonSet.size(); } else return 0; @@ -1563,17 +1558,17 @@ * Remove a PeerNode routing backoff reason from the map */ public void removePeerNodeRoutingBackoffReason(String peerNodeRoutingBackoffReason, PeerNode peerNode) { - HashSet reasonSet = null; + HashSet<PeerNode> reasonSet = null; synchronized(peerNodeRoutingBackoffReasons) { if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) { - reasonSet = (HashSet) peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason); + reasonSet = peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason); if(!reasonSet.contains(peerNode)) { Logger.error(this, "removePeerNodeRoutingBackoffReason(): identity '" + peerNode.getIdentityString() + "' not in peerNodeRoutingBackoffReasons with status code " + peerNodeRoutingBackoffReason, new Exception("debug")); return; } peerNodeRoutingBackoffReasons.remove(peerNodeRoutingBackoffReason); } else - reasonSet = new HashSet(); + reasonSet = new HashSet<PeerNode>(); if(logMINOR) Logger.minor(this, "removePeerNodeRoutingBackoffReason(): removing PeerNode for '" + peerNode.getIdentityString() + "' with status code " + peerNodeRoutingBackoffReason); if(reasonSet.contains(peerNode)) @@ -1641,12 +1636,12 @@ peers = myPeers; } // FIXME optimise! Maybe maintain as a separate list? - Vector v = new Vector(myPeers.length); + Vector<PeerNode> v = new Vector<PeerNode>(myPeers.length); for(int i = 0; i < peers.length; i++) { if(peers[i] instanceof DarknetPeerNode) v.add(peers[i]); } - return (DarknetPeerNode[]) v.toArray(new DarknetPeerNode[v.size()]); + return v.toArray(new DarknetPeerNode[v.size()]); } public Vector<SeedServerPeerNode> getConnectedSeedServerPeersVector(HashSet<ByteArrayWrapper> exclude) { @@ -1656,19 +1651,20 @@ } // FIXME optimise! Maybe maintain as a separate list? Vector<SeedServerPeerNode> v = new Vector<SeedServerPeerNode>(myPeers.length); - for(int i = 0; i < peers.length; i++) { - if(peers[i] instanceof SeedServerPeerNode) { - if(exclude != null && exclude.contains(new ByteArrayWrapper(peers[i].getIdentity()))) { + for(PeerNode p : peers) { + if(p instanceof SeedServerPeerNode) { + SeedServerPeerNode sspn = (SeedServerPeerNode) p; + if(exclude != null && exclude.contains(new ByteArrayWrapper(sspn.getIdentity()))) { if(logMINOR) - Logger.minor(this, "Not including in getConnectedSeedServerPeersVector() as in exclude set: " + peers[i].userToString()); + Logger.minor(this, "Not including in getConnectedSeedServerPeersVector() as in exclude set: " + sspn.userToString()); continue; } - if(!peers[i].isConnected()) { + if(!sspn.isConnected()) { if(logMINOR) - Logger.minor(this, "Not including in getConnectedSeedServerPeersVector() as disconnected: " + peers[i].userToString()); + Logger.minor(this, "Not including in getConnectedSeedServerPeersVector() as disconnected: " + sspn.userToString()); continue; } - v.add((SeedServerPeerNode)peers[i]); + v.add(sspn); } } return v; @@ -1697,12 +1693,12 @@ peers = myPeers; } // FIXME optimise! Maybe maintain as a separate list? - Vector v = new Vector(myPeers.length); + Vector<PeerNode> v = new Vector<PeerNode>(myPeers.length); for(int i = 0; i < peers.length; i++) { if(peers[i] instanceof OpennetPeerNode) v.add(peers[i]); } - return (OpennetPeerNode[]) v.toArray(new OpennetPeerNode[v.size()]); + return v.toArray(new OpennetPeerNode[v.size()]); } public boolean anyConnectedPeerHasAddress(FreenetInetAddress addr, PeerNode pn) { @@ -1726,18 +1722,17 @@ public void removeOpennetPeers() { synchronized(this) { - Vector keep = new Vector(); - Vector conn = new Vector(); - for(int i = 0; i < myPeers.length; i++) { - PeerNode pn = myPeers[i]; + ArrayList<PeerNode> keep = new ArrayList<PeerNode>(); + ArrayList<PeerNode> conn = new ArrayList<PeerNode>(); + for(PeerNode pn : myPeers) { if(pn instanceof OpennetPeerNode) continue; keep.add(pn); if(pn.isConnected()) conn.add(pn); } - myPeers = (PeerNode[]) keep.toArray(new PeerNode[keep.size()]); - connectedPeers = (PeerNode[]) keep.toArray(new PeerNode[conn.size()]); + myPeers = keep.toArray(new PeerNode[keep.size()]); + connectedPeers = keep.toArray(new PeerNode[conn.size()]); } updatePMUserAlert(); } Modified: trunk/freenet/src/freenet/node/PeerNodeStatus.java =================================================================== --- trunk/freenet/src/freenet/node/PeerNodeStatus.java 2008-10-30 08:37:02 UTC (rev 23220) +++ trunk/freenet/src/freenet/node/PeerNodeStatus.java 2008-10-30 08:37:30 UTC (rev 23221) @@ -5,10 +5,10 @@ import java.util.Map; +import freenet.clients.http.DarknetConnectionsToadlet; import freenet.io.comm.Peer; import freenet.io.xfer.PacketThrottle; import freenet.support.Logger; -import java.util.SortedSet; /** * Contains various status information for a {@link PeerNode}. Used e.g. in @@ -65,9 +65,9 @@ private long peerAddedTime; - private Map localMessagesReceived; + private Map<String,Long> localMessagesReceived; - private Map localMessagesSent; + private Map<String,Long> localMessagesSent; private final int hashCode; @@ -156,14 +156,14 @@ /** * @return the localMessagesReceived */ - public Map getLocalMessagesReceived() { + public Map<String, Long> getLocalMessagesReceived() { return localMessagesReceived; } /** * @return the localMessagesSent */ - public Map getLocalMessagesSent() { + public Map<String, Long> getLocalMessagesSent() { return localMessagesSent; }
