Ejemplo n.º 1
0
        internal virtual IList <DatanodeStorageInfo> RemoveZombieStorages()
        {
            IList <DatanodeStorageInfo> zombies = null;

            lock (storageMap)
            {
                IEnumerator <KeyValuePair <string, DatanodeStorageInfo> > iter = storageMap.GetEnumerator
                                                                                     ();
                while (iter.HasNext())
                {
                    KeyValuePair <string, DatanodeStorageInfo> entry = iter.Next();
                    DatanodeStorageInfo storageInfo = entry.Value;
                    if (storageInfo.GetLastBlockReportId() != curBlockReportId)
                    {
                        Log.Info(storageInfo.GetStorageID() + " had lastBlockReportId 0x" + long.ToHexString
                                     (storageInfo.GetLastBlockReportId()) + ", but curBlockReportId = 0x" + long.ToHexString
                                     (curBlockReportId));
                        iter.Remove();
                        if (zombies == null)
                        {
                            zombies = new List <DatanodeStorageInfo>();
                        }
                        zombies.AddItem(storageInfo);
                    }
                    storageInfo.SetLastBlockReportId(0);
                }
            }
            return(zombies == null ? EmptyStorageInfoList : zombies);
        }