Skip to content

Commit

Permalink
Log : add http2 support
Browse files Browse the repository at this point in the history
  • Loading branch information
1019272778 committed Aug 16, 2018
1 parent 2c4f9ef commit 6837751
Show file tree
Hide file tree
Showing 9 changed files with 143 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.alibaba.sdk.android.oss.OSS;
import com.alibaba.sdk.android.oss.OSSClient;
import com.alibaba.sdk.android.oss.common.OSSLog;
import com.alibaba.sdk.android.oss.common.utils.HttpdnsMini;
import com.alibaba.sdk.android.oss.model.CreateBucketRequest;

import static com.alibaba.sdk.android.oss.model.CannedAccessControlList.PublicReadWrite;
Expand All @@ -22,11 +23,13 @@ public abstract class BaseTestCase extends AndroidTestCase {
abstract void initTestData() throws Exception;

protected void initOSSClient() {
HttpdnsMini.getInstance().isHttp2Test = false;
ClientConfiguration conf = new ClientConfiguration();
conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个
conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
//ClientConfiguration 链接和socket 已经改为60s了
// conf.setConnectionTimeout(60 * 1000); // 连接超时,默认15秒
// conf.setSocketTimeout(60 * 1000); // socket超时,默认15秒
// conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个
// conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
// conf.setHttpDnsEnable(false);
oss = new OSSClient(getContext(), OSSTestConfig.ENDPOINT, OSSTestConfig.credentialProvider,conf);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package com.alibaba.sdk.android;

import android.test.AndroidTestCase;

import com.alibaba.sdk.android.oss.ClientConfiguration;
import com.alibaba.sdk.android.oss.OSS;
import com.alibaba.sdk.android.oss.OSSClient;
import com.alibaba.sdk.android.oss.common.OSSLog;
import com.alibaba.sdk.android.oss.common.utils.HttpdnsMini;
import com.alibaba.sdk.android.oss.internal.OSSAsyncTask;
import com.alibaba.sdk.android.oss.model.GetObjectRequest;
import com.alibaba.sdk.android.oss.model.HeadObjectRequest;
import com.alibaba.sdk.android.oss.model.HeadObjectResult;
import com.alibaba.sdk.android.oss.model.PutObjectRequest;

/**
* Created by wangzheng on 2018/8/2.
*/

public class OSSHttp2Test extends AndroidTestCase {
protected String mBucketName;
protected OSS oss;


void initTestData() throws Exception {
OSSTestConfig.initLocalFile();
OSSTestConfig.initDemoFile("guihua.zip");
OSSTestConfig.initDemoFile("demo.pdf");
}

protected void initOSSClient() {
HttpdnsMini.getInstance().isHttp2Test = true;
ClientConfiguration conf = new ClientConfiguration();
conf.setConnectionTimeout(60 * 1000); // 连接超时,默认60秒
conf.setSocketTimeout(60 * 1000); // socket超时,默认60秒
conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个
conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
oss = new OSSClient(getContext(), OSSTestConfig.ENDPOINT, OSSTestConfig.credentialProvider,conf);
OSSLog.enableLog();
}


@Override
protected void setUp() throws Exception {
super.setUp();
mBucketName = "zq-beijing";
OSSTestConfig.instance(getContext());
if (oss == null) {
OSSLog.enableLog();
initOSSClient();
initTestData();
}
}

@Override
protected void tearDown() throws Exception {
super.tearDown();
}


public void testMultiOperaion() throws Exception{
String fileName = "file1m.jpg";

for (int i = 0; i < 30; i++){
OSSLog.logDebug("===== " + i + " =====");
PutObjectRequest put = new PutObjectRequest(mBucketName, fileName,
OSSTestConfig.FILE_DIR + "file1m");
OSSTestConfig.TestPutCallback putCallback = new OSSTestConfig.TestPutCallback();

OSSAsyncTask task = oss.asyncPutObject(put, putCallback);
task.waitUntilFinished();
assertEquals(200, putCallback.result.getStatusCode());

HeadObjectRequest head = new HeadObjectRequest(mBucketName, fileName);
HeadObjectResult headResult = oss.headObject(head);

assertEquals("image/jpeg", headResult.getMetadata().getContentType());


GetObjectRequest request = new GetObjectRequest(mBucketName, fileName);
OSSTestConfig.TestGetCallback getCallback = new OSSTestConfig.TestGetCallback();

OSSAsyncTask getTask = oss.asyncGetObject(request, getCallback);
getTask.waitUntilFinished();

assertEquals(200, getCallback.result.getStatusCode());
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ public class ClientConfiguration {

private static final int DEFAULT_MAX_RETRIES = 2;
private int maxConcurrentRequest = 5;
private int socketTimeout = 15 * 1000;
private int connectionTimeout = 15 * 1000;
private int socketTimeout = 60 * 1000;
private int connectionTimeout = 60 * 1000;
private long max_log_size = 5 * 1024 * 1024;
private int maxErrorRetry = DEFAULT_MAX_RETRIES;
private List<String> customCnameExcludeList = new ArrayList<String>();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.alibaba.sdk.android.oss.common.utils;

import java.util.HashMap;

/**
* Created by wangzheng on 2018/7/12.
*/

public class CaseInsensitiveHashMap<k,v> extends HashMap<k,v> {
@Override
//只能做到小写和驼峰兼容。
public v get(Object key) {
//兼容http2.0
if (key != null && !containsKey(key) && key instanceof String){
String lowCaseKey = ((String) key).toLowerCase();
if (containsKey(lowCaseKey)){
return get(lowCaseKey);
}else{
return null;
}
}
return super.get(key);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ public class HttpdnsMini {
private ConcurrentMap<String, HostObject> hostManager = new ConcurrentHashMap<String, HostObject>();
private ExecutorService pool = Executors.newFixedThreadPool(MAX_THREAD_NUM);

public boolean isHttp2Test = false;

private HttpdnsMini() {
}

Expand All @@ -51,6 +53,9 @@ public static HttpdnsMini getInstance() {
}

public String getIpByHostAsync(String hostName) {
if (isHttp2Test){
return "118.178.62.19";
}
HostObject host = hostManager.get(hostName);
if (host == null || host.isExpired()) {
OSSLog.logDebug("[httpdnsmini] - refresh host: " + hostName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.alibaba.sdk.android.oss.common.OSSHeaders;
import com.alibaba.sdk.android.oss.common.OSSLog;
import com.alibaba.sdk.android.oss.common.utils.CaseInsensitiveHashMap;
import com.alibaba.sdk.android.oss.model.OSSResult;

import java.io.IOException;
Expand Down Expand Up @@ -70,8 +71,8 @@ public T parse(ResponseMessage response) throws IOException {
}

//处理返回信息的信息头
private Map<String, String> parseResponseHeader(Response response) {
Map<String, String> result = new HashMap<String, String>();
private CaseInsensitiveHashMap<String, String> parseResponseHeader(Response response) {
CaseInsensitiveHashMap<String, String> result = new CaseInsensitiveHashMap<String, String>();
Headers headers = response.headers();
for (int i = 0; i < headers.size(); i++) {
result.put(headers.name(i), headers.value(i));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.alibaba.sdk.android.oss.internal;

import com.alibaba.sdk.android.oss.common.utils.CaseInsensitiveHashMap;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
Expand All @@ -10,7 +12,7 @@
*/

abstract class HttpMessage {
private Map<String, String> headers = new HashMap<String, String>();
private Map<String, String> headers = new CaseInsensitiveHashMap<String, String>();
private InputStream content;
private long contentLength;
private String stringBody;
Expand All @@ -21,7 +23,7 @@ public Map<String, String> getHeaders() {

public void setHeaders(Map<String, String> headers) {
if (this.headers == null) {
this.headers = new HashMap<String, String>();
this.headers = new CaseInsensitiveHashMap<String, String>();
}
if (this.headers != null && this.headers.size() > 0) {
this.headers.clear();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,16 +615,16 @@ public static ObjectMetadata parseObjectMetadata(Map<String, String> headers)

if (key.indexOf(OSSHeaders.OSS_USER_METADATA_PREFIX) >= 0) {
objectMetadata.addUserMetadata(key, headers.get(key));
} else if (key.equals(OSSHeaders.LAST_MODIFIED) || key.equals(OSSHeaders.DATE)) {
} else if (key.equalsIgnoreCase(OSSHeaders.LAST_MODIFIED) || key.equalsIgnoreCase(OSSHeaders.DATE)) {
try {
objectMetadata.setHeader(key, DateUtil.parseRfc822Date(headers.get(key)));
} catch (ParseException pe) {
throw new IOException(pe.getMessage(), pe);
}
} else if (key.equals(OSSHeaders.CONTENT_LENGTH)) {
} else if (key.equalsIgnoreCase(OSSHeaders.CONTENT_LENGTH)) {
Long value = Long.valueOf(headers.get(key));
objectMetadata.setHeader(key, value);
} else if (key.equals(OSSHeaders.ETAG)) {
} else if (key.equalsIgnoreCase(OSSHeaders.ETAG)) {
objectMetadata.setHeader(key, trimQuotes(headers.get(key)));
} else {
objectMetadata.setHeader(key, headers.get(key));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.alibaba.sdk.android.oss.common.OSSConstants;
import com.alibaba.sdk.android.oss.common.OSSHeaders;
import com.alibaba.sdk.android.oss.common.utils.CaseInsensitiveHashMap;
import com.alibaba.sdk.android.oss.common.utils.DateUtil;

import java.text.ParseException;
Expand All @@ -19,9 +20,9 @@ public class ObjectMetadata {
public static final String AES_256_SERVER_SIDE_ENCRYPTION = "AES256";
// User's custom metadata dictionary. All keys will be prefixed with x-oss-meta-in the HTTP headers.
// But the keys in this dictionary does not include x-oss-meta-in.
private Map<String, String> userMetadata = new HashMap<String, String>();
private Map<String, String> userMetadata = new CaseInsensitiveHashMap<String, String>();
// Standard metadata
private Map<String, Object> metadata = new HashMap<String, Object>();
private Map<String, Object> metadata = new CaseInsensitiveHashMap<String, Object>();

/**
* <p>
Expand Down

0 comments on commit 6837751

Please sign in to comment.