private Peer GetInternal(DatanodeID dnId, bool isDomain) { lock (this) { IList <PeerCache.Value> sockStreamList = multimap.Get(new PeerCache.Key(dnId, isDomain )); if (sockStreamList == null) { return(null); } IEnumerator <PeerCache.Value> iter = sockStreamList.GetEnumerator(); while (iter.HasNext()) { PeerCache.Value candidate = iter.Next(); iter.Remove(); long ageMs = Time.MonotonicNow() - candidate.GetTime(); Peer peer = candidate.GetPeer(); if (ageMs >= expiryPeriod) { try { peer.Close(); } catch (IOException) { Log.Warn("got IOException closing stale peer " + peer + ", which is " + ageMs + " ms old" ); } } else { if (!peer.IsClosed()) { return(peer); } } } return(null); } }