appTokenKeepAliveMap in NodeStatusUpdaterImpl is used to keep application alive after application is finished but NM still need app token to do log aggregation (when enable security and log aggregation).
The applications are only inserted into this map when receiving getApplicationsToCleanup() from RM heartbeat response. And RM only send this info one time in RMNodeImpl.updateNodeHeartbeatResponseForCleanup(). NM restart work preserving should put appTokenKeepAliveMap into NMStateStore and get recovered after restart. Without doing this, RM could terminate application earlier, so log aggregation could be failed if security is enabled.