Exemplo n.º 1
0
 /// <exception cref="System.IO.IOException"/>
 internal virtual void AnalyzeStorage()
 {
     this.state = sd.AnalyzeStorage(HdfsServerConstants.StartupOption.Regular, this);
     if (state == Storage.StorageState.Normal)
     {
         ReadProperties(sd);
     }
 }
Exemplo n.º 2
0
        /// <summary>Load one storage directory.</summary>
        /// <remarks>Load one storage directory. Recover from previous transitions if required.
        ///     </remarks>
        /// <param name="datanode">datanode instance</param>
        /// <param name="nsInfo">namespace information</param>
        /// <param name="dataDir">the root path of the storage directory</param>
        /// <param name="startOpt">startup option</param>
        /// <returns>the StorageDirectory successfully loaded.</returns>
        /// <exception cref="System.IO.IOException"/>
        private Storage.StorageDirectory LoadStorageDirectory(DataNode datanode, NamespaceInfo
                                                              nsInfo, FilePath dataDir, HdfsServerConstants.StartupOption startOpt)
        {
            Storage.StorageDirectory sd = new Storage.StorageDirectory(dataDir, null, true);
            try
            {
                Storage.StorageState curState = sd.AnalyzeStorage(startOpt, this);
                switch (curState)
                {
                case Storage.StorageState.Normal:
                {
                    // sd is locked but not opened
                    break;
                }

                case Storage.StorageState.NonExistent:
                {
                    Log.Info("Block pool storage directory " + dataDir + " does not exist");
                    throw new IOException("Storage directory " + dataDir + " does not exist");
                }

                case Storage.StorageState.NotFormatted:
                {
                    // format
                    Log.Info("Block pool storage directory " + dataDir + " is not formatted for " + nsInfo
                             .GetBlockPoolID());
                    Log.Info("Formatting ...");
                    Format(sd, nsInfo);
                    break;
                }

                default:
                {
                    // recovery part is common
                    sd.DoRecover(curState);
                    break;
                }
                }
                // 2. Do transitions
                // Each storage directory is treated individually.
                // During startup some of them can upgrade or roll back
                // while others could be up-to-date for the regular startup.
                DoTransition(datanode, sd, nsInfo, startOpt);
                if (GetCTime() != nsInfo.GetCTime())
                {
                    throw new IOException("Data-node and name-node CTimes must be the same.");
                }
                // 3. Update successfully loaded storage.
                SetServiceLayoutVersion(GetServiceLayoutVersion());
                WriteProperties(sd);
                return(sd);
            }
            catch (IOException ioe)
            {
                sd.Unlock();
                throw;
            }
        }
Exemplo n.º 3
0
        /// <exception cref="System.IO.IOException"/>
        internal virtual void AnalyzeAndRecoverStorage(HdfsServerConstants.StartupOption
                                                       startOpt)
        {
            this.state = sd.AnalyzeStorage(startOpt, this);
            bool needRecover = state != Storage.StorageState.Normal && state != Storage.StorageState
                               .NonExistent && state != Storage.StorageState.NotFormatted;

            if (state == Storage.StorageState.Normal && startOpt != HdfsServerConstants.StartupOption
                .Rollback)
            {
                ReadProperties(sd);
            }
            else
            {
                if (needRecover)
                {
                    sd.DoRecover(state);
                }
            }
        }