@Override
 protected void storeApplicationStateInternal(
     ApplicationId appId, ApplicationStateData appStateData) throws IOException {
   String key = getApplicationNodeKey(appId);
   if (LOG.isDebugEnabled()) {
     LOG.debug("Storing state for app " + appId + " at " + key);
   }
   try {
     db.put(bytes(key), appStateData.getProto().toByteArray());
   } catch (DBException e) {
     throw new IOException(e);
   }
 }
  @Override
  public synchronized void updateApplicationStateInternal(
      ApplicationId appId, ApplicationStateData appStateDataPB) throws Exception {
    Path appDirPath = getAppDir(rmAppRoot, appId);
    Path nodeCreatePath = getNodePath(appDirPath, appId.toString());

    LOG.info("Updating info for app: " + appId + " at: " + nodeCreatePath);
    byte[] appStateData = appStateDataPB.getProto().toByteArray();
    try {
      // currently throw all exceptions. May need to respond differently for HA
      // based on whether we have lost the right to write to FS
      updateFile(nodeCreatePath, appStateData, true);
    } catch (Exception e) {
      LOG.info("Error updating info for app: " + appId, e);
      throw e;
    }
  }