All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.aliyun.odps.commons.GeneralConfiguration Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package com.aliyun.odps.commons;

import java.net.URI;
import java.net.URISyntaxException;

import com.aliyun.odps.Odps;
import com.aliyun.odps.OdpsException;
import com.aliyun.odps.account.Account;
import com.aliyun.odps.rest.ResourceBuilder;

/**
 * Created by dongxiao.dx on 2015/9/7.
 */
public class GeneralConfiguration {

  /**
   * 上传数据的默认块大小(单位字节)。默认值按照MTU-4设置,MTU值1500。
   */
  // MTU - chunk length - \r\n
  public static int DEFAULT_CHUNK_SIZE = 1500 - 4;

  /**
   * 底层网络链接的默认超时时间,180秒
   */
  public static int DEFAULT_SOCKET_CONNECT_TIMEOUT = 180; // seconds

  /**
   * 底层网络默认超时时间, 300秒。
   */
  public static int DEFAULT_SOCKET_TIMEOUT = 300;// seconds

  protected Odps odps;

  private int chunkSize = DEFAULT_CHUNK_SIZE;
  private int socketConnectTimeout = DEFAULT_SOCKET_CONNECT_TIMEOUT;
  private int socketTimeout = DEFAULT_SOCKET_TIMEOUT;

  // Server endpoint
  protected URI endpoint;

  public GeneralConfiguration(Odps odps) {
    this.odps = odps;
  }

  public Account getAccount() {
    return odps.getAccount();
  }

  public URI getEndpoint(String projectName) throws OdpsException {
    if (endpoint != null) {
      return endpoint;
    }
    throw new OdpsException("Endpoint not set yet!");
  }

  /**
   * Set endpoint
   *
   * @param endpoint
   */
  public void setEndpoint(URI endpoint) {
    if (endpoint == null) {
      throw new IllegalArgumentException("Missing endpoint.");
    }
    this.endpoint = endpoint;
  }

  /**
   * 取得URI
   *
   * @param projectName
   * @param tableName
   * @return
   * @throws OdpsException
   */
  public URI getURI(String projectName, String tableName) throws OdpsException {
    StringBuilder sb = new StringBuilder();
    String e = getEndpoint(projectName).toString();
    sb.append(e);
    if (!e.endsWith("/")) {
      sb.append("/");
    }
    sb.append("projects/");
    sb.append(projectName);
    sb.append("/tables/").append(tableName);
    try {
      return new URI(sb.toString());
    } catch (URISyntaxException e1) {
      throw new RuntimeException(e1);
    }
  }

  /**
   * 获得RESTful资源标识符
   *
   * @param projectName
   * @param tableName
   * @return
   */
  public String getResource(String projectName, String tableName) {
    return ResourceBuilder.buildTableResource(projectName, tableName);
  }

  /**
   * 获得Stream upload数据的RESTful资源标识符
   *
   * @param projectName
   * @param tableName
   * @param shardId
   * @return
   */
  public String getStreamUploadResource(String projectName, String tableName, long shardId) {
    StringBuilder sb = new StringBuilder();
    sb.append(getResource(projectName, tableName))
      .append("/shards/")
      .append(Long.toString(shardId));

    return sb.toString();
  }

  /**
   * 获得流式上传的RESTful资源标识符
   *
   * @param projectName
   * @param tableName
   * @return
   */
  public String getStreamUploadResource(String projectName, String tableName) {
    StringBuilder sb = new StringBuilder();
    sb.append(getResource(projectName, tableName)).append("/shards");

    return sb.toString();
  }

  /**
   * 取得当前配置的数据传输块大小
   *
   * @return 当前配置的块大小
   * @see GeneralConfiguration#DEFAULT_CHUNK_SIZE
   */
  public int getChunkSize() {
    return chunkSize;
  }

  /**
   * 设置上传数据时HTTP使用的块大小(单位字节)。
   * 

* 通过ProtobufRecordStreamWriter上传的数据会被以chunked方式编码在HTTP通道上传 * 输。可以通过 getChunkSize()查询当前配置的块大小。 *

* *

* 一般情况下不建议修改默认值。 *

* * @param chunkSize * 块大小 * @see GeneralConfiguration#DEFAULT_CHUNK_SIZE * @see GeneralConfiguration#getChunkSize() */ public void setChunkSize(int chunkSize) { this.chunkSize = chunkSize; } /** * 取得当前配置的网络链接超时时间, 单位秒 * * @return 网络链接超时时间 */ public int getSocketConnectTimeout() { return socketConnectTimeout; } /** * 设置网络链接超时时间, 单位秒 * * @param timeout * 超时时间 */ public void setSocketConnectTimeout(int timeout) { this.socketConnectTimeout = timeout; } /** * 取得当前配置的网络IO超时时间, 秒 * * @return 超时时间 */ public int getSocketTimeout() { return socketTimeout; } /** * 设置网络IO超时时间, 秒 * *

* NOTICE: 此值等于HTTP请求的超时时间。对应不同的API请求,SDK会使用不同的 默认值, * 除非必要, 请不要修改默认值。 *

* * @param timeout * 超时时间 * @see java.net.URLConnection#setReadTimeout(int) */ public void setSocketTimeout(int timeout) { this.socketTimeout = timeout; } /** * 获取User-Agent信息 * * @return User-Agent信息 */ public String getUserAgent() { return odps.getUserAgent(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy