/// <summary>DatanodeDescriptor constructor</summary>
        /// <param name="nodeID">id of the data node</param>
        public DatanodeDescriptor(DatanodeID nodeID)
            : base(nodeID)
        {
            decommissioningStatus = new DatanodeDescriptor.DecommissioningStatus(this);
            pendingCached         = new DatanodeDescriptor.CachedBlocksList(this, DatanodeDescriptor.CachedBlocksList.Type
                                                                            .PendingCached);
            cached = new DatanodeDescriptor.CachedBlocksList(this, DatanodeDescriptor.CachedBlocksList.Type
                                                             .Cached);
            pendingUncached = new DatanodeDescriptor.CachedBlocksList(this, DatanodeDescriptor.CachedBlocksList.Type
                                                                      .PendingUncached);
            // isAlive == heartbeats.contains(this)
            // This is an optimization, because contains takes O(n) time on Arraylist
            // A system administrator can tune the balancer bandwidth parameter
            // (dfs.balance.bandwidthPerSec) dynamically by calling
            // "dfsadmin -setBalanacerBandwidth <newbandwidth>", at which point the
            // following 'bandwidth' variable gets updated with the new value for each
            // node. Once the heartbeat command is issued to update the value on the
            // specified datanode, this value will be set back to 0.

            /* Variables for maintaining number of blocks scheduled to be written to
             * this storage. This count is approximate and might be slightly bigger
             * in case of errors (e.g. datanode does not report if an error occurs
             * while writing the block).
             */
            //10min
            // The number of replication work pending before targets are determined
            // HB processing can use it to tell if it is the first HB since DN restarted
            UpdateHeartbeatState(StorageReport.EmptyArray, 0L, 0L, 0, 0, null);
        }
 /// <summary>DatanodeDescriptor constructor</summary>
 /// <param name="nodeID">id of the data node</param>
 /// <param name="networkLocation">location of the data node in network</param>
 public DatanodeDescriptor(DatanodeID nodeID, string networkLocation)
     : base(nodeID, networkLocation)
 {
     decommissioningStatus = new DatanodeDescriptor.DecommissioningStatus(this);
     pendingCached         = new DatanodeDescriptor.CachedBlocksList(this, DatanodeDescriptor.CachedBlocksList.Type
                                                                     .PendingCached);
     cached = new DatanodeDescriptor.CachedBlocksList(this, DatanodeDescriptor.CachedBlocksList.Type
                                                      .Cached);
     pendingUncached = new DatanodeDescriptor.CachedBlocksList(this, DatanodeDescriptor.CachedBlocksList.Type
                                                               .PendingUncached);
     UpdateHeartbeatState(StorageReport.EmptyArray, 0L, 0L, 0, 0, null);
 }