public virtual void TestBlockPriorities()
        {
            UnderReplicatedBlocks queues = new UnderReplicatedBlocks();
            Block block1 = new Block(1);
            Block block2 = new Block(2);
            Block block_very_under_replicated = new Block(3);
            Block block_corrupt          = new Block(4);
            Block block_corrupt_repl_one = new Block(5);

            //add a block with a single entry
            AssertAdded(queues, block1, 1, 0, 3);
            NUnit.Framework.Assert.AreEqual(1, queues.GetUnderReplicatedBlockCount());
            NUnit.Framework.Assert.AreEqual(1, queues.Size());
            AssertInLevel(queues, block1, UnderReplicatedBlocks.QueueHighestPriority);
            //repeated additions fail
            NUnit.Framework.Assert.IsFalse(queues.Add(block1, 1, 0, 3));
            //add a second block with two replicas
            AssertAdded(queues, block2, 2, 0, 3);
            NUnit.Framework.Assert.AreEqual(2, queues.GetUnderReplicatedBlockCount());
            NUnit.Framework.Assert.AreEqual(2, queues.Size());
            AssertInLevel(queues, block2, UnderReplicatedBlocks.QueueUnderReplicated);
            //now try to add a block that is corrupt
            AssertAdded(queues, block_corrupt, 0, 0, 3);
            NUnit.Framework.Assert.AreEqual(3, queues.Size());
            NUnit.Framework.Assert.AreEqual(2, queues.GetUnderReplicatedBlockCount());
            NUnit.Framework.Assert.AreEqual(1, queues.GetCorruptBlockSize());
            AssertInLevel(queues, block_corrupt, UnderReplicatedBlocks.QueueWithCorruptBlocks
                          );
            //insert a very under-replicated block
            AssertAdded(queues, block_very_under_replicated, 4, 0, 25);
            AssertInLevel(queues, block_very_under_replicated, UnderReplicatedBlocks.QueueVeryUnderReplicated
                          );
            //insert a corrupt block with replication factor 1
            AssertAdded(queues, block_corrupt_repl_one, 0, 0, 1);
            NUnit.Framework.Assert.AreEqual(2, queues.GetCorruptBlockSize());
            NUnit.Framework.Assert.AreEqual(1, queues.GetCorruptReplOneBlockSize());
            queues.Update(block_corrupt_repl_one, 0, 0, 3, 0, 2);
            NUnit.Framework.Assert.AreEqual(0, queues.GetCorruptReplOneBlockSize());
            queues.Update(block_corrupt, 0, 0, 1, 0, -2);
            NUnit.Framework.Assert.AreEqual(1, queues.GetCorruptReplOneBlockSize());
            queues.Update(block_very_under_replicated, 0, 0, 1, -4, -24);
            NUnit.Framework.Assert.AreEqual(2, queues.GetCorruptReplOneBlockSize());
        }
Пример #2
0
        public virtual void TestProcessPendingReplications()
        {
            Configuration conf = new HdfsConfiguration();

            conf.SetLong(DFSConfigKeys.DfsNamenodeReplicationPendingTimeoutSecKey, Timeout);
            MiniDFSCluster      cluster = null;
            Block               block;
            BlockInfoContiguous blockInfo;

            try
            {
                cluster = new MiniDFSCluster.Builder(conf).NumDataNodes(DatanodeCount).Build();
                cluster.WaitActive();
                FSNamesystem             fsn                 = cluster.GetNamesystem();
                BlockManager             blkManager          = fsn.GetBlockManager();
                PendingReplicationBlocks pendingReplications = blkManager.pendingReplications;
                UnderReplicatedBlocks    neededReplications  = blkManager.neededReplications;
                BlocksMap blocksMap = blkManager.blocksMap;
                //
                // Add 1 block to pendingReplications with GenerationStamp = 0.
                //
                block     = new Block(1, 1, 0);
                blockInfo = new BlockInfoContiguous(block, (short)3);
                pendingReplications.Increment(block, DatanodeStorageInfo.ToDatanodeDescriptors(DFSTestUtil
                                                                                               .CreateDatanodeStorageInfos(1)));
                BlockCollection bc = Org.Mockito.Mockito.Mock <BlockCollection>();
                Org.Mockito.Mockito.DoReturn((short)3).When(bc).GetBlockReplication();
                // Place into blocksmap with GenerationStamp = 1
                blockInfo.SetGenerationStamp(1);
                blocksMap.AddBlockCollection(blockInfo, bc);
                NUnit.Framework.Assert.AreEqual("Size of pendingReplications ", 1, pendingReplications
                                                .Size());
                // Add a second block to pendingReplications that has no
                // corresponding entry in blocksmap
                block = new Block(2, 2, 0);
                pendingReplications.Increment(block, DatanodeStorageInfo.ToDatanodeDescriptors(DFSTestUtil
                                                                                               .CreateDatanodeStorageInfos(1)));
                // verify 2 blocks in pendingReplications
                NUnit.Framework.Assert.AreEqual("Size of pendingReplications ", 2, pendingReplications
                                                .Size());
                //
                // Wait for everything to timeout.
                //
                while (pendingReplications.Size() > 0)
                {
                    try
                    {
                        Sharpen.Thread.Sleep(100);
                    }
                    catch (Exception)
                    {
                    }
                }
                //
                // Verify that block moves to neededReplications
                //
                while (neededReplications.Size() == 0)
                {
                    try
                    {
                        Sharpen.Thread.Sleep(100);
                    }
                    catch (Exception)
                    {
                    }
                }
                // Verify that the generation stamp we will try to replicate
                // is now 1
                foreach (Block b in neededReplications)
                {
                    NUnit.Framework.Assert.AreEqual("Generation stamp is 1 ", 1, b.GetGenerationStamp
                                                        ());
                }
                // Verify size of neededReplications is exactly 1.
                NUnit.Framework.Assert.AreEqual("size of neededReplications is 1 ", 1, neededReplications
                                                .Size());
            }
            finally
            {
                if (cluster != null)
                {
                    cluster.Shutdown();
                }
            }
        }