44import com .qiniu .android .http .dns .DnsPrefetchTransaction ;
55import com .qiniu .android .http .metrics .UploadRegionRequestMetrics ;
66import com .qiniu .android .http .request .RequestTransaction ;
7+ import com .qiniu .android .storage .Configuration ;
78import com .qiniu .android .storage .UpToken ;
9+ import com .qiniu .android .storage .UploadOptions ;
810import com .qiniu .android .utils .Cache ;
11+ import com .qiniu .android .utils .ListUtils ;
912import com .qiniu .android .utils .SingleFlight ;
1013import com .qiniu .android .utils .UrlSafeBase64 ;
1114
1417import java .util .ArrayList ;
1518import java .util .Arrays ;
1619import java .util .Collections ;
17- import java .util .HashMap ;
1820import java .util .List ;
1921import java .util .Map ;
2022import java .util .concurrent .ConcurrentHashMap ;
@@ -111,11 +113,12 @@ private String[] getUcServerArray() {
111113 }
112114
113115 @ Override
116+ @ Deprecated
114117 public ZonesInfo getZonesInfo (UpToken token ) {
115118 if (token == null ) {
116119 return null ;
117120 }
118- String cacheKey = makeCacheKey (token .index ());
121+ String cacheKey = makeCacheKey (null , token .index ());
119122 ZonesInfo zonesInfo = zonesInfoMap .get (cacheKey );
120123 if (zonesInfo != null ) {
121124 try {
@@ -128,15 +131,35 @@ public ZonesInfo getZonesInfo(UpToken token) {
128131
129132 @ Override
130133 public void preQuery (final UpToken token , final QueryHandler completeHandler ) {
134+ query (null , token , new QueryHandlerV2 () {
135+ @ Override
136+ public void complete (ResponseInfo responseInfo , UploadRegionRequestMetrics metrics , ZonesInfo zonesInfo ) {
137+ if (completeHandler != null ) {
138+ int code = ResponseInfo .NetworkError ;
139+ if (responseInfo != null ) {
140+ if (responseInfo .isOK ()) {
141+ code = 0 ;
142+ } else {
143+ code = responseInfo .statusCode ;
144+ }
145+ }
146+ completeHandler .complete (code , responseInfo , metrics );
147+ }
148+ }
149+ });
150+ }
151+
152+ @ Override
153+ public void query (Configuration configuration , UpToken token , QueryHandlerV2 completeHandler ) {
131154 if (token == null || !token .isValid ()) {
132- completeHandler .complete (- 1 , ResponseInfo .invalidToken ("invalid token" ), null );
155+ completeHandler .complete (ResponseInfo .invalidToken ("invalid token" ), null , null );
133156 return ;
134157 }
135158
136159 UploadRegionRequestMetrics localMetrics = new UploadRegionRequestMetrics (null );
137160 localMetrics .start ();
138161
139- final String cacheKey = makeCacheKey (token .index ());
162+ final String cacheKey = makeCacheKey (configuration , token .index ());
140163
141164 ZonesInfo zonesInfo = null ;
142165 Cache .Object object = zoneCache .cacheForKey (cacheKey );
@@ -147,7 +170,7 @@ public void preQuery(final UpToken token, final QueryHandler completeHandler) {
147170 if (zonesInfo != null && zonesInfo .isValid ()) {
148171 localMetrics .end ();
149172 zonesInfoMap .put (cacheKey , zonesInfo );
150- completeHandler .complete (0 , ResponseInfo .successResponse (), localMetrics );
173+ completeHandler .complete (ResponseInfo .successResponse (), localMetrics , zonesInfo );
151174 return ;
152175 }
153176
@@ -159,7 +182,7 @@ public void preQuery(final UpToken token, final QueryHandler completeHandler) {
159182 @ Override
160183 public void action (final com .qiniu .android .utils .SingleFlight .CompleteHandler <SingleFlightValue > completeHandler ) throws Exception {
161184
162- final RequestTransaction transaction = createUploadRequestTransaction (token );
185+ final RequestTransaction transaction = createUploadRequestTransaction (configuration , token );
163186 transaction .queryUploadHosts (true , new RequestTransaction .RequestCompleteHandler () {
164187 @ Override
165188 public void complete (ResponseInfo responseInfo , UploadRegionRequestMetrics requestMetrics , JSONObject response ) {
@@ -186,36 +209,47 @@ public void complete(SingleFlightValue singleFlightValue) {
186209 if (zonesInfoP .isValid ()) {
187210 zoneCache .cache (cacheKey , zonesInfoP , true );
188211 zonesInfoMap .put (cacheKey , zonesInfoP );
189- completeHandler .complete (0 , responseInfo , requestMetrics );
212+ completeHandler .complete (responseInfo , requestMetrics , zonesInfoP );
190213 } else {
191- completeHandler .complete (ResponseInfo .ParseError , responseInfo , requestMetrics );
214+ responseInfo = ResponseInfo .parseError ("origin response:" + responseInfo );
215+ completeHandler .complete (responseInfo , requestMetrics , null );
192216 }
193217 } else {
194218 if (defaultZone != null ) {
195219 // 备用只能用一次
196220 ZonesInfo defaultZoneZonesInfo = defaultZone .getZonesInfo (token );
197221 zonesInfoMap .put (cacheKey , defaultZoneZonesInfo );
198- completeHandler .complete (0 , responseInfo , requestMetrics );
222+ String message = "origin response:" + responseInfo ;
223+ responseInfo = ResponseInfo .successResponse ();
224+ responseInfo .message = message ;
225+ completeHandler .complete (responseInfo , requestMetrics , defaultZoneZonesInfo );
199226 } else if (finalZonesInfo != null ) {
200227 // 缓存有,但是失效也可使用
201228 zonesInfoMap .put (cacheKey , finalZonesInfo );
202- completeHandler .complete (0 , responseInfo , requestMetrics );
229+ String message = "origin response:" + responseInfo ;
230+ responseInfo = ResponseInfo .successResponse ();
231+ responseInfo .message = message ;
232+ completeHandler .complete (responseInfo , requestMetrics , finalZonesInfo );
203233 } else {
204- completeHandler .complete (ResponseInfo . NetworkError , responseInfo , requestMetrics );
234+ completeHandler .complete (responseInfo , requestMetrics , null );
205235 }
206236 }
207237 }
208238 });
209239
210240 } catch (Exception e ) {
211241 /// 此处永远不会执行,回调只为占位
212- completeHandler .complete (ResponseInfo .NetworkError , ResponseInfo . localIOError (e .toString ()), null );
242+ completeHandler .complete (ResponseInfo .localIOError (e .toString ()), null , null );
213243 }
214244 }
215245
216- private String makeCacheKey (String akAndBucket ) {
246+ private String makeCacheKey (Configuration configuration , String akAndBucket ) {
247+ String key = akAndBucket ;
248+ if (configuration != null ) {
249+ key += akAndBucket + ":" + configuration .accelerateUploading ;
250+ }
217251 List <String > ucHosts = getUcServerList ();
218- if (ucHosts == null || ucHosts .isEmpty ()) {
252+ if (ListUtils .isEmpty (ucHosts )) {
219253 return akAndBucket ;
220254 }
221255
@@ -227,13 +261,16 @@ private String makeCacheKey(String akAndBucket) {
227261 hosts .append (host ).append (":" );
228262 }
229263
230- return UrlSafeBase64 .encodeToString (hosts + akAndBucket );
264+ return UrlSafeBase64 .encodeToString (hosts + key );
231265 }
232266
233- private RequestTransaction createUploadRequestTransaction (UpToken token ) {
267+ private RequestTransaction createUploadRequestTransaction (Configuration configuration , UpToken token ) {
234268 List <String > hosts = getUcServerList ();
235-
236- RequestTransaction transaction = new RequestTransaction (hosts , ZoneInfo .EmptyRegionId , token );
269+ if (configuration == null ) {
270+ configuration = new Configuration .Builder ().build ();
271+ }
272+ RequestTransaction transaction = new RequestTransaction (configuration , UploadOptions .defaultOptions (),
273+ hosts , ZoneInfo .EmptyRegionId , null , token );
237274 transactions .add (transaction );
238275 return transaction ;
239276 }
0 commit comments