-
Notifications
You must be signed in to change notification settings - Fork 68
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
docs: add samples for object retention #2417
Changes from 11 commits
1968094
14933cd
a80829c
a42e53f
51356ae
eef8faf
2e1862e
3041434
30d224b
a7f5997
f1eb2af
56855be
f738e39
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
/* | ||
* Copyright 2024 Google LLC | ||
* | ||
* 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.example.storage.bucket; | ||
|
||
// [START storage_create_bucket_with_object_retention] | ||
|
||
import com.google.cloud.storage.Bucket; | ||
import com.google.cloud.storage.BucketInfo; | ||
import com.google.cloud.storage.Storage; | ||
import com.google.cloud.storage.StorageOptions; | ||
|
||
public class CreateBucketWithObjectRetention { | ||
public static void createBucketWithObjectRetention(String projectId, String bucketName) { | ||
// The ID of your GCP project | ||
// String projectId = "your-project-id"; | ||
|
||
// The ID to give your GCS bucket | ||
// String bucketName = "your-unique-bucket-name"; | ||
|
||
Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService(); | ||
|
||
Bucket bucket = | ||
storage.create( | ||
BucketInfo.of(bucketName), Storage.BucketTargetOption.enableObjectRetention(true)); | ||
|
||
System.out.println( | ||
"Created bucket " | ||
+ bucket.getName() | ||
+ " with object retention enabled setting: " | ||
+ bucket.getObjectRetention().getMode().toString()); | ||
} | ||
} | ||
|
||
// [END storage_create_bucket_with_object_retention] |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -68,6 +68,7 @@ public static void getObjectMetadata(String projectId, String bucketName, String | |
System.out.println("StorageClass: " + blob.getStorageClass()); | ||
System.out.println("TimeCreated: " + new Date(blob.getCreateTime())); | ||
System.out.println("Last Metadata Update: " + new Date(blob.getUpdateTime())); | ||
System.out.println("Object Retention Policy: " + blob.getRetention()); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. GetBucketMetadata and this sample are missing test changes; please add them. |
||
Boolean temporaryHoldIsEnabled = (blob.getTemporaryHold() != null && blob.getTemporaryHold()); | ||
System.out.println("temporaryHold: " + (temporaryHoldIsEnabled ? "enabled" : "disabled")); | ||
Boolean eventBasedHoldIsEnabled = | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/* | ||
* Copyright 2022 Google LLC | ||
* | ||
* 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.example.storage.object; | ||
|
||
// [START storage_set_object_retention_policy] | ||
|
||
import static java.time.OffsetDateTime.now; | ||
|
||
import com.google.cloud.storage.Blob; | ||
import com.google.cloud.storage.BlobId; | ||
import com.google.cloud.storage.BlobInfo.Retention; | ||
import com.google.cloud.storage.Storage; | ||
import com.google.cloud.storage.StorageException; | ||
import com.google.cloud.storage.StorageOptions; | ||
|
||
public class SetObjectRetentionPolicy { | ||
public static void setObjectRetentionPolicy( | ||
String projectId, String bucketName, String objectName) throws StorageException { | ||
// The ID of your GCP project | ||
// String projectId = "your-project-id"; | ||
|
||
// The ID of your GCS bucket that has object retention enabled | ||
// String bucketName = "your-unique-bucket-name"; | ||
|
||
// The ID of your GCS object | ||
// String objectName = "your-object-name"; | ||
|
||
Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService(); | ||
BlobId blobId = BlobId.of(bucketName, objectName); | ||
Blob blob = storage.get(blobId); | ||
if (blob == null) { | ||
System.out.println("The object " + objectName + " was not found in " + bucketName); | ||
return; | ||
} | ||
|
||
Blob updated = | ||
blob.toBuilder() | ||
.setRetention( | ||
Retention.newBuilder() | ||
.setMode(Retention.Mode.UNLOCKED) | ||
.setRetainUntilTime(now().plusDays(10)) | ||
.build()) | ||
.build() | ||
.update(); | ||
|
||
System.out.println("Retention policy for object " + objectName + " was set to:"); | ||
System.out.println(updated.getRetention().toString()); | ||
|
||
// To modify an existing policy on an Unlocked object, pass in the override parameter | ||
blob.toBuilder() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This looks like two samples in one; were you planning on splitting it or keeping as-is? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Planning to keep as is. I think it's important that a user sees both cases, so keeping them in one sample makes sure that it can't be missed. |
||
.setRetention( | ||
updated.getRetention().toBuilder().setRetainUntilTime(now().plusDays(9)).build()) | ||
.build() | ||
.update(Storage.BlobTargetOption.overrideUnlockedRetention(true)); | ||
|
||
System.out.println("Retention policy for object " + objectName + " was updated to:"); | ||
System.out.println(storage.get(blobId).getRetention().toString()); | ||
} | ||
} | ||
|
||
// [END storage_set_object_retention_policy] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this sample required in docs? Wondering if users could be pointed to `BucketTargetOption.enableObjectRetention(true) instead of writing this sample in 8 languages.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's meant to go here: https://cloud.google.com/storage/docs/using-object-lock#enable-retentions
We want to have a sample for every use case on this page
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sg, thanks for clarifying.