/// <exception cref="System.IO.IOException"/>
 public virtual void ContainerFinished(ContainerFinishData containerFinish)
 {
     FileSystemApplicationHistoryStore.HistoryFileWriter hfWriter = GetHistoryFileWriter
                                                                        (containerFinish.GetContainerId().GetApplicationAttemptId().GetApplicationId());
     System.Diagnostics.Debug.Assert(containerFinish is ContainerFinishDataPBImpl);
     try
     {
         hfWriter.WriteHistoryData(new FileSystemApplicationHistoryStore.HistoryDataKey(containerFinish
                                                                                        .GetContainerId().ToString(), FinishDataSuffix), ((ContainerFinishDataPBImpl)containerFinish
                                                                                                                                          ).GetProto().ToByteArray());
         Log.Info("Finish information of container " + containerFinish.GetContainerId() +
                  " is written");
     }
     catch (IOException e)
     {
         Log.Error("Error when writing finish information of container " + containerFinish
                   .GetContainerId(), e);
     }
 }
        /// <exception cref="System.IO.IOException"/>
        public virtual void ContainerFinished(ContainerFinishData containerFinish)
        {
            ConcurrentMap <ContainerId, ContainerHistoryData> subMap = GetSubMap(containerFinish
                                                                                 .GetContainerId().GetApplicationAttemptId());
            ContainerHistoryData data = subMap[containerFinish.GetContainerId()];

            if (data == null)
            {
                throw new IOException("The finish information of container " + containerFinish.GetContainerId
                                          () + " is stored before" + " the start information.");
            }
            // Make the assumption that ContainerState should not be null if
            // the finish information is already recorded
            if (data.GetContainerState() != null)
            {
                throw new IOException("The finish information of container " + containerFinish.GetContainerId
                                          () + " is already stored.");
            }
            data.SetFinishTime(containerFinish.GetFinishTime());
            data.SetDiagnosticsInfo(containerFinish.GetDiagnosticsInfo());
            data.SetContainerExitStatus(containerFinish.GetContainerExitStatus());
            data.SetContainerState(containerFinish.GetContainerState());
        }