Пример #1
0
        internal virtual bool RemoveFromCorruptReplicasMap(Block blk, DatanodeDescriptor
                                                           datanode, CorruptReplicasMap.Reason reason)
        {
            IDictionary <DatanodeDescriptor, CorruptReplicasMap.Reason> datanodes = corruptReplicasMap
                                                                                    [blk];

            if (datanodes == null)
            {
                return(false);
            }
            // if reasons can be compared but don't match, return false.
            CorruptReplicasMap.Reason storedReason = datanodes[datanode];
            if (reason != CorruptReplicasMap.Reason.Any && storedReason != null && reason !=
                storedReason)
            {
                return(false);
            }
            if (Sharpen.Collections.Remove(datanodes, datanode) != null)
            {
                // remove the replicas
                if (datanodes.IsEmpty())
                {
                    // remove the block if there is no more corrupted replicas
                    Sharpen.Collections.Remove(corruptReplicasMap, blk);
                }
                return(true);
            }
            return(false);
        }
Пример #2
0
 /// <summary>
 /// return the reason about corrupted replica for a given block
 /// on a given dn
 /// </summary>
 /// <param name="block">block that has corrupted replica</param>
 /// <param name="node">datanode that contains this corrupted replica</param>
 /// <returns>reason</returns>
 internal virtual string GetCorruptReason(Block block, DatanodeDescriptor node)
 {
     CorruptReplicasMap.Reason reason = null;
     if (corruptReplicasMap.Contains(block))
     {
         if (corruptReplicasMap[block].Contains(node))
         {
             reason = corruptReplicasMap[block][node];
         }
     }
     if (reason != null)
     {
         return(reason.ToString());
     }
     else
     {
         return(null);
     }
 }
Пример #3
0
        // not specified.
        // wildcard reason
        // mismatch in generation stamps
        // mismatch in sizes
        // invalid state
        // client or datanode reported the corruption
        /// <summary>Mark the block belonging to datanode as corrupt.</summary>
        /// <param name="blk">Block to be added to CorruptReplicasMap</param>
        /// <param name="dn">DatanodeDescriptor which holds the corrupt replica</param>
        /// <param name="reason">a textual reason (for logging purposes)</param>
        /// <param name="reasonCode">the enum representation of the reason</param>
        internal virtual void AddToCorruptReplicasMap(Block blk, DatanodeDescriptor dn, string
                                                      reason, CorruptReplicasMap.Reason reasonCode)
        {
            IDictionary <DatanodeDescriptor, CorruptReplicasMap.Reason> nodes = corruptReplicasMap
                                                                                [blk];

            if (nodes == null)
            {
                nodes = new Dictionary <DatanodeDescriptor, CorruptReplicasMap.Reason>();
                corruptReplicasMap[blk] = nodes;
            }
            string reasonText;

            if (reason != null)
            {
                reasonText = " because " + reason;
            }
            else
            {
                reasonText = string.Empty;
            }
            if (!nodes.Keys.Contains(dn))
            {
                NameNode.blockStateChangeLog.Info("BLOCK NameSystem.addToCorruptReplicasMap: {} added as corrupt on "
                                                  + "{} by {} {}", blk.GetBlockName(), dn, Org.Apache.Hadoop.Ipc.Server.GetRemoteIp
                                                      (), reasonText);
            }
            else
            {
                NameNode.blockStateChangeLog.Info("BLOCK NameSystem.addToCorruptReplicasMap: duplicate requested for"
                                                  + " {} to add as corrupt on {} by {} {}", blk.GetBlockName(), dn, Org.Apache.Hadoop.Ipc.Server
                                                  .GetRemoteIp(), reasonText);
            }
            // Add the node or update the reason.
            nodes[dn] = reasonCode;
        }