Exemplo n.º 1
0
 /// <exception cref="System.IO.IOException"/>
 public override void Close()
 {
     if (state == EditLogFileInputStream.State.Open)
     {
         dataIn.Close();
     }
     state = EditLogFileInputStream.State.Closed;
 }
Exemplo n.º 2
0
        /// <exception cref="Org.Apache.Hadoop.Hdfs.Server.Namenode.EditLogFileInputStream.LogHeaderCorruptException
        ///     "/>
        /// <exception cref="System.IO.IOException"/>
        private void Init(bool verifyLayoutVersion)
        {
            Preconditions.CheckState(state == EditLogFileInputStream.State.Uninit);
            BufferedInputStream bin = null;

            try
            {
                fStream = log.GetInputStream();
                bin     = new BufferedInputStream(fStream);
                tracker = new FSEditLogLoader.PositionTrackingInputStream(bin);
                dataIn  = new DataInputStream(tracker);
                try
                {
                    logVersion = ReadLogVersion(dataIn, verifyLayoutVersion);
                }
                catch (EOFException)
                {
                    throw new EditLogFileInputStream.LogHeaderCorruptException("No header found in log"
                                                                               );
                }
                // We assume future layout will also support ADD_LAYOUT_FLAGS
                if (NameNodeLayoutVersion.Supports(LayoutVersion.Feature.AddLayoutFlags, logVersion
                                                   ) || logVersion < NameNodeLayoutVersion.CurrentLayoutVersion)
                {
                    try
                    {
                        LayoutFlags.Read(dataIn);
                    }
                    catch (EOFException)
                    {
                        throw new EditLogFileInputStream.LogHeaderCorruptException("EOF while reading layout "
                                                                                   + "flags from log");
                    }
                }
                reader = new FSEditLogOp.Reader(dataIn, tracker, logVersion);
                reader.SetMaxOpSize(maxOpSize);
                state = EditLogFileInputStream.State.Open;
            }
            finally
            {
                if (reader == null)
                {
                    IOUtils.Cleanup(Log, dataIn, tracker, bin, fStream);
                    state = EditLogFileInputStream.State.Closed;
                }
            }
        }