Updated on 2024-06-18 GMT+08:00

Obtaining Lifecycle Rules (SDK for Java)

Function

You can configure lifecycle rules to periodically delete objects or transition objects between storage classes. For more information, see Lifecycle Management.

This API returns the lifecycle rules of a bucket.

Restrictions

Method

obsClient.getBucketLifecycle(final BaseBucketRequest request)

Request Parameters

Table 1 List of request parameters

Parameter

Type

Mandatory (Yes/No)

Description

request

BaseBucketRequest

Yes

Explanation:

Request parameters related to basic bucket information. For details, see Table 2.

Table 2 BaseBucketRequest

Parameter

Type

Mandatory (Yes/No)

Description

bucketName

String

Yes

Explanation:

Bucket name.

Restrictions:

  • A bucket name must be unique across all accounts and regions.
  • A bucket name:
    • Must be 3 to 63 characters long and start with a digit or letter. Lowercase letters, digits, hyphens (-), and periods (.) are allowed.
    • Cannot be formatted as an IP address.
    • Cannot start or end with a hyphen (-) or period (.).
    • Cannot contain two consecutive periods (..), for example, my..bucket.
    • Cannot contain periods (.) and hyphens (-) adjacent to each other, for example, my-.bucket or my.-bucket.
  • If you repeatedly create buckets of the same name in the same region, no error will be reported and the bucket attributes comply with those set in the first creation request.

Default value:

None

Responses

Table 3 LifecycleConfiguration

Parameter

Type

Description

rules

List<Rule>

Explanation:

List of lifecycle rules. For details, see Table 4.

statusCode

int

Explanation:

HTTP status code.

Value range:

A status code is a group of digits that can be 2xx (indicating successes) or 4xx or 5xx (indicating errors). It indicates the status of a response. For more information, see Status Code.

Default value:

None

responseHeaders

Map<String, Object>

Explanation:

Response header list, composed of tuples. In a tuple, the String key indicates the name of the header, and the Object value indicates the value of the header.

Default value:

None

Table 4 Rule

Parameter

Type

Mandatory (Yes/No)

Description

id

String

No

Explanation:

Lifecycle rule ID.

Value range:

The value must contain 1 to 255 characters.

Default value:

None

prefix

String

Yes

Explanation:

Object name prefix. It identifies the objects the rule applies to. You can leave this parameter blank to apply the rule to all objects in the bucket.

Assume that you have the following objects: logs/day1, logs/day2, logs/day3, and ExampleObject.jpg. If you set prefix to ExampleObject.jpg, the rule applies to object ExampleObject.jpg only. If you set prefix to logs/, the rule applies to the three objects with name starting with logs/. If you leave prefix blank, the rule applies to all objects in the bucket.

Value range:

The value must contain 1 to 1,024 characters.

Default value:

None

enabled

boolean

Yes

Explanation:

Whether the rule is enabled.

Value range:

true: The rule is enabled.

false: The rule is disabled.

Default value:

None

expiration

Expiration

No

Explanation:

Expiration time of an object. For details, see Table 5.

Default value:

None

noncurrentVersionExpiration

NoncurrentVersionExpiration

No

Explanation:

Expiration time of noncurrent object versions. For details, see Table 6.

Restrictions:

  • This parameter is only available for noncurrent object versions.
  • Versioning must be enabled (or suspended after being enabled) for the bucket.

Default value:

None

transitions

List<Transition>

No

Explanation:

Policies for storage class transition, including transition time and the storage class after transition. For details, see Table 7.

Restrictions:

This parameter is only available for the current object version.

Default value:

None

noncurrentVersionTransitions

List<NoncurrentVersionTransition>

No

Explanation:

Policies for storage class transition of noncurrent versions, including transition time and the storage class after transition. For details, see Table 9.

Restrictions:

  • This parameter is only available for noncurrent object versions.
  • Versioning must be enabled (or suspended after being enabled) for the bucket.

Default value:

None

Table 5 Expiration

Parameter

Type

Mandatory (Yes/No)

Description

days

Integer

This parameter is mandatory if date is not configured.

Explanation:

Number of days (since the last update was made to the object) after which the lifecycle rule takes effect (the object will be deleted).

Restrictions:

This parameter is only available for the current object version.

Value range:

A positive integer, in days.

Default value:

None

date

Date

This parameter is mandatory if days is not configured.

Explanation:

OBS deletes objects that were modified before the specified date.

Default value:

None

Table 6 NoncurrentVersionExpiration

Parameter

Type

Mandatory (Yes/No)

Description

days

Integer

Yes

Explanation:

Number of days an object is noncurrent before it expires.

Restrictions:

This parameter is only available for noncurrent object versions.

Value range:

A positive integer, in days.

Default value:

None

Table 7 Transition

Parameter

Type

Mandatory (Yes/No)

Description

days

Integer

This parameter is mandatory if date is not configured.

Explanation:

Number of days after its creation when the object is transitioned.

Restrictions:

This parameter is only available for the current object version.

Value range:

A positive integer, in days.

Default value:

None

date

Date

This parameter is mandatory if days is not configured.

Explanation:

