Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
#Changelog
## 8.0.3 (2020-09-25)
* 优化日志统计
* 优化内存峰值

## 8.0.2 (2020-09-14)
* 优化日志流程

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ https://github.com/qiniudemo/qiniu-lab-android
| 7.0.7 | Android 2.2+ | android-async-http 1.4.8 |

### 注意
* 推荐使用最新版:8.0.2
* 推荐使用最新版:8.0.3
* AndroidNetwork.getMobileDbm()可以获取手机信号强度,需要如下权限(API>=18时生效)
```
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Expand Down
2 changes: 1 addition & 1 deletion library/library.iml
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debug/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debug/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugAndroidTest/out" isTestSource="true" generated="true" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public void testReportErrorType(){
responseInfo = createResponseInfo(ResponseInfo.NetworkSSLError);
assertTrue(ReportItem.qualityResult(responseInfo).equals("ssl_error"));

responseInfo = createResponseInfo(ResponseInfo.PasrseError);
responseInfo = createResponseInfo(ResponseInfo.ParseError);
assertTrue(ReportItem.qualityResult(responseInfo).equals("parse_error"));

responseInfo = createResponseInfo(ResponseInfo.MaliciousResponseError);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ public String toJson(){
public static final String QualityKeyLogType = "log_type";
public static final String QualityKeyUpTime = "up_time";
public static final String QualityKeyResult = "result";
public static final String QualityKeyTargetBucket = "target_bucket";
public static final String QualityKeyTargetKey = "target_key";
public static final String QualityKeyTotalElapsedTime = "total_elapsed_time";
public static final String QualityKeyRequestsCount = "requests_count";
public static final String QualityKeyRegionsCount = "regions_count";
Expand Down Expand Up @@ -135,7 +137,7 @@ public static String requestReportErrorType(ResponseInfo responseInfo){
errorType = "transmission_error";
} else if (responseInfo.statusCode == ResponseInfo.NetworkSSLError){
errorType = "ssl_error";
} else if (responseInfo.statusCode == ResponseInfo.PasrseError){
} else if (responseInfo.statusCode == ResponseInfo.ParseError){
errorType = "parse_error";
} else if (responseInfo.statusCode == ResponseInfo.MaliciousResponseError){
errorType = "malicious_response";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,8 @@ public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics reque
cleanTempLogFile();
}
isReporting = false;

destroyTransactionResource();
}
});

Expand Down Expand Up @@ -233,4 +235,7 @@ private RequestTransaction createUploadRequestTransaction(String tokenString){
return transaction;
}

private void destroyTransactionResource(){
transaction = null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@


public final class Constants {
public static final String VERSION = "8.0.2";
public static final String VERSION = "8.0.3";

public static final String UTF_8 = "utf-8";
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
* 定义HTTP请求的日志信息和常规方法
*/
public final class ResponseInfo {
@Deprecated
public static final int ResquestSuccess = 200;
public static final int RequestSuccess = 200;
public static final int ZeroSizeFile = -6;
public static final int InvalidToken = -5;
public static final int InvalidArgument = -4;
Expand All @@ -36,7 +38,9 @@ public final class ResponseInfo {
public static final int NetworkSSLError = -1200;
public static final int NetworkProtocolError = 100;
public static final int NetworkSlow = -1009;
public static final int PasrseError= -1015;
public static final int ParseError = -1015;
@Deprecated
public static final int PasrseError = -1015;

// -->
/**
Expand Down Expand Up @@ -195,7 +199,7 @@ public boolean isCancelled() {
}

public boolean isOK() {
return statusCode == ResquestSuccess && error == null && (hasReqId() || response != null);
return statusCode == RequestSuccess && error == null && (hasReqId() || response != null);
}

public boolean couldRetry(){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,12 @@ public Long totalResponseTime(){
return time(responseStartDate, responseEndDate);
}

public void setRequest(Request request){
if (request != null){
this.request = new Request(request.urlString, request.httpMethod, request.allHeaders, null, request.timeout);
}
}

public Long totalBytes(){
long headerLength = 0;
long bodyLength = 0 ;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ private void performRequest(IUploadServer server,
} else {
toSkipDns = true;
}
Request request = new Request(urlString, method, header, data, config.connectTimeout);
final Request request = new Request(urlString, method, header, data, config.connectTimeout);
request.host = serverHost;
request.ip = serverIP;
request.uploadServer = server;
Expand All @@ -112,11 +112,14 @@ public void complete(ResponseInfo responseInfo, ArrayList<UploadSingleRequestMet

IUploadServer newServer = getNextServer(responseInfo);
if (newServer != null){
performRequest(newServer, action, isAsync, data, header, method, shouldRetryHandler, progressHandler, completeHandler);
performRequest(newServer, action, isAsync, request.httpBody, header, method, shouldRetryHandler, progressHandler, completeHandler);
request.httpBody = null;
} else {
request.httpBody = null;
completeAction(responseInfo, response, completeHandler);
}
} else {
request.httpBody = null;
completeAction(responseInfo, response, completeHandler);
}
}
Expand All @@ -129,6 +132,7 @@ private void completeAction(ResponseInfo responseInfo,
JSONObject response,
RequestCompleteHandler completeHandler){

singleRequest = null;
if (completeHandler != null){
completeHandler.complete(responseInfo, requestMetrics, response);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,20 +107,11 @@ public void complete(ResponseInfo responseInfo, UploadSingleRequestMetrics metri
&& responseInfo.couldHostRetry()){
currentRetryTime += 1;

if (isAsync) {
AsyncRun.runInBack(config.retryInterval, new Runnable() {
@Override
public void run() {
retryRequest(request, isAsync, toSkipDns, shouldRetryHandler, progressHandler, completeHandler);
}
});
} else {
try {
Thread.sleep(config.retryInterval);
} catch (InterruptedException ignored) {
}
retryRequest(request, isAsync, toSkipDns, shouldRetryHandler, progressHandler, completeHandler);
try {
Thread.sleep(config.retryInterval);
} catch (InterruptedException ignored) {
}
retryRequest(request, isAsync, toSkipDns, shouldRetryHandler, progressHandler, completeHandler);
} else {
completeAction(request, responseInfo, response, metrics, completeHandler);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ public class Request {
public final String urlString;
public final String httpMethod;
public final Map<String, String> allHeaders;
public final byte[] httpBody;
public final int timeout;
public byte[] httpBody;

public String host;
public String ip;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public boolean shouldRetry(ResponseInfo responseInfo, JSONObject response) {
regionRequest.get(action, isAsync, header, shouldRetryHandler, new HttpRegionRequest.RequestCompleteHandler() {
@Override
public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics requestMetrics, JSONObject response) {
completeHandler.complete(responseInfo, requestMetrics, response);
completeAction(responseInfo, requestMetrics, response, completeHandler);
}
});
}
Expand Down Expand Up @@ -175,10 +175,11 @@ public boolean shouldRetry(ResponseInfo responseInfo, JSONObject response) {
return ! responseInfo.isOK();
}
};

regionRequest.post(null, isAsync, body, header, shouldRetryHandler, progressHandler, new HttpRegionRequest.RequestCompleteHandler() {
@Override
public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics requestMetrics, JSONObject response) {
completeHandler.complete(responseInfo, requestMetrics, response);
completeAction(responseInfo, requestMetrics, response, completeHandler);
}
});
}
Expand Down Expand Up @@ -218,35 +219,36 @@ public boolean shouldRetry(ResponseInfo responseInfo, JSONObject response) {
return !responseInfo.isOK() || ctx == null || crcServer == null || !chunkCrc.equals(crcServer);
}
};

regionRequest.post(action, isAsync, firstChunkData, header, shouldRetryHandler, progressHandler, new HttpRegionRequest.RequestCompleteHandler() {
@Override
public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics requestMetrics, JSONObject response) {
completeHandler.complete(responseInfo, requestMetrics, response);
completeAction(responseInfo, requestMetrics, response, completeHandler);
}
});
}

public void uploadChunk(String blockContext,
long blockOffset,
byte[] chunkData,
long chunkOffest,
long chunkOffset,
boolean isAsync,
final RequestProgressHandler progressHandler,
final RequestCompleteHandler completeHandler){

requestInfo.requestType = UploadRequestInfo.RequestTypeBput;
requestInfo.fileOffset = new Long((blockOffset + chunkOffest));
requestInfo.fileOffset = new Long((blockOffset + chunkOffset));

String token = String.format("UpToken %s", (this.token.token != null ? this.token.token : ""));
HashMap <String, String> header = new HashMap<String, String>();
header.put("Authorization", token);
header.put("Content-Type", "application/octet-stream");
header.put("User-Agent", userAgent);

String action = String.format("/bput/%s/%d", blockContext, chunkOffest);
String action = String.format("/bput/%s/%d", blockContext, chunkOffset);
final String chunkCrc = String.format("%d", Crc32.bytes(chunkData));

LogUtil.i(String.format("blockOffset:%d chunkOffest:%d chunkSize:%d", blockOffset, chunkOffest, chunkData.length));
LogUtil.i(String.format("blockOffset:%d chunkOffset:%d chunkSize:%d", blockOffset, chunkOffset, chunkData.length));

RequestShouldRetryHandler shouldRetryHandler = new RequestShouldRetryHandler() {
@Override
Expand All @@ -265,10 +267,11 @@ public boolean shouldRetry(ResponseInfo responseInfo, JSONObject response) {
return ! responseInfo.isOK() || ctx == null || crcServer == null || !chunkCrc.equals(crcServer);
}
};

regionRequest.post(action, isAsync, chunkData, header, shouldRetryHandler, progressHandler, new HttpRegionRequest.RequestCompleteHandler() {
@Override
public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics requestMetrics, JSONObject response) {
completeHandler.complete(responseInfo, requestMetrics, response);
completeAction(responseInfo, requestMetrics, response, completeHandler);
}
});
}
Expand All @@ -283,7 +286,7 @@ public void makeFile(long fileSize,

if (blockContexts == null){
ResponseInfo responseInfo = ResponseInfo.invalidArgument("invalid blockContexts");
completeHandler.complete(responseInfo, null, responseInfo.response);
completeAction(responseInfo, null, responseInfo.response, completeHandler);
return;
}

Expand Down Expand Up @@ -325,7 +328,7 @@ public boolean shouldRetry(ResponseInfo responseInfo, JSONObject response) {
regionRequest.post(action, isAsync, body, header, shouldRetryHandler, null, new HttpRegionRequest.RequestCompleteHandler() {
@Override
public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics requestMetrics, JSONObject response) {
completeHandler.complete(responseInfo, requestMetrics, response);
completeAction(responseInfo, requestMetrics, response, completeHandler);
}
});
}
Expand Down Expand Up @@ -353,14 +356,28 @@ public boolean shouldRetry(ResponseInfo responseInfo, JSONObject response) {
return !responseInfo.isOK();
}
};

regionRequest.post("/log/4?compressed=gzip", isAsync, GZipUtil.gZip(logData), header, shouldRetryHandler, null, new HttpRegionRequest.RequestCompleteHandler() {
@Override
public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics requestMetrics, JSONObject response) {
completeHandler.complete(responseInfo, requestMetrics, response);
completeAction(responseInfo, requestMetrics, response, completeHandler);
}
});
}

private void completeAction(ResponseInfo responseInfo,
UploadRegionRequestMetrics requestMetrics,
JSONObject response,
RequestCompleteHandler completeHandler){
requestInfo = null;
regionRequest = null;
regionRequest = null;

if (completeHandler != null){
completeHandler.complete(responseInfo, requestMetrics, response);
}
}

public interface RequestCompleteHandler {
void complete(ResponseInfo responseInfo,
UploadRegionRequestMetrics requestMetrics,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,8 @@ public static class UploadData {
public boolean isUploading;
public double progress;

public byte[] data;

public UploadData(long offset,
long size,
int index,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,22 +51,28 @@ public class SystemHttpClient implements IRequestClient {
public static final String JsonMime = "application/json";
public static final String FormMime = "application/x-www-form-urlencoded";

private Request currentRequest;
private OkHttpClient httpClient;
private Call call;
private UploadSingleRequestMetrics metrics;
private RequestClientProgress requestProgress;
private RequestClientCompleteHandler completeHandler;

@Override
public void request(final Request request,
public void request(Request request,
boolean isAsync,
ProxyConfiguration connectionProxy,
RequestClientProgress progress,
final RequestClientCompleteHandler complete) {
RequestClientCompleteHandler complete) {

metrics = new UploadSingleRequestMetrics();
metrics.request = request;

metrics.setRequest(request);
currentRequest = request;
httpClient = createHttpClient(request, connectionProxy);
okhttp3.Request.Builder requestBuilder = createRequestBuilder(request, progress);
requestProgress = progress;
completeHandler = complete;

okhttp3.Request.Builder requestBuilder = createRequestBuilder(request, requestProgress);
if (requestBuilder == null){
ResponseInfo responseInfo = ResponseInfo.invalidArgument("invalid http request");
handleError(request, responseInfo.statusCode, responseInfo.message, complete);
Expand All @@ -87,12 +93,12 @@ public void onFailure(Call call, IOException e) {
status = ResponseInfo.Cancelled;
msg = "user cancelled";
}
handleError(request, status, msg, complete);
handleError(currentRequest, status, msg, completeHandler);
}

@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
handleResponse(request, response, complete);
handleResponse(currentRequest, response, completeHandler);
}
});

Expand Down Expand Up @@ -362,7 +368,7 @@ private synchronized void handleResponse(Request request,
try {
responseJson = buildJsonResp(responseBody);
} catch (Exception e) {
statusCode = ResponseInfo.PasrseError;
statusCode = ResponseInfo.ParseError;
errorMessage = e.getMessage();
}
}
Expand All @@ -376,6 +382,10 @@ private synchronized void handleResponse(Request request,
}

private void releaseResource(){
this.currentRequest = null;
this.requestProgress = null;
this.completeHandler = null;
this.metrics = null;
this.httpClient = null;
this.call = null;
}
Expand Down
Loading