From 6934cf748354506e52d04ada5f10b51f8709ff39 Mon Sep 17 00:00:00 2001 From: z30035417 Date: Sat, 12 Aug 2023 11:56:51 +0800 Subject: [PATCH] Version 3.23.5 New features: 1. Allow you put Object in two Buckets by calling putObjectInTwoBucket 2. Allow you query statistics on the capacity of standard, warm and cold objects in bucket --- README-Android.md | 5 + README-Java.md | 5 + README.MD | 5 + README_CN.MD | 5 + .../obs/services/AbstractObjectClient.java | 52 ++++++ .../java/com/obs/services/IObsClient.java | 4 + .../handler/XmlResponsesSaxParser.java | 28 +++ .../service/ObsObjectBaseService.java | 53 ++++++ .../services/internal/utils/ObjectUtils.java | 4 + .../internal/utils/V4Authentication.java | 3 +- .../obs/services/model/BucketStorageInfo.java | 160 +++++++++++++++++- .../model/PutObjectInTwoBucketRequest.java | 54 ++++++ .../model/PutObjectInTwoBucketResult.java | 56 ++++++ app/src/main/resource/obs.properties | 3 +- pom-android.xml | 2 +- pom-java-optimization.xml | 2 +- pom-java.xml | 2 +- pom.xml | 2 +- 18 files changed, 437 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/com/obs/services/model/PutObjectInTwoBucketRequest.java create mode 100644 app/src/main/java/com/obs/services/model/PutObjectInTwoBucketResult.java diff --git a/README-Android.md b/README-Android.md index 24a6631..68b655e 100644 --- a/README-Android.md +++ b/README-Android.md @@ -1,3 +1,8 @@ +Version 3.23.5 +New features: +1. Allow you put Object in two Buckets by calling putObjectInTwoBucket +2. Allow you query statistics on the capacity of standard, warm and cold objects in bucket +----------------------------------------------------------------------------------- Version 3.23.3 New features: 1. Allow you to query the progress of crr diff --git a/README-Java.md b/README-Java.md index 12f78d8..9e53ca6 100644 --- a/README-Java.md +++ b/README-Java.md @@ -1,3 +1,8 @@ +Version 3.23.5 +New features: +1. Allow you put Object in two Buckets by calling putObjectInTwoBucket +2. Allow you query statistics on the capacity of standard, warm and cold objects in bucket +----------------------------------------------------------------------------------- Version 3.23.3 New features: 1. Allow you to query the progress of crr diff --git a/README.MD b/README.MD index a85e0d9..dbec4c6 100644 --- a/README.MD +++ b/README.MD @@ -1,3 +1,8 @@ +Version 3.23.5 +New features: +1. Allow you put Object in two Buckets by calling putObjectInTwoBucket +2. Allow you query statistics on the capacity of standard, warm and cold objects in bucket +----------------------------------------------------------------------------------- Version 3.23.3 New features: 1. Allow you to query the progress of crr diff --git a/README_CN.MD b/README_CN.MD index d024d10..75700c8 100644 --- a/README_CN.MD +++ b/README_CN.MD @@ -1,3 +1,8 @@ +Version 3.23.5 +New features: +1. 新增双写桶能力 +2. 支持标准、归档、低频三种桶容量的统计 +----------------------------------------------------------------------------------- Version 3.23.3 New features: 1. 支持crr进度查询 diff --git a/app/src/main/java/com/obs/services/AbstractObjectClient.java b/app/src/main/java/com/obs/services/AbstractObjectClient.java index 2e6a21b..e5e8257 100644 --- a/app/src/main/java/com/obs/services/AbstractObjectClient.java +++ b/app/src/main/java/com/obs/services/AbstractObjectClient.java @@ -20,6 +20,7 @@ import com.obs.services.exception.ObsException; import com.obs.services.internal.ServiceException; +import com.obs.services.internal.utils.ObjectUtils; import com.obs.services.internal.utils.ServiceUtils; import com.obs.services.model.AccessControlList; import com.obs.services.model.AppendObjectRequest; @@ -43,6 +44,8 @@ import com.obs.services.model.ObsObject; import com.obs.services.model.OptionsInfoRequest; import com.obs.services.model.OptionsInfoResult; +import com.obs.services.model.PutObjectInTwoBucketRequest; +import com.obs.services.model.PutObjectInTwoBucketResult; import com.obs.services.model.PutObjectRequest; import com.obs.services.model.PutObjectResult; import com.obs.services.model.RestoreObjectRequest; @@ -317,6 +320,55 @@ public PutObjectResult putObject(String bucketName, String objectKey, File file, request.setMetadata(metadata); return this.putObject(request); } + + @Override + public PutObjectInTwoBucketResult putObjectInTwoBucket(PutObjectInTwoBucketRequest request) + throws ObsException { + ServiceUtils.assertParameterNotNull(request, "PutObjectInTwoBucketRequest is null"); + ServiceUtils.assertParameterNotNull(request.getMainBucketRequest(), "mainBucketRequest is null"); + ServiceUtils.assertParameterNotNull(request.getBackupBucketRequest(), "backupBucketRequest is null"); + ServiceUtils.assertParameterNotNull2(request.getBackupBucketRequest().getBucketName(), "backupBucketName is null"); + ServiceUtils.assertParameterNotNull2(request.getMainBucketRequest().getBucketName(), "mainBucketName is null"); + ServiceUtils.assertParameterNotNull2(request.getBackupBucketRequest().getObjectKey(), "backupObjectKey is null"); + ServiceUtils.assertParameterNotNull2(request.getMainBucketRequest().getObjectKey(), "mainObjectKey is null"); + String path = request.getFilePath(); + if (ObjectUtils.isNotBlank(path)) { + File file = new File(path); + if (file.exists()) { + PutObjectRequest mainBucketRequest = request.getMainBucketRequest(); + mainBucketRequest.setFile(file); + request.setMainBucketRequest(mainBucketRequest); + PutObjectRequest backupBucketRequest = request.getBackupBucketRequest(); + backupBucketRequest.setFile(file); + request.setBackupBucketRequest(backupBucketRequest); + } + } + return this.doActionWithResult("putObjectInTwoBucket", "All Buckets", + new ActionCallbackWithResult() { + @Override + public PutObjectInTwoBucketResult action() throws ServiceException { + if (null != request.getMainBucketRequest().getInput() + && null != request.getMainBucketRequest().getFile()) { + throw new ServiceException("Both input and file are set, only one is allowed in main bucket request."); + } + if (null != request.getBackupBucketRequest().getInput() + && null != request.getBackupBucketRequest().getFile()) { + throw new ServiceException("Both input and file are set, only one is allowed in backup bucket request."); + } + return AbstractObjectClient.this.putObjectInTwoBucketImpl(request); + } + + @Override + void authTypeNegotiate(String bucketName) throws ServiceException { + AuthTypeEnum authTypeEnum = AbstractObjectClient.this.getProviderCredentials() + .getLocalAuthType().get(bucketName); + if (authTypeEnum == null) { + authTypeEnum = AbstractObjectClient.this.getApiVersion(""); + AbstractObjectClient.this.getProviderCredentials().setLocalAuthType(bucketName, authTypeEnum); + } + } + }); + } /* * (non-Javadoc) diff --git a/app/src/main/java/com/obs/services/IObsClient.java b/app/src/main/java/com/obs/services/IObsClient.java index 0ad4cfe..626d004 100644 --- a/app/src/main/java/com/obs/services/IObsClient.java +++ b/app/src/main/java/com/obs/services/IObsClient.java @@ -79,6 +79,8 @@ import com.obs.services.model.ObsObject; import com.obs.services.model.PostSignatureRequest; import com.obs.services.model.PostSignatureResponse; +import com.obs.services.model.PutObjectInTwoBucketRequest; +import com.obs.services.model.PutObjectInTwoBucketResult; import com.obs.services.model.PutObjectRequest; import com.obs.services.model.PutObjectResult; import com.obs.services.model.PutObjectsRequest; @@ -1652,6 +1654,8 @@ PutObjectResult putObject(String bucketName, String objectKey, InputStream input PutObjectResult putObject(String bucketName, String objectKey, File file, ObjectMetadata metadata) throws ObsException; + PutObjectInTwoBucketResult putObjectInTwoBucket(final PutObjectInTwoBucketRequest request) throws ObsException; + /** * Perform an appendable upload. * diff --git a/app/src/main/java/com/obs/services/internal/handler/XmlResponsesSaxParser.java b/app/src/main/java/com/obs/services/internal/handler/XmlResponsesSaxParser.java index 2465b3c..b0b81cd 100644 --- a/app/src/main/java/com/obs/services/internal/handler/XmlResponsesSaxParser.java +++ b/app/src/main/java/com/obs/services/internal/handler/XmlResponsesSaxParser.java @@ -2470,6 +2470,34 @@ public void endElement(String name, String content) { storageInfo.setSize(Long.parseLong(content)); } else if (name.equals("ObjectNumber")) { storageInfo.setObjectNumber(Long.parseLong(content)); + } else if (name.equals("StandardSize")) { + storageInfo.setStandardSize(Long.parseLong(content)); + } else if (name.equals("StandardObjectNumber")) { + storageInfo.setStandardObjectNumber(Long.parseLong(content)); + } else if (name.equals("WarmSize")) { + storageInfo.setWarmSize(Long.parseLong(content)); + } else if (name.equals("WarmObjectNumber")) { + storageInfo.setWarmObjectNumber(Long.parseLong(content)); + } else if (name.equals("ColdSize")) { + storageInfo.setColdSize(Long.parseLong(content)); + } else if (name.equals("ColdObjectNumber")) { + storageInfo.setColdObjectNumber(Long.parseLong(content)); + } else if (name.equals("DeepArchiveSize")) { + storageInfo.setDeepArchiveSize(Long.parseLong(content)); + } else if (name.equals("DeepArchiveObjectNumber")) { + storageInfo.setDeepArchiveObjectNumber(Long.parseLong(content)); + } else if (name.equals("HighPerformanceSize")) { + storageInfo.setHighPerformanceSize(Long.parseLong(content)); + } else if (name.equals("HighPerformanceObjectNumber")) { + storageInfo.setHighPerformanceObjectNumber(Long.parseLong(content)); + } else if (name.equals("Standard_IASize")) { + storageInfo.setStandard_IASize(Long.parseLong(content)); + } else if (name.equals("Standard_IAObjectNumber")) { + storageInfo.setStandard_IAObjectNumber(Long.parseLong(content)); + } else if (name.equals("GlacierSize")) { + storageInfo.setGlacierSize(Long.parseLong(content)); + } else if (name.equals("GlacierObjectNumber")) { + storageInfo.setGlacierObjectNumber(Long.parseLong(content)); } } } diff --git a/app/src/main/java/com/obs/services/internal/service/ObsObjectBaseService.java b/app/src/main/java/com/obs/services/internal/service/ObsObjectBaseService.java index b6f1ed7..7286016 100644 --- a/app/src/main/java/com/obs/services/internal/service/ObsObjectBaseService.java +++ b/app/src/main/java/com/obs/services/internal/service/ObsObjectBaseService.java @@ -17,6 +17,7 @@ import com.obs.log.ILogger; import com.obs.log.LoggerBuilder; +import com.obs.services.exception.ObsException; import com.obs.services.internal.Constants; import com.obs.services.internal.Constants.CommonHeaders; import com.obs.services.internal.Constants.ObsRequestParams; @@ -45,7 +46,10 @@ import com.obs.services.model.HttpMethodEnum; import com.obs.services.model.ObjectMetadata; import com.obs.services.model.ObsObject; +import com.obs.services.model.PutObjectInTwoBucketRequest; +import com.obs.services.model.PutObjectInTwoBucketResult; import com.obs.services.model.PutObjectRequest; +import com.obs.services.model.PutObjectResult; import com.obs.services.model.SetObjectAclRequest; import com.obs.services.model.SetObjectMetadataRequest; import com.obs.services.model.SpecialParamEnum; @@ -68,6 +72,10 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; public abstract class ObsObjectBaseService extends ObsBucketAdvanceService { private static final ILogger log = LoggerBuilder.getLogger(ObsObjectBaseService.class); @@ -137,6 +145,51 @@ protected ObsFSFile putObjectImpl(PutObjectRequest request) throws ServiceExcept return ret; } + protected PutObjectInTwoBucketResult putObjectInTwoBucketImpl(PutObjectInTwoBucketRequest request) throws ObsException { + ExecutorService executorService = Executors.newFixedThreadPool(2); + PutObjectInTwoBucketResult putObjectInTwoBucketResult; + try { + Future futureMainBucket = executorService.submit(() -> { + PutObjectInTwoBucketResult result = new PutObjectInTwoBucketResult(); + try { + PutObjectResult putObjectResult = this.putObjectImpl(request.getMainBucketRequest()); + result.setMainBucketResult(putObjectResult); + } catch (ServiceException e) { + result.setMainBucketException(ServiceUtils.changeFromServiceException(e)); + } catch (Exception e) { + result.setMainBucketException(ServiceUtils.changeFromException(e)); + } + return result; + }); + + Future futureBackupBucket = executorService.submit(() -> { + PutObjectInTwoBucketResult result = new PutObjectInTwoBucketResult(); + try { + PutObjectResult putObjectResult = this.putObjectImpl(request.getBackupBucketRequest()); + result.setBackupBucketResult(putObjectResult); + } catch (ServiceException e) { + result.setBackupBucketException(ServiceUtils.changeFromServiceException(e)); + } catch (Exception e) { + result.setBackupBucketException(ServiceUtils.changeFromException(e)); + } + return result; + }); + + executorService.shutdown(); + executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS); + + putObjectInTwoBucketResult = futureMainBucket.get(); + PutObjectInTwoBucketResult backupBucketResult = futureBackupBucket.get(); + putObjectInTwoBucketResult.setBackupBucketResult(backupBucketResult.getBackupBucketResult()); + putObjectInTwoBucketResult.setBackupBucketException(backupBucketResult.getBackupBucketException()); + } catch (ServiceException e) { + throw ServiceUtils.changeFromServiceException(e); + } catch (Exception e) { + throw ServiceUtils.changeFromException(e); + } + return putObjectInTwoBucketResult; + } + protected ObsObject getObjectImpl(GetObjectRequest request) throws ServiceException { return (ObsObject) this.getObjectImpl((GetObjectMetadataRequest) request); } diff --git a/app/src/main/java/com/obs/services/internal/utils/ObjectUtils.java b/app/src/main/java/com/obs/services/internal/utils/ObjectUtils.java index 5904445..58dc653 100644 --- a/app/src/main/java/com/obs/services/internal/utils/ObjectUtils.java +++ b/app/src/main/java/com/obs/services/internal/utils/ObjectUtils.java @@ -26,4 +26,8 @@ public static boolean isEquals(Object obj1, Object obj2) { return obj1.equals(obj2); } } + + public static boolean isNotBlank(String str) { + return str != null && str.length() > 0; + } } diff --git a/app/src/main/java/com/obs/services/internal/utils/V4Authentication.java b/app/src/main/java/com/obs/services/internal/utils/V4Authentication.java index cd8d6d5..412ef45 100644 --- a/app/src/main/java/com/obs/services/internal/utils/V4Authentication.java +++ b/app/src/main/java/com/obs/services/internal/utils/V4Authentication.java @@ -37,7 +37,8 @@ public class V4Authentication { - public static final String CONTENT_SHA256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; + public static final String CONTENT_SHA256 = PropertyManager.getInstance(Constants.PROPERTY_NAME_OBS) + .getFormattedString("content.sha256"); private String ak; diff --git a/app/src/main/java/com/obs/services/model/BucketStorageInfo.java b/app/src/main/java/com/obs/services/model/BucketStorageInfo.java index 1fa10d1..d7edb2a 100644 --- a/app/src/main/java/com/obs/services/model/BucketStorageInfo.java +++ b/app/src/main/java/com/obs/services/model/BucketStorageInfo.java @@ -22,6 +22,34 @@ public class BucketStorageInfo extends HeaderResponse { private long objectNum; + private long standardSize; + + private long standardObjectNumber; + + private long warmSize; + + private long warmObjectNumber; + + private long coldSize; + + private long coldObjectNumber; + + private long deepArchiveSize; + + private long deepArchiveObjectNumber; + + private long highPerformanceSize; + + private long highPerformanceObjectNumber; + + private long standard_IASize; + + private long standard_IAObjectNumber; + + private long glacierSize; + + private long glacierObjectNumber; + /** * Obtain the bucket quota (in bytes). * @@ -60,9 +88,137 @@ public void setObjectNumber(long objectNumber) { this.objectNum = objectNumber; } + public long getStandardSize() { + return standardSize; + } + + public void setStandardSize(long standardSize) { + this.standardSize = standardSize; + } + + public long getStandardObjectNumber() { + return standardObjectNumber; + } + + public void setStandardObjectNumber(long standardObjectNumber) { + this.standardObjectNumber = standardObjectNumber; + } + + public long getWarmSize() { + return warmSize; + } + + public void setWarmSize(long warmSize) { + this.warmSize = warmSize; + } + + public long getWarmObjectNumber() { + return warmObjectNumber; + } + + public void setWarmObjectNumber(long warmObjectNumber) { + this.warmObjectNumber = warmObjectNumber; + } + + public long getColdSize() { + return coldSize; + } + + public void setColdSize(long coldSize) { + this.coldSize = coldSize; + } + + public long getColdObjectNumber() { + return coldObjectNumber; + } + + public void setColdObjectNumber(long coldObjectNumber) { + this.coldObjectNumber = coldObjectNumber; + } + + public long getDeepArchiveSize() { + return deepArchiveSize; + } + + public void setDeepArchiveSize(long deepArchiveSize) { + this.deepArchiveSize = deepArchiveSize; + } + + public long getDeepArchiveObjectNumber() { + return deepArchiveObjectNumber; + } + + public void setDeepArchiveObjectNumber(long deepArchiveObjectNumber) { + this.deepArchiveObjectNumber = deepArchiveObjectNumber; + } + + public long getHighPerformanceSize() { + return highPerformanceSize; + } + + public void setHighPerformanceSize(long highPerformanceSize) { + this.highPerformanceSize = highPerformanceSize; + } + + public long getHighPerformanceObjectNumber() { + return highPerformanceObjectNumber; + } + + public void setHighPerformanceObjectNumber(long highPerformanceObjectNumber) { + this.highPerformanceObjectNumber = highPerformanceObjectNumber; + } + + public long getStandard_IASize() { + return standard_IASize; + } + + public void setStandard_IASize(long standard_IASize) { + this.standard_IASize = standard_IASize; + } + + public long getStandard_IAObjectNumber() { + return standard_IAObjectNumber; + } + + public void setStandard_IAObjectNumber(long standard_IAObjectNumber) { + this.standard_IAObjectNumber = standard_IAObjectNumber; + } + + public long getGlacierSize() { + return glacierSize; + } + + public void setGlacierSize(long glacierSize) { + this.glacierSize = glacierSize; + } + + public long getGlacierObjectNumber() { + return glacierObjectNumber; + } + + public void setGlacierObjectNumber(long glacierObjectNumber) { + this.glacierObjectNumber = glacierObjectNumber; + } + @Override public String toString() { - return "BucketStorageInfo [size=" + size + ", objectNum=" + objectNum + "]"; + return "BucketStorageInfo{" + + "size=" + size + + ", objectNum=" + objectNum + + ", standardSize=" + standardSize + + ", standardObjectNumber=" + standardObjectNumber + + ", warmSize=" + warmSize + + ", warmObjectNumber=" + warmObjectNumber + + ", coldSize=" + coldSize + + ", coldObjectNumber=" + coldObjectNumber + + ", deepArchiveSize=" + deepArchiveSize + + ", deepArchiveObjectNumber=" + deepArchiveObjectNumber + + ", highPerformanceSize=" + highPerformanceSize + + ", highPerformanceObjectNumber=" + highPerformanceObjectNumber + + ", standard_IASize=" + standard_IASize + + ", standard_IAObjectNumber=" + standard_IAObjectNumber + + ", glacierSize=" + glacierSize + + ", glacierObjectNumber=" + glacierObjectNumber + + '}'; } - } diff --git a/app/src/main/java/com/obs/services/model/PutObjectInTwoBucketRequest.java b/app/src/main/java/com/obs/services/model/PutObjectInTwoBucketRequest.java new file mode 100644 index 0000000..31a804c --- /dev/null +++ b/app/src/main/java/com/obs/services/model/PutObjectInTwoBucketRequest.java @@ -0,0 +1,54 @@ +/** + * Copyright 2019 Huawei Technologies Co.,Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the + * License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package com.obs.services.model; + +public class PutObjectInTwoBucketRequest { + private PutObjectRequest mainBucketRequest; + private PutObjectRequest backupBucketRequest; + private String filePath; + + public PutObjectRequest getMainBucketRequest() { + return mainBucketRequest; + } + + public void setMainBucketRequest(PutObjectRequest mainBucketRequest) { + this.mainBucketRequest = mainBucketRequest; + } + + public PutObjectRequest getBackupBucketRequest() { + return backupBucketRequest; + } + + public void setBackupBucketRequest(PutObjectRequest backupBucketRequest) { + this.backupBucketRequest = backupBucketRequest; + } + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + @Override + public String toString() { + return "PutObjectInTwoBucketRequest{" + + "mainBucketRequest=" + mainBucketRequest + + ", backupBucketRequest=" + backupBucketRequest + + ", filePath='" + filePath + '\'' + + '}'; + } +} diff --git a/app/src/main/java/com/obs/services/model/PutObjectInTwoBucketResult.java b/app/src/main/java/com/obs/services/model/PutObjectInTwoBucketResult.java new file mode 100644 index 0000000..8e50b81 --- /dev/null +++ b/app/src/main/java/com/obs/services/model/PutObjectInTwoBucketResult.java @@ -0,0 +1,56 @@ +/** + * Copyright 2019 Huawei Technologies Co.,Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the + * License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package com.obs.services.model; + +import com.obs.services.exception.ObsException; + +public class PutObjectInTwoBucketResult { + private PutObjectResult mainBucketResult; + private PutObjectResult backupBucketResult; + private ObsException mainBucketException; + private ObsException backupBucketException; + + public PutObjectResult getMainBucketResult() { + return mainBucketResult; + } + + public void setMainBucketResult(PutObjectResult mainBucketResult) { + this.mainBucketResult = mainBucketResult; + } + + public PutObjectResult getBackupBucketResult() { + return backupBucketResult; + } + + public void setBackupBucketResult(PutObjectResult backupBucketResult) { + this.backupBucketResult = backupBucketResult; + } + + public ObsException getMainBucketException() { + return mainBucketException; + } + + public void setMainBucketException(ObsException mainBucketException) { + this.mainBucketException = mainBucketException; + } + + public ObsException getBackupBucketException() { + return backupBucketException; + } + + public void setBackupBucketException(ObsException backupBucketException) { + this.backupBucketException = backupBucketException; + } +} diff --git a/app/src/main/resource/obs.properties b/app/src/main/resource/obs.properties index 36f88d9..fd8a1bf 100644 --- a/app/src/main/resource/obs.properties +++ b/app/src/main/resource/obs.properties @@ -1 +1,2 @@ -ecs.metadata.service.url=http://169.254.169.254 \ No newline at end of file +ecs.metadata.service.url=http://169.254.169.254 +content.sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 \ No newline at end of file diff --git a/pom-android.xml b/pom-android.xml index 84a9f86..256b414 100644 --- a/pom-android.xml +++ b/pom-android.xml @@ -4,7 +4,7 @@ com.huaweicloud esdk-obs-android - 3.23.3 + 3.23.5 jar OBS SDK for Android diff --git a/pom-java-optimization.xml b/pom-java-optimization.xml index 56431da..e8fedc6 100644 --- a/pom-java-optimization.xml +++ b/pom-java-optimization.xml @@ -4,7 +4,7 @@ com.huaweicloud esdk-obs-java-optimised - 3.23.3 + 3.23.5 jar OBS SDK for Java Optimised diff --git a/pom-java.xml b/pom-java.xml index 2adba79..6625538 100644 --- a/pom-java.xml +++ b/pom-java.xml @@ -4,7 +4,7 @@ com.huaweicloud esdk-obs-java - 3.23.3 + 3.23.5 jar OBS SDK for Java diff --git a/pom.xml b/pom.xml index 2e66a55..364aefc 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.huaweicloud esdk-obs-java - 3.23.3 + 3.23.5 jar OBS SDK for Java