Date when the object will be transitioned.

Default value:

None

storageClass

StorageClassEnum

Yes

Explanation:

Storage class the object is transitioned to.

Restrictions:

Restrictions on storage class transitions:
  • Only transitions from the Standard storage class to the Infrequent Access storage class are supported. To transition objects from Infrequent Access to Standard, you must manually do it.
  • Only transitions from the Standard or Infrequent Access storage class to the Archive storage class are supported. To transition objects from Archive to Standard or Infrequent Access, you must restore the archived objects first and then manually transition their storage classes.
  • Multi-AZ redundancy does not support Archive storage. For this reason, buckets or objects with multi-AZ redundancy cannot be transitioned to the Archive storage class based on a lifecycle rule.

Value range:

See Table 8.

Default value:

None

Table 8 StorageClassEnum

Constant

Default Value

Description

STANDARD

STANDARD

Standard storage class

WARM

WARM

Infrequent Access storage class.

COLD

COLD

Archive storage class.

Table 9 NoncurrentVersionTransition

Parameter

Type

Mandatory (Yes/No)

Description

days

Integer

This parameter is mandatory if date is not configured.

Explanation:

Number of days after its creation when the object is transitioned.

Restrictions:

This parameter is only available for noncurrent object versions.

Value range:

A positive integer, in days.

Default value:

None

storageClass

StorageClassEnum

Yes

Explanation:

Storage class the object is transitioned to.

Restrictions:

Restrictions on storage class transitions:
  • Only transitions from the Standard storage class to the Infrequent Access storage class are supported. To transition objects from Infrequent Access to Standard, you must manually do it.
  • Only transitions from the Standard or Infrequent Access storage class to the Archive storage class are supported. To transition objects from Archive to Standard or Infrequent Access, you must restore the archived objects first and then manually transition their storage classes.
  • Multi-AZ redundancy does not support Archive storage. For this reason, buckets or objects with multi-AZ redundancy cannot be transitioned to the Archive storage class based on a lifecycle rule.

Value range:

See Table 8.

Default value:

None

Code Examples

This example returns the lifecycle configuration of bucket examplebucket.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.LifecycleConfiguration;
public class GetBucketLifecycle001 {
    public static void main(String[] args) {
        // Obtain an AK/SK pair using environment variables or import the AK/SK pair in other ways. Using hard coding may result in leakage.
        // Obtain an AK/SK pair on the management console.
        String ak = System.getenv("ACCESS_KEY_ID");
        String sk = System.getenv("SECRET_ACCESS_KEY_ID");
        // (Optional) If you are using a temporary AK/SK pair and a security token to access OBS, you are advised not to use hard coding, which may result in information leakage.
        // Obtain an AK/SK pair and a security token using environment variables or import them in other ways.
        // String securityToken = System.getenv("SECURITY_TOKEN");
        // Enter the endpoint corresponding to the bucket. EU-Dublin is used here as an example. Replace it with the one in your actual situation.
        String endPoint = "https://obs.eu-west-101.myhuaweicloud.eu"; 
        // Obtain an endpoint using environment variables or import it in other ways.
        //String endPoint = System.getenv("ENDPOINT");
        
        // Create an ObsClient instance.
        // Use the permanent AK/SK pair to initialize the client.
        ObsClient obsClient = new ObsClient(ak, sk,endPoint);
        // Use the temporary AK/SK pair and security token to initialize the client.
        // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint);

        try {
            // View the lifecycle rules
            LifecycleConfiguration config = obsClient.getBucketLifecycle("examplebucket");
            System.out.println("getBucketLifecycle successfully");
            for (LifecycleConfiguration.Rule rule : config.getRules()) {
                System.out.println(rule.getId());
                System.out.println(rule.getPrefix());
                for (LifecycleConfiguration.Transition transition : rule.getTransitions()) {
                    System.out.println(transition.getDays());
                    System.out.println(transition.getStorageClass());
                }
                System.out.println(rule.getExpiration() != null ? rule.getExpiration().getDays() : "");
                for (LifecycleConfiguration.NoncurrentVersionTransition noncurrentVersionTransition :
                        rule.getNoncurrentVersionTransitions()) {
                    System.out.println(noncurrentVersionTransition.getDays());
                    System.out.println(noncurrentVersionTransition.getStorageClass());
                }
                System.out.println(
                        rule.getNoncurrentVersionExpiration() != null
                                ? rule.getNoncurrentVersionExpiration().getDays()
                                : "");
            }
        } catch (ObsException e) {
            System.out.println("getBucketLifecycle failed");
            // Request failed. Print the HTTP status code.
            System.out.println("HTTP Code:" + e.getResponseCode());
            // Request failed. Print the server-side error code.
            System.out.println("Error Code:" + e.getErrorCode());
            // Request failed. Print the error details.
            System.out.println("Error Message:" + e.getErrorMessage());
            // Request failed. Print the request ID.
            System.out.println("Request ID:" + e.getErrorRequestId());
            System.out.println("Host ID:" + e.getErrorHostId());
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("getBucketLifecycle failed");
            // Print other error information.
            e.printStackTrace();
        }
    }
}