/// <exception cref="System.IO.IOException"/>
 public virtual ApplicationHistoryData GetApplication(ApplicationId appId)
 {
     FileSystemApplicationHistoryStore.HistoryFileReader hfReader = GetHistoryFileReader
                                                                        (appId);
     try
     {
         bool readStartData  = false;
         bool readFinishData = false;
         ApplicationHistoryData historyData = ApplicationHistoryData.NewInstance(appId, null
                                                                                 , null, null, null, long.MinValue, long.MinValue, long.MaxValue, null, FinalApplicationStatus
                                                                                 .Undefined, null);
         while ((!readStartData || !readFinishData) && hfReader.HasNext())
         {
             FileSystemApplicationHistoryStore.HistoryFileReader.Entry entry = hfReader.Next();
             if (entry.key.id.Equals(appId.ToString()))
             {
                 if (entry.key.suffix.Equals(StartDataSuffix))
                 {
                     ApplicationStartData startData = ParseApplicationStartData(entry.value);
                     MergeApplicationHistoryData(historyData, startData);
                     readStartData = true;
                 }
                 else
                 {
                     if (entry.key.suffix.Equals(FinishDataSuffix))
                     {
                         ApplicationFinishData finishData = ParseApplicationFinishData(entry.value);
                         MergeApplicationHistoryData(historyData, finishData);
                         readFinishData = true;
                     }
                 }
             }
         }
         if (!readStartData && !readFinishData)
         {
             return(null);
         }
         if (!readStartData)
         {
             Log.Warn("Start information is missing for application " + appId);
         }
         if (!readFinishData)
         {
             Log.Warn("Finish information is missing for application " + appId);
         }
         Log.Info("Completed reading history information of application " + appId);
         return(historyData);
     }
     catch (IOException e)
     {
         Log.Error("Error when reading history file of application " + appId, e);
         throw;
     }
     finally
     {
         hfReader.Close();
     }
 }
        /// <exception cref="System.IO.IOException"/>
        public virtual void ApplicationStarted(ApplicationStartData appStart)
        {
            ApplicationHistoryData oldData = applicationData.PutIfAbsent(appStart.GetApplicationId
                                                                             (), ApplicationHistoryData.NewInstance(appStart.GetApplicationId(), appStart.GetApplicationName
                                                                                                                        (), appStart.GetApplicationType(), appStart.GetQueue(), appStart.GetUser(), appStart
                                                                                                                    .GetSubmitTime(), appStart.GetStartTime(), long.MaxValue, null, null, null));

            if (oldData != null)
            {
                throw new IOException("The start information of application " + appStart.GetApplicationId
                                          () + " is already stored.");
            }
        }