Jian He commented on YARN-1372:

Thanks for updating the patch! I think we are very close, 
- In 
 calling  {{context.getNMStateStore().removeContainer(containerId);}} will 
remove containers from state-store before containers expired in 
recentlyStoppedContainers. I think we should, in the while loop of 
removeVeryOldStoppedContainersFromCache, check if container exists in context 
or not. if it doesn’t exist, remove from state-store.
- NodeHeartBeatResponse#addFinishedContainersPulledByAM, could you add comments 
about why we adding this new API? as this is not obvious to other new people.
- Thought more about finishedContainersSentToAM in BaseFinalTransition. I think 
we should always transfer the finishedContainersSentToAM to the next attempt 
regardless work-preserving AM restart is enabled or not, so that the restarted 
AM can continuously ack previously finishedContainers, in case the previous AM 
crashes. Otherwise, the not-yet-acked containers will remain on NM for the 
lifeTime of application instead of attempt. And then we can clear 
justFinishedContainers and finishedContainersSentToAM in the 
RMAppImpl#FinalTransition as they are not needed anymore. your opinion ?

- Could you also explicitly check the previous containerPulledByAM doesn’t exist
Assert.assertEquals(statuses.size(), 3);
Assert.assertEquals(context.getContainers().size(), 3);
- Tests covered that containers are removed from context, only if it gets the 
notification from RM. I think we need one more unit test on RM side that, the 
containersPulledByAM won’t be sent in the nodeHeartBeatResponse only if AM 
explicitly calls allocate to ack these finishedContainers.
- missing brackets for the for loop and also the indentation.
for (Container container: containers.values())

> Ensure all completed containers are reported to the AMs across RM restart
> -------------------------------------------------------------------------
>                 Key: YARN-1372
>                 URL: https://issues.apache.org/jira/browse/YARN-1372
>             Project: Hadoop YARN
>          Issue Type: Sub-task
>          Components: resourcemanager
>            Reporter: Bikas Saha
>            Assignee: Anubhav Dhoot
>         Attachments: YARN-1372.001.patch, YARN-1372.001.patch, 
> YARN-1372.002_NMHandlesCompletedApp.patch, 
> YARN-1372.002_RMHandlesCompletedApp.patch, 
> YARN-1372.002_RMHandlesCompletedApp.patch, YARN-1372.003.patch, 
> YARN-1372.004.patch, YARN-1372.005.patch, YARN-1372.005.patch, 
> YARN-1372.prelim.patch, YARN-1372.prelim2.patch
> Currently the NM informs the RM about completed containers and then removes 
> those containers from the RM notification list. The RM passes on that 
> completed container information to the AM and the AM pulls this data. If the 
> RM dies before the AM pulls this data then the AM may not be able to get this 
> information again. To fix this, NM should maintain a separate list of such 
> completed container notifications sent to the RM. After the AM has pulled the 
> containers from the RM then the RM will inform the NM about it and the NM can 
> remove the completed container from the new list. Upon re-register with the 
> RM (after RM restart) the NM should send the entire list of completed 
> containers to the RM along with any other containers that completed while the 
> RM was dead. This ensures that the RM can inform the AM's about all completed 
> containers. Some container completions may be reported more than once since 
> the AM may have pulled the container but the RM may die before notifying the 
> NM about the pull.

This message was sent by Atlassian JIRA

Reply via email to