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