/// <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."); } }