private static void MergeContainerHistoryData(ContainerHistoryData historyData, ContainerFinishData
                                               finishData)
 {
     historyData.SetFinishTime(finishData.GetFinishTime());
     historyData.SetDiagnosticsInfo(finishData.GetDiagnosticsInfo());
     historyData.SetContainerExitStatus(finishData.GetContainerExitStatus());
     historyData.SetContainerState(finishData.GetContainerState());
 }
        /// <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());
        }