From 8ba473c90b245d3236868f52a5bccc0de4afa84e Mon Sep 17 00:00:00 2001 From: yangsen Date: Tue, 15 Nov 2022 18:19:06 +0800 Subject: [PATCH 01/13] support multi region: part 1 --- .../com/qiniu/android/common/ApiType.java | 44 ++++++++++++++++ .../com/qiniu/android/common/AutoZone.java | 10 +++- .../com/qiniu/android/common/FixedZone.java | 29 ++++++----- .../java/com/qiniu/android/common/Zone.java | 2 + .../com/qiniu/android/common/ZonesInfo.java | 51 +++++++++++++++++-- .../com/qiniu/android/storage/BaseUpload.java | 20 +++++++- 6 files changed, 137 insertions(+), 19 deletions(-) create mode 100644 library/src/main/java/com/qiniu/android/common/ApiType.java diff --git a/library/src/main/java/com/qiniu/android/common/ApiType.java b/library/src/main/java/com/qiniu/android/common/ApiType.java new file mode 100644 index 000000000..aa92a9dc4 --- /dev/null +++ b/library/src/main/java/com/qiniu/android/common/ApiType.java @@ -0,0 +1,44 @@ +package com.qiniu.android.common; + +public class ApiType { + public static final int ActionTypeNone = 0; + public static final int ActionTypeUploadByForm = 1; + public static final int ActionTypeUploadByResumeV1 = 2; + public static final int ActionTypeUploadByResumeV2 = 3; + + static String actionTypeString(int actionType) { + String type = ""; + switch (actionType) { + case ActionTypeUploadByForm: + type = "form"; + break; + case ActionTypeUploadByResumeV1: + type = "resume-v1"; + break; + case ActionTypeUploadByResumeV2: + type = "resume-v2"; + break; + default: + break; + } + return type; + } + + static String[] apisWithActionType(int actionType) { + String[] apis = null; + switch (actionType) { + case ActionTypeUploadByForm: + apis = new String[]{"up.formupload"}; + break; + case ActionTypeUploadByResumeV1: + apis = new String[]{"up.mkblk", "up.bput", "up.mkfile"}; + break; + case ActionTypeUploadByResumeV2: + apis = new String[]{"up.initparts", "up.uploadpart", "up.completeparts"}; + break; + default: + break; + } + return apis; + } +} diff --git a/library/src/main/java/com/qiniu/android/common/AutoZone.java b/library/src/main/java/com/qiniu/android/common/AutoZone.java index 10dd6bc9c..6f6f7300d 100644 --- a/library/src/main/java/com/qiniu/android/common/AutoZone.java +++ b/library/src/main/java/com/qiniu/android/common/AutoZone.java @@ -10,6 +10,7 @@ import org.json.JSONObject; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.concurrent.ConcurrentHashMap; @@ -82,6 +83,11 @@ public ZonesInfo getZonesInfo(UpToken token) { @Override public void preQuery(final UpToken token, final QueryHandler completeHandler) { + preQuery(token, ApiType.ActionTypeNone, completeHandler); + } + + @Override + public void preQuery(UpToken token, final int actionType, QueryHandler completeHandler) { if (token == null || !token.isValid()) { completeHandler.complete(-1, ResponseInfo.invalidToken("invalid token"), null); return; @@ -90,7 +96,7 @@ public void preQuery(final UpToken token, final QueryHandler completeHandler) { UploadRegionRequestMetrics localMetrics = new UploadRegionRequestMetrics(null); localMetrics.start(); - final String cacheKey = token.index(); + final String cacheKey = token.index() + ApiType.actionTypeString(actionType); ZonesInfo zonesInfo = GlobalCache.getInstance().zonesInfoForKey(cacheKey); if (zonesInfo != null && zonesInfo.isValid() && !zonesInfo.isTemporary()) { localMetrics.end(); @@ -129,7 +135,7 @@ public void complete(Object value) { JSONObject response = singleFlightValue.response; if (responseInfo != null && responseInfo.isOK() && response != null) { - ZonesInfo zonesInfoP = ZonesInfo.createZonesInfo(response); + ZonesInfo zonesInfoP = ZonesInfo.createZonesInfo(response, actionType); if (zonesInfoP.isValid()) { GlobalCache.getInstance().cache(zonesInfoP, cacheKey); completeHandler.complete(0, responseInfo, requestMetrics); diff --git a/library/src/main/java/com/qiniu/android/common/FixedZone.java b/library/src/main/java/com/qiniu/android/common/FixedZone.java index d4d0caaba..49a6c3b3f 100644 --- a/library/src/main/java/com/qiniu/android/common/FixedZone.java +++ b/library/src/main/java/com/qiniu/android/common/FixedZone.java @@ -65,17 +65,17 @@ public final class FixedZone extends Zone { public static FixedZone localsZoneInfo() { ArrayList localsZone = new ArrayList<>(); - localsZone.add((FixedZone)zone0); - localsZone.add((FixedZone)zoneCnEast2); - localsZone.add((FixedZone)zone1); - localsZone.add((FixedZone)zone2); - localsZone.add((FixedZone)zoneNa0); - localsZone.add((FixedZone)zoneApNorthEast1); - localsZone.add((FixedZone)zoneAs0); + localsZone.add((FixedZone) zone0); + localsZone.add((FixedZone) zoneCnEast2); + localsZone.add((FixedZone) zone1); + localsZone.add((FixedZone) zone2); + localsZone.add((FixedZone) zoneNa0); + localsZone.add((FixedZone) zoneApNorthEast1); + localsZone.add((FixedZone) zoneAs0); ArrayList zoneInfoArray = new ArrayList<>(); - for (FixedZone zone : localsZone){ - if (zone.zonesInfo != null && zone.zonesInfo.zonesInfo != null){ + for (FixedZone zone : localsZone) { + if (zone.zonesInfo != null && zone.zonesInfo.zonesInfo != null) { zoneInfoArray.addAll(zone.zonesInfo.zonesInfo); } } @@ -90,7 +90,7 @@ public FixedZone(ZoneInfo zoneInfo) { this.zonesInfo = new ZonesInfo(zoneInfoList); } - public FixedZone(ZonesInfo zonesInfo){ + public FixedZone(ZonesInfo zonesInfo) { this.zonesInfo = zonesInfo; } @@ -116,7 +116,7 @@ private ZonesInfo createZonesInfo(String[] upDomains, List upDomainsList = new ArrayList(Arrays.asList(upDomains)); List oldUpDomainsList = null; - if (oldUpDomains != null && oldUpDomains.length > 0){ + if (oldUpDomains != null && oldUpDomains.length > 0) { oldUpDomainsList = new ArrayList(Arrays.asList(oldUpDomains)); } else { oldUpDomainsList = new ArrayList<>(); @@ -139,7 +139,12 @@ public ZonesInfo getZonesInfo(UpToken token) { @Override public void preQuery(UpToken token, QueryHandler completeHandler) { - if (completeHandler != null){ + preQuery(token, ApiType.ActionTypeNone, completeHandler); + } + + @Override + public void preQuery(UpToken token, int actionType, QueryHandler completeHandler) { + if (completeHandler != null) { completeHandler.complete(0, null, null); } } diff --git a/library/src/main/java/com/qiniu/android/common/Zone.java b/library/src/main/java/com/qiniu/android/common/Zone.java index 9b92e883b..789d4caf0 100644 --- a/library/src/main/java/com/qiniu/android/common/Zone.java +++ b/library/src/main/java/com/qiniu/android/common/Zone.java @@ -13,6 +13,8 @@ public abstract class Zone { public abstract void preQuery(UpToken token, QueryHandler completeHandler); + public abstract void preQuery(UpToken token, int actionType, QueryHandler completeHandler); + public interface QueryHandler { void complete(int code, ResponseInfo responseInfo, UploadRegionRequestMetrics metrics); } diff --git a/library/src/main/java/com/qiniu/android/common/ZonesInfo.java b/library/src/main/java/com/qiniu/android/common/ZonesInfo.java index 4fb890d59..20da0e891 100644 --- a/library/src/main/java/com/qiniu/android/common/ZonesInfo.java +++ b/library/src/main/java/com/qiniu/android/common/ZonesInfo.java @@ -4,6 +4,7 @@ import org.json.JSONObject; import java.util.ArrayList; +import java.util.Arrays; public class ZonesInfo implements Cloneable { @@ -22,9 +23,50 @@ public ZonesInfo(ArrayList zonesInfo, boolean isTemporary) { } public static ZonesInfo createZonesInfo(JSONObject jsonObject) { + return createZonesInfo(jsonObject, ApiType.ActionTypeNone); + } + + public static ZonesInfo createZonesInfo(JSONObject jsonObject, int actionType) { ArrayList zonesInfo = new ArrayList<>(); - try { - if (jsonObject != null) { + if (jsonObject != null) { + try { + String[] supportApis = ApiType.apisWithActionType(actionType); + if (supportApis != null && supportApis.length > 0) { + JSONObject universal = jsonObject.getJSONObject("universal"); + JSONArray apis = universal.getJSONArray("support_apis"); + + boolean support = true; + for (String supportApi : supportApis) { + + // 需要支持的 api 是否存在,任何一个不存在则不支持。 + boolean contain = false; + for (int i = 0; i < apis.length(); i++) { + String api = apis.getString(i); + if (supportApi.equals(api)) { + contain = true; + break; + } + } + + if (!contain) { + support = false; + break; + } + } + + if (support) { + // 支持 api ,universal 满足条件 + ZoneInfo zoneInfo = ZoneInfo.buildFromJson(universal); + if (zoneInfo != null && zoneInfo.isValid()) { + zonesInfo.add(zoneInfo); + } + } + } + } catch (Exception ignored) { + } + + + try { JSONArray hosts = jsonObject.getJSONArray("hosts"); for (int i = 0; i < hosts.length(); i++) { ZoneInfo zoneInfo = ZoneInfo.buildFromJson(hosts.getJSONObject(i)); @@ -32,8 +74,9 @@ public static ZonesInfo createZonesInfo(JSONObject jsonObject) { zonesInfo.add(zoneInfo); } } + + } catch (Exception ignored) { } - } catch (Exception ignored) { } return new ZonesInfo(zonesInfo); @@ -57,7 +100,7 @@ protected Object clone() throws CloneNotSupportedException { ArrayList infos = new ArrayList<>(); if (zonesInfo != null && zonesInfo.size() > 0) { for (ZoneInfo zoneInfo : zonesInfo) { - infos.add((ZoneInfo)zoneInfo.clone()); + infos.add((ZoneInfo) zoneInfo.clone()); } } ZonesInfo info = new ZonesInfo(infos); diff --git a/library/src/main/java/com/qiniu/android/storage/BaseUpload.java b/library/src/main/java/com/qiniu/android/storage/BaseUpload.java index 26b074b48..3bba138ff 100644 --- a/library/src/main/java/com/qiniu/android/storage/BaseUpload.java +++ b/library/src/main/java/com/qiniu/android/storage/BaseUpload.java @@ -1,5 +1,6 @@ package com.qiniu.android.storage; +import com.qiniu.android.common.ApiType; import com.qiniu.android.common.Zone; import com.qiniu.android.common.ZoneInfo; import com.qiniu.android.common.ZonesInfo; @@ -87,7 +88,7 @@ protected void initData() { public void run() { metrics.start(); - config.zone.preQuery(token, new Zone.QueryHandler() { + config.zone.preQuery(token, actionType(), new Zone.QueryHandler() { @Override public void complete(int code, ResponseInfo responseInfo, UploadRegionRequestMetrics requestMetrics) { metrics.setUcQueryMetrics(requestMetrics); @@ -156,6 +157,23 @@ protected void completeAction(ResponseInfo responseInfo, JSONObject response) { } } + private int actionType() { + String upType = getUpType(); + if (upType == null) { + return ApiType.ActionTypeNone; + } + + int type = ApiType.ActionTypeNone; + if (upType.contains(UploadUpTypeForm)) { + type = ApiType.ActionTypeUploadByForm; + } else if (upType.contains(UploadUpTypeResumableV1)) { + type = ApiType.ActionTypeUploadByResumeV1; + } else if (upType.contains(UploadUpTypeResumableV2)) { + type = ApiType.ActionTypeUploadByResumeV2; + } + return type; + } + private boolean setupRegions() { if (config == null || config.zone == null) { return false; From e828c3e0804d4c1e7c3e61d859abeb3ba85ac58b Mon Sep 17 00:00:00 2001 From: yangsen Date: Tue, 22 Nov 2022 18:34:58 +0800 Subject: [PATCH 02/13] support user custom default zones while uc query failed --- .../com/qiniu/android/common/AutoZone.java | 21 ++++++++++--- .../com/qiniu/android/common/FixedZone.java | 30 ++++++++++++------- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/library/src/main/java/com/qiniu/android/common/AutoZone.java b/library/src/main/java/com/qiniu/android/common/AutoZone.java index 6f6f7300d..8614583e2 100644 --- a/library/src/main/java/com/qiniu/android/common/AutoZone.java +++ b/library/src/main/java/com/qiniu/android/common/AutoZone.java @@ -24,6 +24,7 @@ public final class AutoZone extends Zone { */ private String[] ucServers; private ArrayList transactions = new ArrayList<>(); + private FixedZone defaultZone; private static final SingleFlight SingleFlight = new SingleFlight(); @@ -40,6 +41,10 @@ public void setUcServers(String[] ucServers) { } } + public void setDefaultZones(FixedZone[] zones) { + defaultZone = FixedZone.combineZones(zones); + } + public List getUcServerList() { if (ucServers != null && ucServers.length > 0) { ArrayList serverList = new ArrayList<>(); @@ -143,12 +148,20 @@ public void complete(Object value) { completeHandler.complete(ResponseInfo.ParseError, responseInfo, requestMetrics); } } else { - if (responseInfo.isNetworkBroken()) { + if (responseInfo != null && responseInfo.isNetworkBroken()) { completeHandler.complete(ResponseInfo.NetworkError, responseInfo, requestMetrics); } else { - ZonesInfo zonesInfoP = FixedZone.localsZoneInfo().getZonesInfo(token); - if (zonesInfoP.isValid()) { - GlobalCache.getInstance().cache(zonesInfoP, cacheKey); + ZonesInfo info = null; + if (defaultZone != null) { + ZonesInfo infoP = defaultZone.getZonesInfo(token); + if (infoP != null && infoP.isValid()) { + infoP.toTemporary(); + info = infoP; + } + } + + if (info != null) { + GlobalCache.getInstance().cache(info, cacheKey); completeHandler.complete(0, responseInfo, requestMetrics); } else { completeHandler.complete(ResponseInfo.ParseError, responseInfo, requestMetrics); diff --git a/library/src/main/java/com/qiniu/android/common/FixedZone.java b/library/src/main/java/com/qiniu/android/common/FixedZone.java index 49a6c3b3f..5b7e0c147 100644 --- a/library/src/main/java/com/qiniu/android/common/FixedZone.java +++ b/library/src/main/java/com/qiniu/android/common/FixedZone.java @@ -64,17 +64,27 @@ public final class FixedZone extends Zone { private ZonesInfo zonesInfo; public static FixedZone localsZoneInfo() { - ArrayList localsZone = new ArrayList<>(); - localsZone.add((FixedZone) zone0); - localsZone.add((FixedZone) zoneCnEast2); - localsZone.add((FixedZone) zone1); - localsZone.add((FixedZone) zone2); - localsZone.add((FixedZone) zoneNa0); - localsZone.add((FixedZone) zoneApNorthEast1); - localsZone.add((FixedZone) zoneAs0); + FixedZone[] localsZone = new FixedZone[]{ + (FixedZone) zone0, (FixedZone) zoneCnEast2, + (FixedZone) zone1, (FixedZone) zone2, + (FixedZone) zoneNa0, (FixedZone) zoneApNorthEast1, + (FixedZone) zoneAs0, + }; + + FixedZone zone = combineZones(localsZone); + if (zone != null) { + zone.zonesInfo.toTemporary(); + } + return zone; + } + + public static FixedZone combineZones(FixedZone[] zones) { + if (zones == null || zones.length == 0) { + return null; + } ArrayList zoneInfoArray = new ArrayList<>(); - for (FixedZone zone : localsZone) { + for (FixedZone zone : zones) { if (zone.zonesInfo != null && zone.zonesInfo.zonesInfo != null) { zoneInfoArray.addAll(zone.zonesInfo.zonesInfo); } @@ -143,7 +153,7 @@ public void preQuery(UpToken token, QueryHandler completeHandler) { } @Override - public void preQuery(UpToken token, int actionType, QueryHandler completeHandler) { + public void preQuery(UpToken token, int actionType, QueryHandler completeHandler) { if (completeHandler != null) { completeHandler.complete(0, null, null); } From 88fa1a5778d8bdd9af3cab90e1a36dc931d892fe Mon Sep 17 00:00:00 2001 From: yangsen Date: Tue, 22 Nov 2022 18:50:18 +0800 Subject: [PATCH 03/13] zone: add getZonesInfo --- .../main/java/com/qiniu/android/common/AutoZone.java | 12 ++++++++++-- .../java/com/qiniu/android/common/FixedZone.java | 7 +++++++ .../src/main/java/com/qiniu/android/common/Zone.java | 4 ++++ .../com/qiniu/android/http/dns/DnsPrefetcher.java | 5 +++-- .../java/com/qiniu/android/storage/BaseUpload.java | 2 +- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/library/src/main/java/com/qiniu/android/common/AutoZone.java b/library/src/main/java/com/qiniu/android/common/AutoZone.java index 8614583e2..5d9eb9de9 100644 --- a/library/src/main/java/com/qiniu/android/common/AutoZone.java +++ b/library/src/main/java/com/qiniu/android/common/AutoZone.java @@ -72,11 +72,18 @@ private String[] getUcServerArray() { } @Override + @Deprecated public ZonesInfo getZonesInfo(UpToken token) { + return getZonesInfo(token, ApiType.ActionTypeNone); + } + + @Override + public ZonesInfo getZonesInfo(UpToken token, int actionType) { if (token == null) { return null; } - ZonesInfo zonesInfo = GlobalCache.getInstance().zonesInfoForKey(token.index()); + final String cacheKey = token.index() + ApiType.actionTypeString(actionType); + ZonesInfo zonesInfo = GlobalCache.getInstance().zonesInfoForKey(cacheKey); if (zonesInfo != null) { try { zonesInfo = (ZonesInfo) zonesInfo.clone(); @@ -87,6 +94,7 @@ public ZonesInfo getZonesInfo(UpToken token) { } @Override + @Deprecated public void preQuery(final UpToken token, final QueryHandler completeHandler) { preQuery(token, ApiType.ActionTypeNone, completeHandler); } @@ -153,7 +161,7 @@ public void complete(Object value) { } else { ZonesInfo info = null; if (defaultZone != null) { - ZonesInfo infoP = defaultZone.getZonesInfo(token); + ZonesInfo infoP = defaultZone.getZonesInfo(token, actionType); if (infoP != null && infoP.isValid()) { infoP.toTemporary(); info = infoP; diff --git a/library/src/main/java/com/qiniu/android/common/FixedZone.java b/library/src/main/java/com/qiniu/android/common/FixedZone.java index 5b7e0c147..f6017208c 100644 --- a/library/src/main/java/com/qiniu/android/common/FixedZone.java +++ b/library/src/main/java/com/qiniu/android/common/FixedZone.java @@ -143,11 +143,18 @@ private ZonesInfo createZonesInfo(String[] upDomains, } @Override + @Deprecated public ZonesInfo getZonesInfo(UpToken token) { return zonesInfo; } @Override + public ZonesInfo getZonesInfo(UpToken token, int actionType) { + return zonesInfo; + } + + @Override + @Deprecated public void preQuery(UpToken token, QueryHandler completeHandler) { preQuery(token, ApiType.ActionTypeNone, completeHandler); } diff --git a/library/src/main/java/com/qiniu/android/common/Zone.java b/library/src/main/java/com/qiniu/android/common/Zone.java index 789d4caf0..f79b7b2ed 100644 --- a/library/src/main/java/com/qiniu/android/common/Zone.java +++ b/library/src/main/java/com/qiniu/android/common/Zone.java @@ -9,8 +9,12 @@ */ public abstract class Zone { + @Deprecated public abstract ZonesInfo getZonesInfo(UpToken token); + public abstract ZonesInfo getZonesInfo(UpToken token, int actionType); + + @Deprecated public abstract void preQuery(UpToken token, QueryHandler completeHandler); public abstract void preQuery(UpToken token, int actionType, QueryHandler completeHandler); diff --git a/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java b/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java index 5ab5c7df7..91fa2ce4f 100644 --- a/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java +++ b/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java @@ -1,5 +1,6 @@ package com.qiniu.android.http.dns; +import com.qiniu.android.common.ApiType; import com.qiniu.android.common.Config; import com.qiniu.android.common.FixedZone; import com.qiniu.android.common.Zone; @@ -383,7 +384,7 @@ private String[] getCurrentZoneHosts(Zone currentZone, UpToken token) { final Wait wait = new Wait(); - currentZone.preQuery(token, new Zone.QueryHandler() { + currentZone.preQuery(token, ApiType.ActionTypeNone, new Zone.QueryHandler() { @Override public void complete(int code, ResponseInfo responseInfo, UploadRegionRequestMetrics metrics) { wait.stopWait(); @@ -392,7 +393,7 @@ public void complete(int code, ResponseInfo responseInfo, UploadRegionRequestMet wait.startWait(); - ZonesInfo autoZonesInfo = currentZone.getZonesInfo(token); + ZonesInfo autoZonesInfo = currentZone.getZonesInfo(token, ApiType.ActionTypeNone); ArrayList autoHosts = new ArrayList<>(); if (autoZonesInfo != null && autoZonesInfo.zonesInfo != null && autoZonesInfo.zonesInfo.size() > 0) { for (ZoneInfo zoneInfo : autoZonesInfo.zonesInfo) { diff --git a/library/src/main/java/com/qiniu/android/storage/BaseUpload.java b/library/src/main/java/com/qiniu/android/storage/BaseUpload.java index 3bba138ff..c4ec4f65c 100644 --- a/library/src/main/java/com/qiniu/android/storage/BaseUpload.java +++ b/library/src/main/java/com/qiniu/android/storage/BaseUpload.java @@ -178,7 +178,7 @@ private boolean setupRegions() { if (config == null || config.zone == null) { return false; } - ZonesInfo zonesInfo = config.zone.getZonesInfo(token); + ZonesInfo zonesInfo = config.zone.getZonesInfo(token, actionType()); if (zonesInfo == null || zonesInfo.zonesInfo == null || zonesInfo.zonesInfo.size() == 0) { return false; } From 3c6d6945ec55b2d25f902fff45a263ee72fbf0e0 Mon Sep 17 00:00:00 2001 From: yangsen Date: Thu, 24 Nov 2022 15:05:58 +0800 Subject: [PATCH 04/13] server config retry interval to [2min, 5min] --- .../android/storage/serverConfig/ServerConfigMonitor.java | 5 ++++- .../storage/serverConfig/ServerConfigSynchronizer.java | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigMonitor.java b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigMonitor.java index 631e4e73b..e926b35bd 100644 --- a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigMonitor.java +++ b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigMonitor.java @@ -6,6 +6,7 @@ import com.qiniu.android.transaction.TransactionManager; import java.util.List; +import java.util.Random; public class ServerConfigMonitor { private static final String TransactionKey = "ServerConfig"; @@ -42,7 +43,9 @@ public synchronized static void startMonitor() { return; } - TransactionManager.Transaction transaction = new TransactionManager.Transaction(TransactionKey, 0, 10, new Runnable() { + Random random = new Random(); + int interval = 120 + random.nextInt(240); + TransactionManager.Transaction transaction = new TransactionManager.Transaction(TransactionKey, 0, interval, new Runnable() { @Override public void run() { configMonitor.monitor(); diff --git a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java index 19911a1f6..648fd0654 100644 --- a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java +++ b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java @@ -51,7 +51,8 @@ public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics reque } private static synchronized RequestTransaction createServerConfigTransaction() { - if (serverConfigTransaction != null) { + // 只上传传才会有 Token,当有上传时才做请求,避免不必要的请求 + if (serverConfigTransaction != null || Token == null) { return null; } From c1114bd41f2aee55292339f1bf7ee5c89327494c Mon Sep 17 00:00:00 2001 From: yangsen Date: Thu, 24 Nov 2022 15:09:02 +0800 Subject: [PATCH 05/13] version to 8.5.2 --- CHANGELOG.md | 4 ++++ README.md | 3 ++- library/src/main/java/com/qiniu/android/common/Constants.java | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ca2bfd00..9219c15ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ #Changelog +## 8.5.2(2022-11-24) +* 支持 multi 区域 +* 优化 Server 配置拉去逻辑 + ## 8.5.1(2022-10-21) * 移除雾存储区域:华东一区 * 新增首尔和华东浙江 2 区 Region diff --git a/README.md b/README.md index e70070d5b..e4d61a809 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ https://github.com/qiniudemo/qiniu-lab-android | Qiniu SDK 版本 | 最低 Android版本 | 依赖库版本 | |------------ |-----------------|------------------------| +| 8.5.2 | Android 4.0+ | okhttp 4+ | | 8.5.1 | Android 4.0+ | okhttp 4+ | | 8.5.0 | Android 4.0+ | okhttp 4+ | | 8.4.* | Android 4.0+ | okhttp 4+ | @@ -35,7 +36,7 @@ https://github.com/qiniudemo/qiniu-lab-android | 7.0.7 | Android 2.2+ | android-async-http 1.4.8 | ### 注意 -* 推荐使用最新版:8.5.1 +* 推荐使用最新版:8.5.2 * 7.6.2 ~ 8.3.2 AndroidNetwork.getMobileDbm()可以获取手机信号强度,需要如下权限(API>=18时生效) ``` diff --git a/library/src/main/java/com/qiniu/android/common/Constants.java b/library/src/main/java/com/qiniu/android/common/Constants.java index f20bce7bf..c619d00a8 100644 --- a/library/src/main/java/com/qiniu/android/common/Constants.java +++ b/library/src/main/java/com/qiniu/android/common/Constants.java @@ -2,7 +2,7 @@ public final class Constants { - public static final String VERSION = "8.5.0"; + public static final String VERSION = "8.5.2"; public static final String UTF_8 = "utf-8"; } From 299e9ece3922fb42514353924b6b92ca4451172e Mon Sep 17 00:00:00 2001 From: yangsen Date: Thu, 24 Nov 2022 17:33:53 +0800 Subject: [PATCH 06/13] happy dns to 2.0.1 --- library/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/build.gradle b/library/build.gradle index bf1f0720f..74af114b4 100755 --- a/library/build.gradle +++ b/library/build.gradle @@ -61,7 +61,7 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.1' // implementation 'com.squareup.okhttp3:okhttp:3.12.+' - implementation 'com.qiniu:happy-dns:2.0.0' + implementation 'com.qiniu:happy-dns:2.0.1' // for javax.annotation.Nullable use in custom MultipartBody and Headers implements. // implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation 'org.conscrypt:conscrypt-android:2.2.1' From 917e8d32f9480737bde7137c72a348515e3153c8 Mon Sep 17 00:00:00 2001 From: yangsen Date: Mon, 28 Nov 2022 11:28:23 +0800 Subject: [PATCH 07/13] uplog: value max to 1K --- .../src/main/java/com/qiniu/android/collect/ReportItem.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/library/src/main/java/com/qiniu/android/collect/ReportItem.java b/library/src/main/java/com/qiniu/android/collect/ReportItem.java index 3517354e3..97a2ba372 100644 --- a/library/src/main/java/com/qiniu/android/collect/ReportItem.java +++ b/library/src/main/java/com/qiniu/android/collect/ReportItem.java @@ -16,6 +16,9 @@ public void setReport(Object value, String key){ if (key == null || value == null){ return; } + if (value instanceof String && ((String) value).length() > 1024) { + value = ((String) value).substring(0, 1024); + } keyValues.put(key, value); } From 40a1d10245dc760f55e8274effc693068eb4c8da Mon Sep 17 00:00:00 2001 From: yangsen Date: Mon, 28 Nov 2022 14:33:18 +0800 Subject: [PATCH 08/13] update test token --- .../java/com/qiniu/android/TestConfig.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/library/src/androidTest/java/com/qiniu/android/TestConfig.java b/library/src/androidTest/java/com/qiniu/android/TestConfig.java index 9ab66283d..7f566a84d 100644 --- a/library/src/androidTest/java/com/qiniu/android/TestConfig.java +++ b/library/src/androidTest/java/com/qiniu/android/TestConfig.java @@ -10,27 +10,26 @@ public final class TestConfig { // TODO: 2020-05-09 bad token for testPutBytesWithFixedZoneUseBackupDomains // 华东上传凭证 public static final String bucket_z0 = "kodo-phone-zone0-space"; - - public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Qxeb7v5PXIrih_gwR-6pD1KsGgg=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; + public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:gk-emjEYF779GyuD2PLjrJGNeWw=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; // 华北上传凭证 public static final String bucket_z1 = "kodo-phone-zone1-space"; - public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:crF2Xi7Zxcs6y9OIwmbZ_9QdAtA=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; + public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Vo4gv4uabU3RKpH0R-PxhU6tj6c=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; // 华南上传凭证 public static final String bucket_z2 = "kodo-phone-zone2-space"; - public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:leoDnGLMa0wfqQ4GGb3yqWjLw5Y=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; + public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:juVQn2wvtbrFEy-J2Etq-JqO6UE=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; // 北美上传凭证 public static final String bucket_na0 = "kodo-phone-zone-na0-space"; - public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:4WqbwsnKFgWO6vZMr8V6tVMNZ50=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; + public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:PDQxd9wAWd7_jV8UMR9dxnVtAac=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; // 东南亚上传凭证 public static final String bucket_as0 = "kodo-phone-zone-as0-space"; - public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:YjOnS0SLd0P1Z5VG_3Oxfls0KeA=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; + public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Aj9HN9lRqpQzyX3EVno7BjMBkv8=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; // 华北浙江2上传凭证 public static final String bucket_cn_east_2 = "kodo-phone-cn-east-2"; - public static final String token_cn_east_2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:ogrnSltO4Vdsrcsk4XNCR9t63tQ=:eyJzY29wZSI6ImtvZG8tcGhvbmUtY24tZWFzdC0yIiwiZGVhZGxpbmUiOjE2Njk1MzQ5NzgsICJyZXR1cm5Cb2R5Ijoie1wiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ=="; + public static final String token_cn_east_2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:PDr1-LvnJ53Are_ZhhDVF4HwOPY=:eyJzY29wZSI6ImtvZG8tcGhvbmUtY24tZWFzdC0yIiwiZGVhZGxpbmUiOjE2NzQ4MDExNTUsICJyZXR1cm5Cb2R5Ijoie1wiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ=="; // 韩国亚太上传凭证 public static final String bucket_ap_northeast_1 = "kodo-phone-ap-northeast-1"; - public static final String token_ap_northeast_1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:yI8KG27WvY9QSLv669-yv9Ac1mY=:eyJzY29wZSI6ImtvZG8tcGhvbmUtYXAtbm9ydGhlYXN0LTEiLCJkZWFkbGluZSI6MTY2OTUzNDk3OCwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; - public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:KVBTuAcbmqx0ji81VQRwPzLgUEY=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNjY5NTM0OTc4LCAicmV0dXJuQm9keSI6IntcImZvb1wiOiQoeDpmb28pLCBcImJhclwiOiQoeDpiYXIpLCBcIm1pbWVUeXBlXCI6JChtaW1lVHlwZSksIFwiaGFzaFwiOiQoZXRhZyksIFwia2V5XCI6JChrZXkpLCBcImZuYW1lXCI6JChmbmFtZSl9In0="; + public static final String token_ap_northeast_1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:StRMMkmKvNZMCo6zTrUjaLO529E=:eyJzY29wZSI6ImtvZG8tcGhvbmUtYXAtbm9ydGhlYXN0LTEiLCJkZWFkbGluZSI6MTY3NDgwMTE1NSwgInJldHVybkJvZHkiOiJ7XCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9"; + public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:mJ6Z0JLK5op1_d0FdU0JrjIHKog=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNjc0ODAxMTU1LCAicmV0dXJuQm9keSI6IntcImZvb1wiOiQoeDpmb28pLCBcImJhclwiOiQoeDpiYXIpLCBcIm1pbWVUeXBlXCI6JChtaW1lVHlwZSksIFwiaGFzaFwiOiQoZXRhZyksIFwia2V5XCI6JChrZXkpLCBcImZuYW1lXCI6JChmbmFtZSl9In0="; // ----------- public static final String ak = "bjtWBQXrcxgo7HWwlC_bgHg81j352_GhgBGZPeOW"; From e3e8146f1dae0d6148bf2c118394dcf90291ab4d Mon Sep 17 00:00:00 2001 From: yangsen Date: Tue, 29 Nov 2022 15:18:04 +0800 Subject: [PATCH 09/13] uc: not use api.qiniu.com & server config: get when UploadManager --- .../com/qiniu/android/common/AutoZone.java | 8 ++------ .../java/com/qiniu/android/common/Config.java | 6 +++++- .../ServerConfigSynchronizer.java | 20 +++++++++---------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/library/src/main/java/com/qiniu/android/common/AutoZone.java b/library/src/main/java/com/qiniu/android/common/AutoZone.java index 5d9eb9de9..cfc9c1ecc 100644 --- a/library/src/main/java/com/qiniu/android/common/AutoZone.java +++ b/library/src/main/java/com/qiniu/android/common/AutoZone.java @@ -51,11 +51,7 @@ public List getUcServerList() { Collections.addAll(serverList, ucServers); return serverList; } else { - ArrayList serverList = new ArrayList<>(); - serverList.add(Config.preQueryHost02); - serverList.add(Config.preQueryHost00); - serverList.add(Config.preQueryHost01); - return serverList; + return Arrays.asList(Config.preQueryHosts()); } } @@ -67,7 +63,7 @@ private String[] getUcServerArray() { if (ucServers != null && ucServers.length > 0) { return ucServers; } else { - return new String[]{Config.preQueryHost00, Config.preQueryHost01}; + return Config.preQueryHosts(); } } diff --git a/library/src/main/java/com/qiniu/android/common/Config.java b/library/src/main/java/com/qiniu/android/common/Config.java index d792f4209..0eb3f723b 100644 --- a/library/src/main/java/com/qiniu/android/common/Config.java +++ b/library/src/main/java/com/qiniu/android/common/Config.java @@ -69,9 +69,13 @@ public final class Config { * preQuery host */ public static String preQueryHost00 = "uc.qbox.me"; - public static String preQueryHost01 = "api.qiniu.com"; + public static String preQueryHost01 = "api.qiniu.com"; // not use public static String preQueryHost02 = "kodo-config.qiniuapi.com"; + public static String[] preQueryHosts() { + return new String[]{preQueryHost00, preQueryHost02}; + } + /** * 当网络切换到 wifi 下,切换到此设置 */ diff --git a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java index 648fd0654..e8eb52e4f 100644 --- a/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java +++ b/library/src/main/java/com/qiniu/android/storage/serverConfig/ServerConfigSynchronizer.java @@ -52,7 +52,7 @@ public void complete(ResponseInfo responseInfo, UploadRegionRequestMetrics reque private static synchronized RequestTransaction createServerConfigTransaction() { // 只上传传才会有 Token,当有上传时才做请求,避免不必要的请求 - if (serverConfigTransaction != null || Token == null) { + if (serverConfigTransaction != null) { return null; } @@ -61,12 +61,11 @@ private static synchronized RequestTransaction createServerConfigTransaction() { token = UpToken.getInvalidToken(); } - List servers = new ArrayList<>(); + List servers = null; if (Hosts != null && Hosts.length > 0) { - servers.addAll(Arrays.asList(Hosts)); + servers = Arrays.asList(Hosts); } else { - servers.add(Config.preQueryHost00); - servers.add(Config.preQueryHost01); + servers = Arrays.asList(Config.preQueryHosts()); } serverConfigTransaction = new RequestTransaction(servers, token); return serverConfigTransaction; @@ -111,12 +110,11 @@ private static synchronized RequestTransaction createServerUserConfigTransaction return null; } - List servers = new ArrayList<>(); + List servers = null; if (Hosts != null && Hosts.length > 0) { - servers.addAll(Arrays.asList(Hosts)); + servers = Arrays.asList(Hosts); } else { - servers.add(Config.preQueryHost00); - servers.add(Config.preQueryHost01); + servers = Arrays.asList(Config.preQueryHosts()); } serverUserConfigTransaction = new RequestTransaction(servers, token); return serverUserConfigTransaction; @@ -126,9 +124,9 @@ private static synchronized void destroyServerUserConfigTransaction() { serverUserConfigTransaction = null; } - interface ServerConfigHandler { + interface ServerConfigHandler { void handle(ServerConfig config); - } + } interface ServerUserConfigHandler { void handle(ServerUserConfig config); From 30169d76e171957c3236fb4467cd3a3cd660436e Mon Sep 17 00:00:00 2001 From: yangsen Date: Tue, 29 Nov 2022 17:52:12 +0800 Subject: [PATCH 10/13] api host: last backup --- library/src/main/java/com/qiniu/android/common/Config.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/qiniu/android/common/Config.java b/library/src/main/java/com/qiniu/android/common/Config.java index 0eb3f723b..ced13da29 100644 --- a/library/src/main/java/com/qiniu/android/common/Config.java +++ b/library/src/main/java/com/qiniu/android/common/Config.java @@ -69,11 +69,11 @@ public final class Config { * preQuery host */ public static String preQueryHost00 = "uc.qbox.me"; - public static String preQueryHost01 = "api.qiniu.com"; // not use + public static String preQueryHost01 = "api.qiniu.com"; public static String preQueryHost02 = "kodo-config.qiniuapi.com"; public static String[] preQueryHosts() { - return new String[]{preQueryHost00, preQueryHost02}; + return new String[]{preQueryHost00, preQueryHost02, preQueryHost01}; } /** From 0094c6f006abd43f9015c2e0be16cd593bde0afd Mon Sep 17 00:00:00 2001 From: yangsen Date: Thu, 1 Dec 2022 10:20:05 +0800 Subject: [PATCH 11/13] auto zone isValid: all zones max be valid --- .../java/com/qiniu/android/common/ZonesInfo.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/com/qiniu/android/common/ZonesInfo.java b/library/src/main/java/com/qiniu/android/common/ZonesInfo.java index 20da0e891..422d7dbdd 100644 --- a/library/src/main/java/com/qiniu/android/common/ZonesInfo.java +++ b/library/src/main/java/com/qiniu/android/common/ZonesInfo.java @@ -83,7 +83,18 @@ public static ZonesInfo createZonesInfo(JSONObject jsonObject, int actionType) { } public boolean isValid() { - return zonesInfo != null && zonesInfo.size() > 0 && zonesInfo.get(0).isValid(); + if (zonesInfo == null || zonesInfo.size() == 0) { + return false; + } + + boolean valid = true; + for (ZoneInfo info : zonesInfo) { + if (!info.isValid()) { + valid = false; + break; + } + } + return valid; } // 是否为临时 zone, 临时 zone,不建议长期使用 From e18221cc8ae0669bbe4dd956d58160090593af1d Mon Sep 17 00:00:00 2001 From: yangsen Date: Thu, 1 Dec 2022 17:23:00 +0800 Subject: [PATCH 12/13] revert multi region --- .../com/qiniu/android/common/ApiType.java | 44 ------------------- .../com/qiniu/android/common/AutoZone.java | 20 ++------- .../com/qiniu/android/common/FixedZone.java | 12 ----- .../java/com/qiniu/android/common/Zone.java | 6 --- .../com/qiniu/android/common/ZonesInfo.java | 41 ----------------- .../qiniu/android/http/dns/DnsPrefetcher.java | 2 - .../com/qiniu/android/storage/BaseUpload.java | 22 +--------- 7 files changed, 6 insertions(+), 141 deletions(-) delete mode 100644 library/src/main/java/com/qiniu/android/common/ApiType.java diff --git a/library/src/main/java/com/qiniu/android/common/ApiType.java b/library/src/main/java/com/qiniu/android/common/ApiType.java deleted file mode 100644 index aa92a9dc4..000000000 --- a/library/src/main/java/com/qiniu/android/common/ApiType.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.qiniu.android.common; - -public class ApiType { - public static final int ActionTypeNone = 0; - public static final int ActionTypeUploadByForm = 1; - public static final int ActionTypeUploadByResumeV1 = 2; - public static final int ActionTypeUploadByResumeV2 = 3; - - static String actionTypeString(int actionType) { - String type = ""; - switch (actionType) { - case ActionTypeUploadByForm: - type = "form"; - break; - case ActionTypeUploadByResumeV1: - type = "resume-v1"; - break; - case ActionTypeUploadByResumeV2: - type = "resume-v2"; - break; - default: - break; - } - return type; - } - - static String[] apisWithActionType(int actionType) { - String[] apis = null; - switch (actionType) { - case ActionTypeUploadByForm: - apis = new String[]{"up.formupload"}; - break; - case ActionTypeUploadByResumeV1: - apis = new String[]{"up.mkblk", "up.bput", "up.mkfile"}; - break; - case ActionTypeUploadByResumeV2: - apis = new String[]{"up.initparts", "up.uploadpart", "up.completeparts"}; - break; - default: - break; - } - return apis; - } -} diff --git a/library/src/main/java/com/qiniu/android/common/AutoZone.java b/library/src/main/java/com/qiniu/android/common/AutoZone.java index cfc9c1ecc..f40c06fc5 100644 --- a/library/src/main/java/com/qiniu/android/common/AutoZone.java +++ b/library/src/main/java/com/qiniu/android/common/AutoZone.java @@ -68,17 +68,11 @@ private String[] getUcServerArray() { } @Override - @Deprecated public ZonesInfo getZonesInfo(UpToken token) { - return getZonesInfo(token, ApiType.ActionTypeNone); - } - - @Override - public ZonesInfo getZonesInfo(UpToken token, int actionType) { if (token == null) { return null; } - final String cacheKey = token.index() + ApiType.actionTypeString(actionType); + final String cacheKey = token.index(); ZonesInfo zonesInfo = GlobalCache.getInstance().zonesInfoForKey(cacheKey); if (zonesInfo != null) { try { @@ -90,13 +84,7 @@ public ZonesInfo getZonesInfo(UpToken token, int actionType) { } @Override - @Deprecated public void preQuery(final UpToken token, final QueryHandler completeHandler) { - preQuery(token, ApiType.ActionTypeNone, completeHandler); - } - - @Override - public void preQuery(UpToken token, final int actionType, QueryHandler completeHandler) { if (token == null || !token.isValid()) { completeHandler.complete(-1, ResponseInfo.invalidToken("invalid token"), null); return; @@ -105,7 +93,7 @@ public void preQuery(UpToken token, final int actionType, QueryHandler completeH UploadRegionRequestMetrics localMetrics = new UploadRegionRequestMetrics(null); localMetrics.start(); - final String cacheKey = token.index() + ApiType.actionTypeString(actionType); + final String cacheKey = token.index(); ZonesInfo zonesInfo = GlobalCache.getInstance().zonesInfoForKey(cacheKey); if (zonesInfo != null && zonesInfo.isValid() && !zonesInfo.isTemporary()) { localMetrics.end(); @@ -144,7 +132,7 @@ public void complete(Object value) { JSONObject response = singleFlightValue.response; if (responseInfo != null && responseInfo.isOK() && response != null) { - ZonesInfo zonesInfoP = ZonesInfo.createZonesInfo(response, actionType); + ZonesInfo zonesInfoP = ZonesInfo.createZonesInfo(response); if (zonesInfoP.isValid()) { GlobalCache.getInstance().cache(zonesInfoP, cacheKey); completeHandler.complete(0, responseInfo, requestMetrics); @@ -157,7 +145,7 @@ public void complete(Object value) { } else { ZonesInfo info = null; if (defaultZone != null) { - ZonesInfo infoP = defaultZone.getZonesInfo(token, actionType); + ZonesInfo infoP = defaultZone.getZonesInfo(token); if (infoP != null && infoP.isValid()) { infoP.toTemporary(); info = infoP; diff --git a/library/src/main/java/com/qiniu/android/common/FixedZone.java b/library/src/main/java/com/qiniu/android/common/FixedZone.java index f6017208c..b5bf09d2a 100644 --- a/library/src/main/java/com/qiniu/android/common/FixedZone.java +++ b/library/src/main/java/com/qiniu/android/common/FixedZone.java @@ -143,24 +143,12 @@ private ZonesInfo createZonesInfo(String[] upDomains, } @Override - @Deprecated public ZonesInfo getZonesInfo(UpToken token) { return zonesInfo; } @Override - public ZonesInfo getZonesInfo(UpToken token, int actionType) { - return zonesInfo; - } - - @Override - @Deprecated public void preQuery(UpToken token, QueryHandler completeHandler) { - preQuery(token, ApiType.ActionTypeNone, completeHandler); - } - - @Override - public void preQuery(UpToken token, int actionType, QueryHandler completeHandler) { if (completeHandler != null) { completeHandler.complete(0, null, null); } diff --git a/library/src/main/java/com/qiniu/android/common/Zone.java b/library/src/main/java/com/qiniu/android/common/Zone.java index f79b7b2ed..9b92e883b 100644 --- a/library/src/main/java/com/qiniu/android/common/Zone.java +++ b/library/src/main/java/com/qiniu/android/common/Zone.java @@ -9,16 +9,10 @@ */ public abstract class Zone { - @Deprecated public abstract ZonesInfo getZonesInfo(UpToken token); - public abstract ZonesInfo getZonesInfo(UpToken token, int actionType); - - @Deprecated public abstract void preQuery(UpToken token, QueryHandler completeHandler); - public abstract void preQuery(UpToken token, int actionType, QueryHandler completeHandler); - public interface QueryHandler { void complete(int code, ResponseInfo responseInfo, UploadRegionRequestMetrics metrics); } diff --git a/library/src/main/java/com/qiniu/android/common/ZonesInfo.java b/library/src/main/java/com/qiniu/android/common/ZonesInfo.java index 422d7dbdd..53bed240e 100644 --- a/library/src/main/java/com/qiniu/android/common/ZonesInfo.java +++ b/library/src/main/java/com/qiniu/android/common/ZonesInfo.java @@ -23,49 +23,8 @@ public ZonesInfo(ArrayList zonesInfo, boolean isTemporary) { } public static ZonesInfo createZonesInfo(JSONObject jsonObject) { - return createZonesInfo(jsonObject, ApiType.ActionTypeNone); - } - - public static ZonesInfo createZonesInfo(JSONObject jsonObject, int actionType) { ArrayList zonesInfo = new ArrayList<>(); if (jsonObject != null) { - try { - String[] supportApis = ApiType.apisWithActionType(actionType); - if (supportApis != null && supportApis.length > 0) { - JSONObject universal = jsonObject.getJSONObject("universal"); - JSONArray apis = universal.getJSONArray("support_apis"); - - boolean support = true; - for (String supportApi : supportApis) { - - // 需要支持的 api 是否存在,任何一个不存在则不支持。 - boolean contain = false; - for (int i = 0; i < apis.length(); i++) { - String api = apis.getString(i); - if (supportApi.equals(api)) { - contain = true; - break; - } - } - - if (!contain) { - support = false; - break; - } - } - - if (support) { - // 支持 api ,universal 满足条件 - ZoneInfo zoneInfo = ZoneInfo.buildFromJson(universal); - if (zoneInfo != null && zoneInfo.isValid()) { - zonesInfo.add(zoneInfo); - } - } - } - } catch (Exception ignored) { - } - - try { JSONArray hosts = jsonObject.getJSONArray("hosts"); for (int i = 0; i < hosts.length(); i++) { diff --git a/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java b/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java index 91fa2ce4f..d8021b8db 100644 --- a/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java +++ b/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java @@ -1,8 +1,6 @@ package com.qiniu.android.http.dns; -import com.qiniu.android.common.ApiType; import com.qiniu.android.common.Config; -import com.qiniu.android.common.FixedZone; import com.qiniu.android.common.Zone; import com.qiniu.android.common.ZoneInfo; import com.qiniu.android.common.ZonesInfo; diff --git a/library/src/main/java/com/qiniu/android/storage/BaseUpload.java b/library/src/main/java/com/qiniu/android/storage/BaseUpload.java index c4ec4f65c..26b074b48 100644 --- a/library/src/main/java/com/qiniu/android/storage/BaseUpload.java +++ b/library/src/main/java/com/qiniu/android/storage/BaseUpload.java @@ -1,6 +1,5 @@ package com.qiniu.android.storage; -import com.qiniu.android.common.ApiType; import com.qiniu.android.common.Zone; import com.qiniu.android.common.ZoneInfo; import com.qiniu.android.common.ZonesInfo; @@ -88,7 +87,7 @@ protected void initData() { public void run() { metrics.start(); - config.zone.preQuery(token, actionType(), new Zone.QueryHandler() { + config.zone.preQuery(token, new Zone.QueryHandler() { @Override public void complete(int code, ResponseInfo responseInfo, UploadRegionRequestMetrics requestMetrics) { metrics.setUcQueryMetrics(requestMetrics); @@ -157,28 +156,11 @@ protected void completeAction(ResponseInfo responseInfo, JSONObject response) { } } - private int actionType() { - String upType = getUpType(); - if (upType == null) { - return ApiType.ActionTypeNone; - } - - int type = ApiType.ActionTypeNone; - if (upType.contains(UploadUpTypeForm)) { - type = ApiType.ActionTypeUploadByForm; - } else if (upType.contains(UploadUpTypeResumableV1)) { - type = ApiType.ActionTypeUploadByResumeV1; - } else if (upType.contains(UploadUpTypeResumableV2)) { - type = ApiType.ActionTypeUploadByResumeV2; - } - return type; - } - private boolean setupRegions() { if (config == null || config.zone == null) { return false; } - ZonesInfo zonesInfo = config.zone.getZonesInfo(token, actionType()); + ZonesInfo zonesInfo = config.zone.getZonesInfo(token); if (zonesInfo == null || zonesInfo.zonesInfo == null || zonesInfo.zonesInfo.size() == 0) { return false; } From c9d7b2aecf957630ccfb95aabf3dc38551e481d2 Mon Sep 17 00:00:00 2001 From: yangsen Date: Thu, 1 Dec 2022 17:27:03 +0800 Subject: [PATCH 13/13] revert multi region --- .../main/java/com/qiniu/android/http/dns/DnsPrefetcher.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java b/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java index d8021b8db..433b2db78 100644 --- a/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java +++ b/library/src/main/java/com/qiniu/android/http/dns/DnsPrefetcher.java @@ -382,7 +382,7 @@ private String[] getCurrentZoneHosts(Zone currentZone, UpToken token) { final Wait wait = new Wait(); - currentZone.preQuery(token, ApiType.ActionTypeNone, new Zone.QueryHandler() { + currentZone.preQuery(token, new Zone.QueryHandler() { @Override public void complete(int code, ResponseInfo responseInfo, UploadRegionRequestMetrics metrics) { wait.stopWait(); @@ -391,7 +391,7 @@ public void complete(int code, ResponseInfo responseInfo, UploadRegionRequestMet wait.startWait(); - ZonesInfo autoZonesInfo = currentZone.getZonesInfo(token, ApiType.ActionTypeNone); + ZonesInfo autoZonesInfo = currentZone.getZonesInfo(token); ArrayList autoHosts = new ArrayList<>(); if (autoZonesInfo != null && autoZonesInfo.zonesInfo != null && autoZonesInfo.zonesInfo.size() > 0) { for (ZoneInfo zoneInfo : autoZonesInfo.zonesInfo) {