Exemple #1
0
 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);
     }
 }