Пример #1
0
        /// <exception cref="System.IO.IOException"/>
        private void CheckDFSAdminDecommissionStatus(IList <DatanodeDescriptor> expectedDecomm
                                                     , DistributedFileSystem dfs, DFSAdmin admin)
        {
            ByteArrayOutputStream baos   = new ByteArrayOutputStream();
            TextWriter            ps     = new TextWriter(baos);
            TextWriter            oldOut = System.Console.Out;

            Runtime.SetOut(ps);
            try
            {
                // Parse DFSAdmin just to check the count
                admin.Report(new string[] { "-decommissioning" }, 0);
                string[] lines = baos.ToString().Split("\n");
                int      num   = null;
                int      count = 0;
                foreach (string line in lines)
                {
                    if (line.StartsWith("Decommissioning datanodes"))
                    {
                        // Pull out the "(num)" and parse it into an int
                        string temp = line.Split(" ")[2];
                        num = System.Convert.ToInt32((string)temp.SubSequence(1, temp.Length - 2));
                    }
                    if (line.Contains("Decommission in progress"))
                    {
                        count++;
                    }
                }
                NUnit.Framework.Assert.IsTrue("No decommissioning output", num != null);
                NUnit.Framework.Assert.AreEqual("Unexpected number of decomming DNs", expectedDecomm
                                                .Count, num);
                NUnit.Framework.Assert.AreEqual("Unexpected number of decomming DNs", expectedDecomm
                                                .Count, count);
                // Check Java API for correct contents
                IList <DatanodeInfo> decomming = new AList <DatanodeInfo>(Arrays.AsList(dfs.GetDataNodeStats
                                                                                            (HdfsConstants.DatanodeReportType.Decommissioning)));
                NUnit.Framework.Assert.AreEqual("Unexpected number of decomming DNs", expectedDecomm
                                                .Count, decomming.Count);
                foreach (DatanodeID id in expectedDecomm)
                {
                    NUnit.Framework.Assert.IsTrue("Did not find expected decomming DN " + id, decomming
                                                  .Contains(id));
                }
            }
            finally
            {
                Runtime.SetOut(oldOut);
            }
        }