@GET
  @Path("deletep")
  public Map<String, String> deletePartitionStorage(
      @QueryParam("ds") String datasource, @QueryParam("table") String table) {
    checkDSAndTable(datasource, table);

    Map<String, String> result = new HashMap<>();
    boolean isSuccess = false;
    try {
      service.delPartitionStorage(datasource, table);
      isSuccess = true;
    } catch (StorageHandleErrorException e) {
      result.put("error", e.getMessage());
    }
    result.put("result", isSuccess ? "success" : "fail");

    return result;
  }
  /**
   * Why wrapper primitive value into map? or Why not just return Integer or String on these REST
   * API?
   *
   * <p>Answer: front-end use ng-resource to request these API, And $resource want them to return
   * object. $resource can't parse primitive type. (ref to:
   * https://github.com/angular/angular.js/issues/4314) By Jacob, 6.23.2015.
   */
  @GET
  @Path("size")
  public Map<String, Object> getSize(
      @QueryParam("ds") String datasource, @QueryParam("table") String table) {
    checkDatasourceNotNull(datasource);

    Map<String, Object> result = new HashMap<>();
    try {
      if (null == table) {
        result.put("size", service.queryStorageSize(datasource));
      } else {
        result.put("size", service.queryStorageSize(datasource, table));
      }
    } catch (StorageHandleErrorException e) {
      result.put("error", e.getMessage());
    }
    return result;
  }