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); }