Skip to content

Commit c438480

Browse files
authored
Merge pull request #87 from aliyun/udf-dev
fix lifecycle
2 parents b2fde05 + 272d1f1 commit c438480

File tree

6 files changed

+73
-42
lines changed

6 files changed

+73
-42
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
<groupId>com.aliyun.oss</groupId>
1313
<artifactId>aliyun-sdk-oss</artifactId>
14-
<version>2.6.0</version>
14+
<version>2.6.1</version>
1515
<packaging>jar</packaging>
1616
<name>Aliyun OSS SDK for Java</name>
1717
<description>The Aliyun OSS SDK for Java used for accessing Aliyun Object Storage Service</description>

src/main/java/com/aliyun/oss/common/parser/RequestMarshallers.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -403,16 +403,17 @@ public FixedLengthInputStream marshall(SetBucketLifecycleRequest request) {
403403
}
404404

405405
if (rule.hasStorageTransition()) {
406-
StorageTransition storageTransition = rule.getStorageTransition();
407-
xmlBody.append("<Transition>");
408-
if (storageTransition.hasExpirationDays()) {
409-
xmlBody.append("<Days>" + storageTransition.getExpirationDays() + "</Days>");
410-
} else if (storageTransition.hasCreatedBeforeDate()) {
411-
String formatDate = DateUtil.formatIso8601Date(storageTransition.getCreatedBeforeDate());
412-
xmlBody.append("<CreatedBeforeDate>" + formatDate + "</CreatedBeforeDate>");
406+
for (StorageTransition storageTransition : rule.getStorageTransition()) {
407+
xmlBody.append("<Transition>");
408+
if (storageTransition.hasExpirationDays()) {
409+
xmlBody.append("<Days>" + storageTransition.getExpirationDays() + "</Days>");
410+
} else if (storageTransition.hasCreatedBeforeDate()) {
411+
String formatDate = DateUtil.formatIso8601Date(storageTransition.getCreatedBeforeDate());
412+
xmlBody.append("<CreatedBeforeDate>" + formatDate + "</CreatedBeforeDate>");
413+
}
414+
xmlBody.append("<StorageClass>" + storageTransition.getStorageClass() + "</StorageClass>");
415+
xmlBody.append("</Transition>");
413416
}
414-
xmlBody.append("<StorageClass>" + storageTransition.getStorageClass() + "</StorageClass>");
415-
xmlBody.append("</Transition>");
416417
}
417418

418419
xmlBody.append("</Rule>");

src/main/java/com/aliyun/oss/internal/ResponseParsers.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
import com.aliyun.oss.model.RoutingRule;
8787
import com.aliyun.oss.model.StorageClass;
8888
import com.aliyun.oss.model.LifecycleRule.RuleStatus;
89+
import com.aliyun.oss.model.LifecycleRule.StorageTransition;
8990
import com.aliyun.oss.model.MultipartUpload;
9091
import com.aliyun.oss.model.MultipartUploadListing;
9192
import com.aliyun.oss.model.OSSObject;
@@ -2489,8 +2490,9 @@ public static List<LifecycleRule> parseGetBucketLifecycle(InputStream responseBo
24892490
rule.setAbortMultipartUpload(abortMultipartUpload);
24902491
}
24912492

2492-
if (ruleElem.getChild("Transition") != null) {
2493-
Element transitionElem = ruleElem.getChild("Transition");
2493+
List<Element> transitionElements = ruleElem.getChildren("Transition");
2494+
List<StorageTransition> storageTransitions = new ArrayList<StorageTransition>();
2495+
for (Element transitionElem : transitionElements) {
24942496
LifecycleRule.StorageTransition storageTransition = new LifecycleRule.StorageTransition();
24952497
if (transitionElem.getChild("Days") != null) {
24962498
storageTransition.setExpirationDays(Integer.parseInt(transitionElem.getChildText("Days")));
@@ -2501,8 +2503,9 @@ public static List<LifecycleRule> parseGetBucketLifecycle(InputStream responseBo
25012503
if (transitionElem.getChild("StorageClass") != null) {
25022504
storageTransition.setStorageClass(StorageClass.parse(transitionElem.getChildText("StorageClass")));
25032505
}
2504-
rule.setStorageTransition(storageTransition);
2506+
storageTransitions.add(storageTransition);
25052507
}
2508+
rule.setStorageTransition(storageTransitions);
25062509

25072510
lifecycleRules.add(rule);
25082511
}

src/main/java/com/aliyun/oss/model/LifecycleRule.java

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919

2020
package com.aliyun.oss.model;
2121

22+
import java.util.ArrayList;
2223
import java.util.Date;
24+
import java.util.List;
2325

2426
/**
2527
* 表示一条Lifecycle规则。
@@ -154,7 +156,7 @@ public StorageTransition withStrorageClass(StorageClass storageClass) {
154156
private Date createdBeforeDate;
155157

156158
private AbortMultipartUpload abortMultipartUpload;
157-
private StorageTransition storageTransition;
159+
private List<StorageTransition> storageTransitions = new ArrayList<StorageTransition>();
158160

159161
public LifecycleRule() {
160162
status = RuleStatus.Unknown;
@@ -193,41 +195,49 @@ public LifecycleRule(String id, String prefix, RuleStatus status,
193195
}
194196

195197
public LifecycleRule(String id, String prefix, RuleStatus status, int expirationDays,
196-
StorageTransition storageTransition) {
198+
List<StorageTransition> storageTransitions) {
197199
this.id = id;
198200
this.prefix = prefix;
199201
this.status = status;
200202
this.expirationDays = expirationDays;
201-
this.storageTransition = storageTransition;
203+
if (storageTransitions != null && !storageTransitions.isEmpty()) {
204+
this.storageTransitions.addAll(storageTransitions);
205+
}
202206
}
203207

204208
public LifecycleRule(String id, String prefix, RuleStatus status, Date expirationTime,
205-
StorageTransition storageTransition) {
209+
List<StorageTransition> storageTransitions) {
206210
this.id = id;
207211
this.prefix = prefix;
208212
this.status = status;
209213
this.expirationTime = expirationTime;
210-
this.storageTransition = storageTransition;
214+
if (storageTransitions != null && !storageTransitions.isEmpty()) {
215+
this.storageTransitions.addAll(storageTransitions);
216+
}
211217
}
212218

213219
public LifecycleRule(String id, String prefix, RuleStatus status, int expirationDays,
214-
AbortMultipartUpload abortMultipartUpload, StorageTransition storageTransition) {
220+
AbortMultipartUpload abortMultipartUpload, List<StorageTransition> storageTransitions) {
215221
this.id = id;
216222
this.prefix = prefix;
217223
this.status = status;
218224
this.expirationDays = expirationDays;
219225
this.abortMultipartUpload = abortMultipartUpload;
220-
this.storageTransition = storageTransition;
226+
if (storageTransitions != null && !storageTransitions.isEmpty()) {
227+
this.storageTransitions.addAll(storageTransitions);
228+
}
221229
}
222230

223231
public LifecycleRule(String id, String prefix, RuleStatus status, Date expirationTime,
224-
AbortMultipartUpload abortMultipartUpload, StorageTransition storageTransition) {
232+
AbortMultipartUpload abortMultipartUpload, List<StorageTransition> storageTransitions) {
225233
this.id = id;
226234
this.prefix = prefix;
227235
this.status = status;
228236
this.expirationTime = expirationTime;
229237
this.abortMultipartUpload = abortMultipartUpload;
230-
this.storageTransition = storageTransition;
238+
if (storageTransitions != null && !storageTransitions.isEmpty()) {
239+
this.storageTransitions.addAll(storageTransitions);
240+
}
231241
}
232242

233243
public String getId() {
@@ -312,15 +322,15 @@ public boolean hasAbortMultipartUpload() {
312322
return this.abortMultipartUpload != null;
313323
}
314324

315-
public StorageTransition getStorageTransition() {
316-
return storageTransition;
325+
public List<StorageTransition> getStorageTransition() {
326+
return this.storageTransitions;
317327
}
318328

319-
public void setStorageTransition(StorageTransition storageTransition) {
320-
this.storageTransition = storageTransition;
329+
public void setStorageTransition(List<StorageTransition> storageTransitions) {
330+
this.storageTransitions = storageTransitions;
321331
}
322332

323333
public boolean hasStorageTransition() {
324-
return this.storageTransition != null;
334+
return this.storageTransitions != null && !storageTransitions.isEmpty();
325335
}
326336
}

src/main/java/com/aliyun/oss/model/SetBucketLifecycleRequest.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import java.util.ArrayList;
2323
import java.util.List;
2424

25+
import com.aliyun.oss.model.LifecycleRule.StorageTransition;
26+
2527
public class SetBucketLifecycleRequest extends GenericRequest {
2628

2729
public static final int MAX_LIFECYCLE_RULE_LIMIT = 1000;
@@ -72,7 +74,8 @@ public void AddLifecycleRule(LifecycleRule lifecycleRule) {
7274
int expirationDaysFlag = lifecycleRule.hasExpirationDays() ? 1 : 0;
7375
int createdBeforeDateFlag = lifecycleRule.hasCreatedBeforeDate() ? 1 : 0;
7476
int flagSum = expirationTimeFlag + expirationDaysFlag + createdBeforeDateFlag;
75-
if (flagSum > 1) {
77+
if (flagSum > 1 ||
78+
(flagSum == 0 && !lifecycleRule.hasAbortMultipartUpload() && !lifecycleRule.hasStorageTransition())) {
7679
throw new IllegalArgumentException("Only one expiration property should be specified.");
7780
}
7881

@@ -91,12 +94,13 @@ public void AddLifecycleRule(LifecycleRule lifecycleRule) {
9194
}
9295

9396
if (lifecycleRule.hasStorageTransition()) {
94-
LifecycleRule.StorageTransition storageTransition = lifecycleRule.getStorageTransition();
95-
expirationDaysFlag = storageTransition.hasExpirationDays() ? 1 : 0;
96-
createdBeforeDateFlag = storageTransition.hasCreatedBeforeDate() ? 1 : 0;
97-
flagSum = expirationDaysFlag + createdBeforeDateFlag;
98-
if (flagSum != 1) {
99-
throw new IllegalArgumentException("Only one expiration property for StorageTransition should be specified.");
97+
for (StorageTransition storageTransition : lifecycleRule.getStorageTransition()) {
98+
expirationDaysFlag = storageTransition.hasExpirationDays() ? 1 : 0;
99+
createdBeforeDateFlag = storageTransition.hasCreatedBeforeDate() ? 1 : 0;
100+
flagSum = expirationDaysFlag + createdBeforeDateFlag;
101+
if (flagSum != 1) {
102+
throw new IllegalArgumentException("Only one expiration property for StorageTransition should be specified.");
103+
}
100104
}
101105
}
102106

src/test/java/com/aliyun/oss/integrationtests/BucketLifecycleTest.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import static com.aliyun.oss.model.SetBucketLifecycleRequest.MAX_RULE_ID_LENGTH;
2828

2929
import java.text.ParseException;
30+
import java.util.ArrayList;
3031
import java.util.List;
3132

3233
import junit.framework.Assert;
@@ -79,10 +80,16 @@ public void testNormalSetBucketLifecycle() throws ParseException {
7980
abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
8081
abortMultipartUpload.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
8182
rule.setAbortMultipartUpload(abortMultipartUpload);
82-
LifecycleRule.StorageTransition storageTransition = new LifecycleRule.StorageTransition();
83+
List<StorageTransition> storageTransitions = new ArrayList<StorageTransition>();
84+
StorageTransition storageTransition = new StorageTransition();
8385
storageTransition.setStorageClass(StorageClass.IA);
86+
storageTransition.setExpirationDays(10);
87+
storageTransitions.add(storageTransition);
88+
storageTransition = new LifecycleRule.StorageTransition();
89+
storageTransition.setStorageClass(StorageClass.Archive);
8490
storageTransition.setExpirationDays(20);
85-
rule.setStorageTransition(storageTransition);
91+
storageTransitions.add(storageTransition);
92+
rule.setStorageTransition(storageTransitions);
8693
request.AddLifecycleRule(rule);
8794

8895
rule = new LifecycleRule(ruleId4, matchPrefix4, RuleStatus.Enabled);
@@ -93,7 +100,9 @@ public void testNormalSetBucketLifecycle() throws ParseException {
93100
storageTransition = new LifecycleRule.StorageTransition();
94101
storageTransition.setStorageClass(StorageClass.Archive);
95102
storageTransition.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
96-
rule.setStorageTransition(storageTransition);
103+
storageTransitions = new ArrayList<StorageTransition>();
104+
storageTransitions.add(storageTransition);
105+
rule.setStorageTransition(storageTransitions);
97106
request.AddLifecycleRule(rule);
98107

99108
ossClient.setBucketLifecycle(request);
@@ -132,8 +141,10 @@ public void testNormalSetBucketLifecycle() throws ParseException {
132141
Assert.assertEquals(DateUtil.formatIso8601Date(r3.getAbortMultipartUpload().getCreatedBeforeDate()),
133142
"2022-10-12T00:00:00.000Z");
134143
Assert.assertTrue(r3.hasStorageTransition());
135-
Assert.assertTrue(r3.getStorageTransition().getExpirationDays() == 20);
136-
Assert.assertEquals(r3.getStorageTransition().getStorageClass(), StorageClass.IA);
144+
Assert.assertTrue(r3.getStorageTransition().get(0).getExpirationDays() == 10);
145+
Assert.assertEquals(r3.getStorageTransition().get(0).getStorageClass(), StorageClass.IA);
146+
Assert.assertTrue(r3.getStorageTransition().get(1).getExpirationDays() == 20);
147+
Assert.assertEquals(r3.getStorageTransition().get(1).getStorageClass(), StorageClass.Archive);
137148

138149
LifecycleRule r4 = rules.get(4);
139150
Assert.assertEquals(r4.getId(), ruleId4);
@@ -151,9 +162,9 @@ public void testNormalSetBucketLifecycle() throws ParseException {
151162
Assert.assertFalse(r5.hasExpirationDays());
152163
Assert.assertFalse(r5.hasAbortMultipartUpload());
153164
Assert.assertTrue(r5.hasStorageTransition());
154-
Assert.assertEquals(DateUtil.formatIso8601Date(r5.getStorageTransition().getCreatedBeforeDate()),
165+
Assert.assertEquals(DateUtil.formatIso8601Date(r5.getStorageTransition().get(0).getCreatedBeforeDate()),
155166
"2022-10-12T00:00:00.000Z");
156-
Assert.assertEquals(r5.getStorageTransition().getStorageClass(), StorageClass.Archive);
167+
Assert.assertEquals(r5.getStorageTransition().get(0).getStorageClass(), StorageClass.Archive);
157168

158169
// Override existing lifecycle rules
159170
final String nullRuleId = null;
@@ -316,7 +327,9 @@ public void testUnormalSetBucketLifecycle() throws ParseException {
316327
LifecycleRule.StorageTransition storageTransition = new StorageTransition();
317328
storageTransition.setExpirationDays(3);
318329
storageTransition.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
319-
invalidRule.setStorageTransition(storageTransition);
330+
List<StorageTransition> storageTransitions = new ArrayList<StorageTransition>();
331+
storageTransitions.add(storageTransition);
332+
invalidRule.setStorageTransition(storageTransitions);
320333
request.AddLifecycleRule(invalidRule);
321334

322335
Assert.fail("Set bucket lifecycle should not be successful");

0 commit comments

Comments
 (0)