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
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

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.5 (2020-11-18)
* 缩短Host全局冻结默认时间
* 优化无可用Host的处理逻辑

## 8.0.4 (2020-11-03)
* 优化Host冻结逻辑带来客户端上传超时问题,提高上传成功率

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.4
* 推荐使用最新版:8.0.5
* AndroidNetwork.getMobileDbm()可以获取手机信号强度,需要如下权限(API>=18时生效)
```
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Expand Down
1 change: 1 addition & 0 deletions library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ android {
useLibrary 'android.test.mock'
}


dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.2.2'
implementation 'com.qiniu:happy-dns:0.2.16'
Expand Down
106 changes: 106 additions & 0 deletions library/library.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":library" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":library" />
<option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.5.2" />
<option name="LAST_KNOWN_AGP_VERSION" value="3.5.2" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/build/generated/res/resValues/debug" />
<option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
<option name="PROJECT_TYPE" value="1" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
<output url="file://$MODULE_DIR$/build/intermediates/javac/debug/classes" />
<output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<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/source/buildConfig/debug" isTestSource="false" generated="true" />
<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/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" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugUnitTest/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build" />
</content>
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.13@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:4.2.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okio:okio:2.2.2@jar" level="project" />
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.3.50@jar" level="project" />
<orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50@jar" level="project" />
<orderEntry type="library" name="Gradle: org.jetbrains:annotations:13.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.qiniu:happy-dns:0.2.16@jar" level="project" />
<orderEntry type="library" name="Gradle: org.conscrypt:conscrypt-android:2.2.1@aar" level="project" />
<orderEntry type="library" name="Gradle: android.test.mock-android-29" level="project" />
<orderEntry type="library" name="Gradle: android.test.base-android-29" level="project" />
<orderEntry type="library" name="Gradle: android.test.runner-android-29" level="project" />
</component>
</module>
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ private void template(int size) throws Throwable {
final UploadOptions options = getUploadOptions();
AsyncRun.runInMain(new Runnable() { // THIS IS THE KEY TO SUCCESS
public void run() {
uploadManager.put(f, expectKey, TestConfig.token_z0, new UpCompletionHandler() {
uploadManager.put(f, expectKey, TestConfig.token_na0, new UpCompletionHandler() {
public void complete(String k, ResponseInfo rinfo, JSONObject response) {
LogUtil.i(k + rinfo);
key = k;
Expand Down Expand Up @@ -130,14 +130,14 @@ private void template2(int size) throws Throwable {

final String expectKey = "android-resume-test2-" + size + "k";
final File f = TempFile.createFile(size);
String[] s = new String[]{"up.qbox.me", "upload.qiniup.com"};
String[] s = new String[]{"upload-na0.qbox.me", "up-na0.qbox.me"};
Zone z = new FixedZone(s);
Configuration c = new Configuration.Builder()
.zone(z).useConcurrentResumeUpload(true).useHttps(true)
.build();
UploadManager uploadManager2 = new UploadManager(c);
final UploadOptions options = getUploadOptions();
uploadManager2.put(f, expectKey, TestConfig.token_z0, new UpCompletionHandler() {
uploadManager2.put(f, expectKey, TestConfig.token_na0, new UpCompletionHandler() {
public void complete(String k, ResponseInfo rinfo, JSONObject response) {
LogUtil.i(k + rinfo);
key = k;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ private void template(int size, boolean useHttps) throws Throwable {

final String expectKey = "android-resume-test2-" + size + "k";
final File f = TempFile.createFile(size);
String[] s = new String[]{"up-na0.qbox.me"};
String[] s = new String[]{"up-na0.qbox.me", "upload-na0.qbox.me"};
Zone z = new FixedZone(s);

Configuration.Builder builder = new Configuration.Builder()
Expand Down
4 changes: 2 additions & 2 deletions library/src/androidTest/java/com/qiniu/android/RetryTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ private void template(int size, boolean hasValidHost, final CompleteHandler comp
"uptemp09.qbox.me", "uptemp10.qbox.me",
"uptemp11.qbox.me", "uptemp12.qbox.me",
"uptemp13.qbox.me", "uptemp14.qbox.me",
"upload.qiniup.com"};
"upload-na0.qbox.me", "up-na0.qbox.me"};
} else {
s = new String[]{"uptemp01.qbox.me", "uptemp02.qbox.me",
"uptemp03.qbox.me", "uptemp04.qbox.me",
Expand All @@ -167,7 +167,7 @@ public void progress(String key, double percent) {
LogUtil.i(("progress:" + percent));
}
}, null);
uploadManager.put(f, expectKey, TestConfig.token_z0, new UpCompletionHandler() {
uploadManager.put(f, expectKey, TestConfig.token_na0, new UpCompletionHandler() {

public void complete(String k, ResponseInfo rinfo, JSONObject response) {

Expand Down
3 changes: 0 additions & 3 deletions library/src/androidTest/java/com/qiniu/android/TokenTest.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package com.qiniu.android;

import android.test.AndroidTestCase;

import com.qiniu.android.storage.UpToken;

import junit.framework.Assert;

/**
* Created by bailong on 15/6/1.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.qiniu.android;

import com.qiniu.android.common.FixedZone;
import com.qiniu.android.http.request.IUploadServer;
import com.qiniu.android.http.serverRegion.UploadDomainRegion;
import com.qiniu.android.http.serverRegion.UploadServerFreezeManager;
import com.qiniu.android.utils.Utils;

public class UploadDomainRegionTest extends BaseTest {


public void testGetOneServer(){

String host = "baidu.com";
String type = Utils.getIpType(null, host);
FixedZone zone = new FixedZone(new String[]{host});

UploadDomainRegion region = new UploadDomainRegion();
region.setupRegionData(zone.getZonesInfo(null).zonesInfo.get(0));

UploadServerFreezeManager.getInstance().freezeHost(host, type, 100);

IUploadServer server = region.getNextServer(false, null, null);

assertNotNull(server);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.qiniu.android;

import com.qiniu.android.http.serverRegion.UploadServerFreezeManager;

public class UploadServerFreezeManagerTest extends BaseTest {

public void testFreeze() {

String host = "baidu.com";
String type = host;
UploadServerFreezeManager.getInstance().freezeHost(host, type, 10);

boolean isFrozen = UploadServerFreezeManager.getInstance().isFreezeHost(host, type);
assertTrue(isFrozen);
}

public void testUnfreeze() {

String host = "baidu.com";
String type = host;
UploadServerFreezeManager.getInstance().freezeHost(host, type, 10);

boolean isFrozen = UploadServerFreezeManager.getInstance().isFreezeHost(host, type);
assertTrue(isFrozen);

UploadServerFreezeManager.getInstance().unfreezeHost(host, type);
isFrozen = UploadServerFreezeManager.getInstance().isFreezeHost(host, type);
assertTrue(isFrozen == false);

}
}
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.4";
public static final String VERSION = "8.0.5";

public static final String UTF_8 = "utf-8";
}
19 changes: 17 additions & 2 deletions library/src/main/java/com/qiniu/android/http/ResponseInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,17 @@ public final class ResponseInfo {
@Deprecated
public static final int ResquestSuccess = 200;
public static final int RequestSuccess = 200;

public static final int UnexpectedSysCallError = -10;
public static final int NoUsableHostError = -9;
public static final int MaliciousResponseError = -8;
public static final int LocalIOError = -7;
public static final int ZeroSizeFile = -6;
public static final int InvalidToken = -5;
public static final int InvalidArgument = -4;
public static final int InvalidFile = -3;
public static final int Cancelled = -2;
public static final int NetworkError = -1;
public static final int LocalIOError = -7;
public static final int MaliciousResponseError = -8;

public static final int Crc32NotMatch = -406;

Expand Down Expand Up @@ -151,6 +154,18 @@ public static ResponseInfo localIOError(String desc) {
return errorInfo(LocalIOError, desc);
}

public static ResponseInfo maliciousResponseError(String desc) {
return errorInfo(MaliciousResponseError, desc);
}

public static ResponseInfo noUsableHostError(String desc) {
return errorInfo(NoUsableHostError, desc);
}

public static ResponseInfo unexpectedSysCallError(String desc) {
return errorInfo(UnexpectedSysCallError, desc);
}

public static ResponseInfo errorInfo(int statusCode, String error) {
ResponseInfo responseInfo = new ResponseInfo(null, null, statusCode, null, null, null, null, error);
return responseInfo;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ public long totalElapsedTime(){
}
long time = 0;
for (UploadSingleRequestMetrics metrics : metricsList){
time += metrics.totalElapsedTime();
if (metrics != null){
time += metrics.totalElapsedTime();
}
}
return time;
}
Expand All @@ -34,13 +36,22 @@ public Long bytesSend(){
}
long bytes = 0;
for (UploadSingleRequestMetrics metrics : metricsList){
bytes += metrics.bytesSend();
if (metrics != null) {
bytes += metrics.bytesSend();
}
}
return bytes;
}

public void addMetricsList(ArrayList<UploadSingleRequestMetrics> metricsList){
this.metricsList.addAll(0, metricsList);
if (metricsList == null || metricsList.size() == 0){
return;
}
for (UploadSingleRequestMetrics metrics : metricsList) {
if (metrics != null){
this.metricsList.add(metrics);
}
}
}

public void addMetrics(UploadRegionRequestMetrics metrics){
Expand All @@ -54,7 +65,7 @@ public void addMetrics(UploadRegionRequestMetrics metrics){
String thisRegionId = metrics.region.getZoneInfo().getRegionId();
String metricsRegionId = metrics.region.getZoneInfo().getRegionId();
if (thisRegionId.equals(metricsRegionId)){
metricsList.addAll(0, metrics.metricsList);
addMetricsList(metrics.metricsList);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ private void performRequest(IUploadServer server,
final RequestCompleteHandler completeHandler){

if (server == null || server.getHost() == null || server.getHost().length() == 0) {
ResponseInfo responseInfo = ResponseInfo.invalidArgument("server error");
ResponseInfo responseInfo = ResponseInfo.noUsableHostError("server error");
completeAction(responseInfo, null, completeHandler);
return;
}
Expand Down
Loading