예제 #1
0
        /// <exception cref="System.IO.IOException"/>
        public virtual void SelectInputStreams(ICollection <EditLogInputStream> streams, long
                                               fromTxnId, bool inProgressOk)
        {
            QuorumCall <AsyncLogger, RemoteEditLogManifest> q = loggers.GetEditLogManifest(fromTxnId
                                                                                           , inProgressOk);
            IDictionary <AsyncLogger, RemoteEditLogManifest> resps = loggers.WaitForWriteQuorum
                                                                         (q, selectInputStreamsTimeoutMs, "selectInputStreams");

            Log.Debug("selectInputStream manifests:\n" + Joiner.On("\n").WithKeyValueSeparator
                          (": ").Join(resps));
            PriorityQueue <EditLogInputStream> allStreams = new PriorityQueue <EditLogInputStream
                                                                               >(64, JournalSet.EditLogInputStreamComparator);

            foreach (KeyValuePair <AsyncLogger, RemoteEditLogManifest> e in resps)
            {
                AsyncLogger           logger   = e.Key;
                RemoteEditLogManifest manifest = e.Value;
                foreach (RemoteEditLog remoteLog in manifest.GetLogs())
                {
                    Uri url = logger.BuildURLToFetchLogs(remoteLog.GetStartTxId());
                    EditLogInputStream elis = EditLogFileInputStream.FromUrl(connectionFactory, url,
                                                                             remoteLog.GetStartTxId(), remoteLog.GetEndTxId(), remoteLog.IsInProgress());
                    allStreams.AddItem(elis);
                }
            }
            JournalSet.ChainAndMakeRedundantStreams(streams, allStreams, fromTxnId);
        }
예제 #2
0
 /// <exception cref="System.IO.IOException"/>
 internal static OfflineEditsLoader CreateLoader(OfflineEditsVisitor visitor, string
                                                 inputFileName, bool xmlInput, OfflineEditsViewer.Flags flags)
 {
     if (xmlInput)
     {
         return(new OfflineEditsXmlLoader(visitor, new FilePath(inputFileName), flags));
     }
     else
     {
         FilePath           file   = null;
         EditLogInputStream elis   = null;
         OfflineEditsLoader loader = null;
         try
         {
             file = new FilePath(inputFileName);
             elis = new EditLogFileInputStream(file, HdfsConstants.InvalidTxid, HdfsConstants.
                                               InvalidTxid, false);
             loader = new OfflineEditsBinaryLoader(visitor, elis, flags);
         }
         finally
         {
             if ((loader == null) && (elis != null))
             {
                 elis.Close();
             }
         }
         return(loader);
     }
 }