Skip to content

Commit d8376cd

Browse files
committed
update qcloud sdk to 5.6.3
1 parent 4b57f4d commit d8376cd

File tree

10 files changed

+109
-29
lines changed

10 files changed

+109
-29
lines changed

QCloudCosXml/cosxml-ktx/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ android {
88
defaultConfig {
99
minSdkVersion 15
1010
targetSdkVersion 29
11-
versionCode 50602
12-
versionName "5.6.2"
11+
versionCode 50603
12+
versionName "5.6.3"
1313

1414
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1515
consumerProguardFiles "consumer-rules.pro"

QCloudCosXml/cosxml/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ android {
1616
minSdkVersion 15
1717
targetSdkVersion 28
1818

19-
versionCode 50602
20-
versionName "5.6.2"
19+
versionCode 50603
20+
versionName "5.6.3"
2121

2222
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
2323

@@ -68,7 +68,7 @@ android {
6868

6969
// 切换发 normal 或者 slim 包,需要同步修改 pom.artifactId 信息
7070
defaultPublishConfig "normalRelease"
71-
// "slimRelease"
71+
// defaultPublishConfig "slimRelease"
7272

7373
compileOptions {
7474
sourceCompatibility = JavaVersion.VERSION_1_7
@@ -97,7 +97,7 @@ dependencies {
9797
annotationProcessor project(':xmlCompiler')
9898

9999
//lite版本使用normalApi
100-
// normalApi 'com.tencent.qcloud:beacon-android-release:4.1.13'
100+
//normalApi 'com.tencent.qcloud:beacon-android-release:4.1.13'
101101
//normal版本使用api
102102
api 'com.tencent.qcloud:beacon-android-release:4.1.13'
103103
slimCompileOnly 'com.tencent.qcloud:beacon-android-release:4.1.13'

QCloudCosXml/cosxml/src/androidTest/java/com/tencent/cos/xml/transfer/DownloadTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import com.tencent.cos.xml.model.CosXmlRequest;
3636
import com.tencent.cos.xml.model.CosXmlResult;
3737
import com.tencent.cos.xml.model.object.GetObjectRequest;
38+
import com.tencent.qcloud.core.http.HttpTaskMetrics;
39+
import com.tencent.qcloud.core.logger.QCloudLogger;
3840

3941
import org.junit.After;
4042
import org.junit.Assert;
@@ -63,6 +65,13 @@ public class DownloadTest {
6365
COSXMLDownloadTask downloadTask = transferManager.download(TestUtils.getContext(),
6466
getObjectRequest);
6567

68+
downloadTask.setOnGetHttpTaskMetrics(new COSXMLTask.OnGetHttpTaskMetrics() {
69+
@Override
70+
public void onGetHttpMetrics(String requestName, HttpTaskMetrics httpTaskMetrics) {
71+
QCloudLogger.i(TestConst.UT_TAG, "connect ip is " + httpTaskMetrics.getConnectAddress().getAddress().getHostAddress());
72+
}
73+
});
74+
6675
final TestLocker testLocker = new TestLocker();
6776
downloadTask.setCosXmlResultListener(new CosXmlResultListener() {
6877
@Override
@@ -77,6 +86,8 @@ public void onFail(CosXmlRequest request, CosXmlClientException clientException,
7786
}
7887
});
7988

89+
90+
8091
testLocker.lock();
8192
TestUtils.assertCOSXMLTaskSuccess(downloadTask);
8293
}

QCloudCosXml/cosxml/src/androidTest/java/com/tencent/cos/xml/transfer/UploadTest.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
import com.tencent.cos.xml.model.CosXmlRequest;
4040
import com.tencent.cos.xml.model.CosXmlResult;
4141
import com.tencent.cos.xml.model.object.PutObjectRequest;
42+
import com.tencent.qcloud.core.http.HttpTaskMetrics;
43+
import com.tencent.qcloud.core.logger.QCloudLogger;
4244

4345
import org.junit.Assert;
4446
import org.junit.Test;
@@ -124,6 +126,12 @@ public void onFail(CosXmlRequest request, CosXmlClientException clientException,
124126
TestConst.PERSIST_BUCKET_SMALL_OBJECT_PATH, Uri.fromFile(new File(TestUtils.smallFilePath())));
125127

126128
COSXMLUploadTask uploadTask = transferManager.upload(putObjectRequest, null);
129+
uploadTask.setOnGetHttpTaskMetrics(new COSXMLTask.OnGetHttpTaskMetrics() {
130+
@Override
131+
public void onGetHttpMetrics(String requestName, HttpTaskMetrics httpTaskMetrics) {
132+
QCloudLogger.i(TestConst.UT_TAG, "connect ip is " + httpTaskMetrics.getConnectAddress().getAddress().getHostAddress());
133+
}
134+
});
127135
final TestLocker testLocker = new TestLocker();
128136
uploadTask.setCosXmlResultListener(new CosXmlResultListener() {
129137
@Override
@@ -149,6 +157,18 @@ public void onFail(CosXmlRequest request, CosXmlClientException clientException,
149157
COSXMLUploadTask uploadTask = transferManager.upload(TestConst.PERSIST_BUCKET, TestConst.PERSIST_BUCKET_BIG_OBJECT_PATH,
150158
Uri.fromFile(new File(TestUtils.bigFilePath())), null);
151159
final TestLocker testLocker = new TestLocker();
160+
uploadTask.setTransferStateListener(new TransferStateListener() {
161+
@Override
162+
public void onStateChanged(TransferState state) {
163+
QCloudLogger.i("QCloudTest", "state is " + state);
164+
}
165+
});
166+
uploadTask.setOnGetHttpTaskMetrics(new COSXMLTask.OnGetHttpTaskMetrics() {
167+
@Override
168+
public void onGetHttpMetrics(String requestName, HttpTaskMetrics httpTaskMetrics) {
169+
QCloudLogger.i(TestConst.UT_TAG, "connect ip is " + httpTaskMetrics.getConnectAddress().getAddress().getHostAddress());
170+
}
171+
});
152172
uploadTask.setCosXmlResultListener(new CosXmlResultListener() {
153173
@Override
154174
public void onSuccess(CosXmlRequest request, CosXmlResult result) {
@@ -312,7 +332,7 @@ public void testResumeTask() throws Exception{
312332

313333
final TestLocker uploadLocker = new TestLocker();
314334
String cosPath = UPLOAD_FOLDER+"uploadTask_resume" + System.currentTimeMillis();
315-
final String srcPath = TestUtils.bigFilePath();
335+
final String srcPath = Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS) + "/big.zip"; //TestUtils.bigFilePath();
316336
final COSXMLUploadTask cosxmlUploadTask = transferManager.upload(TestConst.PERSIST_BUCKET, cosPath, srcPath, null);
317337

318338
cosxmlUploadTask.setTransferStateListener(new TransferStateListener() {
@@ -337,7 +357,7 @@ public void onFail(CosXmlRequest request, CosXmlClientException clientException,
337357
});
338358

339359
// 上传 5s 后暂停
340-
Thread.sleep(5000);
360+
Thread.sleep(10000);
341361
if (cosxmlUploadTask.getTaskState() == TransferState.COMPLETED) {
342362
Assert.assertTrue(true);
343363
return;

QCloudCosXml/cosxml/src/main/java/com/tencent/cos/xml/CosXmlSimpleService.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,9 @@ protected <T1 extends CosXmlRequest, T2 extends CosXmlResult> T2 execute(T1 cosX
387387
throws CosXmlClientException, CosXmlServiceException {
388388
long start = System.nanoTime();
389389
try {
390-
cosXmlRequest.attachMetrics(new HttpTaskMetrics());
390+
if (cosXmlRequest.getMetrics() == null) {
391+
cosXmlRequest.attachMetrics(new HttpTaskMetrics());
392+
}
391393
QCloudHttpRequest<T2> httpRequest = buildHttpRequest(cosXmlRequest, cosXmlResult);
392394
HttpTask<T2> httpTask;
393395

@@ -447,7 +449,9 @@ public void onFailure(QCloudClientException clientException, QCloudServiceExcept
447449
};
448450

449451
try {
450-
cosXmlRequest.attachMetrics(new HttpTaskMetrics());
452+
if (cosXmlRequest.getMetrics() == null) {
453+
cosXmlRequest.attachMetrics(new HttpTaskMetrics());
454+
}
451455
QCloudHttpRequest<T2> httpRequest = buildHttpRequest(cosXmlRequest, cosXmlResult);
452456

453457
HttpTask<T2> httpTask;

QCloudCosXml/cosxml/src/main/java/com/tencent/cos/xml/transfer/COSXMLTask.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
import com.tencent.cos.xml.model.object.PutObjectRequest;
3939
import com.tencent.cos.xml.model.object.UploadPartRequest;
4040
import com.tencent.qcloud.core.http.HttpTaskMetrics;
41+
import com.tencent.qcloud.core.logger.QCloudLogger;
42+
4143
import java.util.List;
4244
import java.util.Map;
4345
import java.util.concurrent.atomic.AtomicBoolean;
@@ -144,14 +146,21 @@ public void setOnGetHttpTaskMetrics(OnGetHttpTaskMetrics onGetHttpTaskMetrics){
144146
}
145147

146148
protected void getHttpMetrics(CosXmlRequest cosXmlRequest, final String requestName){
147-
if(onGetHttpTaskMetrics != null){
148-
cosXmlRequest.attachMetrics(new HttpTaskMetrics(){
149-
@Override
150-
public void onDataReady() {
151-
super.onDataReady();
152-
onGetHttpTaskMetrics.onGetHttpMetrics(requestName, this);
153-
}
154-
});
149+
cosXmlRequest.attachMetrics(new COSXMLMetrics(requestName));
150+
}
151+
152+
class COSXMLMetrics extends HttpTaskMetrics {
153+
154+
String requestName;
155+
COSXMLMetrics(String requestName) {
156+
this.requestName = requestName;
157+
}
158+
@Override
159+
public void onDataReady() {
160+
super.onDataReady();
161+
if (onGetHttpTaskMetrics != null) {
162+
onGetHttpTaskMetrics.onGetHttpMetrics(requestName, this);
163+
}
155164
}
156165
}
157166

@@ -269,6 +278,9 @@ private void dispatchStateChange(TransferState transferState) {
269278
* @param newTaskState new state for operating
270279
*/
271280
protected synchronized void updateState(TransferState newTaskState, Exception exception, CosXmlResult result, boolean isInit){
281+
282+
// QCloudLogger.i("QCloudTest", "newState " + newTaskState + ", current " + taskState + ", isinit " + isInit);
283+
272284
if(isInit){
273285
if(exception != null){
274286
if(cosXmlResultListener != null){

QCloudCosXml/cosxml/src/main/java/com/tencent/cos/xml/transfer/COSXMLUploadTask.java

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ private void initMultiUpload(CosXmlSimpleService cosXmlService){
354354
// @Override
355355
// public void onStateChanged(String taskId, int state) {
356356
// if(IS_EXIT.get())return;
357-
// updateState(TransferState.IN_PROGRESS, null, null, false);
357+
// updateState(TransferState.WAITING, null, null, false);
358358
// }
359359
// });
360360
cosXmlService.initMultipartUploadAsync(initMultipartUploadRequest, new CosXmlResultListener() {
@@ -478,17 +478,36 @@ private InputStream openUploadFileStream() throws IOException {
478478

479479
private boolean verifyUploadParts(ListParts listParts, InputStream inputStream) throws IOException {
480480

481-
long start = 0;
482-
long end = 0;
483-
for (ListParts.Part part : listParts.parts) {
484-
end = start + Long.parseLong(part.size) - 1;
485-
String localMd5 = DigestUtils.getCOSMd5(inputStream, Long.parseLong(part.size));
481+
List<ListParts.Part> parts = listParts.parts;
482+
Collections.sort(parts, new Comparator<ListParts.Part>() {
483+
@Override
484+
public int compare(ListParts.Part a, ListParts.Part b) {
485+
int aNumb = Integer.valueOf(a.partNumber);
486+
int bNumb = Integer.valueOf(b.partNumber);
487+
if(aNumb > bNumb) return 1;
488+
if(aNumb < bNumb) return -1;
489+
return 0;
490+
}
491+
});
492+
493+
boolean isFixSliceSize = isFixSliceSize(parts);
494+
boolean isContinuousSlice = true;
495+
int lastPartNumber = 0;
496+
for (ListParts.Part part : parts) {
497+
int partNumber = Integer.parseInt(part.partNumber);
498+
isContinuousSlice = isContinuousSlice && lastPartNumber + 1 == partNumber;
499+
500+
// 变长分块大小,且不连续的分块会抛弃
501+
if (!isFixSliceSize && !isContinuousSlice) {
502+
return true;
503+
}
504+
String localMd5 = DigestUtils.getCOSMd5(inputStream, (partNumber - lastPartNumber - 1) * sliceSize, Long.parseLong(part.size));
486505
if (!part.eTag.equals(localMd5)) {
487506
QCloudLogger.i(TAG, "verify upload parts failed, part number " +
488507
part.partNumber + ", etag " + part.eTag + ", but local md5 is " + localMd5);
489508
return false;
490509
}
491-
start = end + 1;
510+
lastPartNumber = partNumber;
492511
}
493512
return true;
494513
}
@@ -634,6 +653,7 @@ protected void internalFailed() {
634653

635654
@Override
636655
protected void internalPause() {
656+
637657
long uploadSize = ALREADY_SEND_DATA_LEN != null ? ALREADY_SEND_DATA_LEN.get() : simpleAlreadySendDataLen;
638658
BeaconService.getInstance().reportUpload(region, uploadSize, TimeUtils.getTookTime(startTime));
639659
cancelAllRequest(cosXmlService);
@@ -670,6 +690,7 @@ protected void internalResume() {
670690
}
671691

672692
void cancelAllRequest(CosXmlSimpleService cosXmlService){
693+
673694
PutObjectRequest tempPutObjectRequest = putObjectRequest;
674695
if(tempPutObjectRequest != null){
675696
cosXmlService.cancel(tempPutObjectRequest);

QCloudCosXml/cosxml/src/main/java/com/tencent/cos/xml/transfer/TaskStateMonitor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030

3131
import com.tencent.cos.xml.BeaconService;
3232
import com.tencent.cos.xml.model.CosXmlResult;
33+
import com.tencent.qcloud.core.http.HttpLoggingInterceptor;
34+
import com.tencent.qcloud.core.logger.QCloudLogger;
3335

3436
import java.lang.reflect.Constructor;
3537
import java.lang.reflect.Field;
@@ -114,6 +116,9 @@ public void run() {
114116
taskHandler = new Handler(getLooper()){
115117
@Override
116118
public void handleMessage(Message msg) {
119+
120+
121+
117122
switch (msg.what){
118123
case MESSAGE_TASK_RESULT:
119124
StructMsg structMsg = (StructMsg) msg.obj;

QCloudCosXml/cosxml/src/main/java/com/tencent/cos/xml/utils/DigestUtils.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,21 @@ public static String getMD5(String filePath) throws CosXmlClientException {
8383
return md5;
8484
}
8585

86-
@Nullable public static String getCOSMd5(InputStream inputStream, long size) throws IOException {
86+
@Nullable public static String getCOSMd5(InputStream inputStream, long skip, long size) throws IOException {
8787
try{
88+
long skipNumber = inputStream.skip(skip);
89+
if (skipNumber != skip) {
90+
return "";
91+
}
8892
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
8993
byte[] buff = new byte[8 * 1024];
9094
int readLen;
9195
long remainLength = size;
92-
while (remainLength > 0L && (readLen = inputStream.read(buff, 0,
93-
(buff.length > remainLength ? (int) remainLength : buff.length)))!= -1){
96+
int needSize = Math.min((int)remainLength, buff.length);
97+
while (remainLength > 0L && (readLen = inputStream.read(buff, 0, needSize))!= -1){
98+
if (readLen < needSize) {
99+
return "";
100+
}
94101
messageDigest.update(buff, 0, readLen);
95102
remainLength -= readLen;
96103
}

QCloudCosXml/logUtils/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ android {
88
minSdkVersion 15
99
targetSdkVersion 27
1010
versionCode sdkVersionCode
11-
versionName "5.6.2"
11+
versionName "5.6.3"
1212

1313
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
1414

0 commit comments

Comments
 (0)