/**
   * @return Progress for the specified taskId
   * @param taskId where progress refers to TaskId is also used to get the path where the progress
   *     is stored.
   * @throws AccessDeniedOrObjectDoesNotExistException
   */
  private String getProgress(String taskId) throws AccessDeniedOrObjectDoesNotExistException {

    final String key = taskId + "/" + PROGRESS_KEY;
    LOGGER.info("fetching progress for task with key {}", key);

    String currentValue = pManager.getCurrentValue(key);
    if (currentValue == null) {
      throw new AccessDeniedOrObjectDoesNotExistException(
          "Progress for taskId: [" + taskId + "] not found..");
    }

    return currentValue;
  }
  /**
   * Increases the current value of the specified @param metric by 1.
   *
   * @param taskId Metric belongs to this taskId
   *     <p>TaskId is used to generate the path where the metric will be stored.
   */
  private void incr(String taskId, String metric) {

    final String key = taskId + "/" + metric;
    String currentValue = pManager.getCurrentValue(key);

    if (currentValue == null) {
      currentValue = "0";
    }

    int c = Integer.parseInt(currentValue);
    c += 1;

    pManager.updateValue(key, c + "");
  }