>From Ritik Raj <[email protected]>:

Ritik Raj has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21291?usp=email )


Change subject: [ASTERIXDB-3768][CLOUD] Set explicit CRC32C checksum on S3 
DeleteObjects
......................................................................

[ASTERIXDB-3768][CLOUD] Set explicit CRC32C checksum on S3 DeleteObjects

- user model changes: no
- storage format changes: no
- interface changes: no

When the S3 checksum behavior resolves to when_required, the SDK no
longer adds an automatic integrity header (neither a flexible checksum
nor the legacy Content-MD5) to DeleteObjects, which S3-compatible stores
such as OCI Object Storage reject. Request an explicit CRC32C checksum
on DeleteObjects in that case.

Ext-ref: MB-72035
Change-Id: I49f6c6f1c44243f7e69f1ec55d5534a14019dcdf
---
M 
asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/clients/aws/s3/S3CloudClient.java
1 file changed, 11 insertions(+), 2 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/91/21291/1

diff --git 
a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/clients/aws/s3/S3CloudClient.java
 
b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/clients/aws/s3/S3CloudClient.java
index e22579d..edd43d4 100644
--- 
a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/clients/aws/s3/S3CloudClient.java
+++ 
b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/clients/aws/s3/S3CloudClient.java
@@ -57,6 +57,7 @@
 import org.apache.hyracks.api.io.FileReference;
 import org.apache.hyracks.api.util.IoUtil;
 import org.apache.hyracks.cloud.io.ICloudProperties;
+import org.apache.hyracks.cloud.io.S3ChecksumBehavior;
 import org.apache.hyracks.control.nc.io.IOManager;
 import org.apache.hyracks.util.annotations.ThreadSafe;
 import org.apache.logging.log4j.LogManager;
@@ -76,6 +77,7 @@
 import software.amazon.awssdk.regions.Region;
 import software.amazon.awssdk.services.s3.S3Client;
 import software.amazon.awssdk.services.s3.S3ClientBuilder;
+import software.amazon.awssdk.services.s3.model.ChecksumAlgorithm;
 import software.amazon.awssdk.services.s3.model.CopyObjectRequest;
 import software.amazon.awssdk.services.s3.model.Delete;
 import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
@@ -280,8 +282,15 @@
             }

             Delete delete = 
Delete.builder().objects(objectIdentifiers).build();
-            DeleteObjectsRequest deleteReq = 
DeleteObjectsRequest.builder().bucket(bucket).delete(delete).build();
-            DeleteObjectsResponse deleteObjectsResponse = 
s3Client.deleteObjects(deleteReq);
+            DeleteObjectsRequest.Builder deleteReqBuilder =
+                    
DeleteObjectsRequest.builder().bucket(bucket).delete(delete);
+            if (config.getChecksumBehavior() == 
S3ChecksumBehavior.WHEN_REQUIRED) {
+                // DeleteObjects needs a request-body integrity header; 
when_required suppresses the SDK's flexible
+                // checksum and it no longer adds Content-MD5, so request an 
explicit checksum for S3-compatible stores
+                // 
https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html
+                deleteReqBuilder.checksumAlgorithm(ChecksumAlgorithm.CRC32_C);
+            }
+            DeleteObjectsResponse deleteObjectsResponse = 
s3Client.deleteObjects(deleteReqBuilder.build());
             if (deleteObjectsResponse.hasErrors()) {
                 List<S3Error> deleteErrors = deleteObjectsResponse.errors();
                 for (S3Error s3Error : deleteErrors) {

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21291?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: lumina
Gerrit-Change-Id: I49f6c6f1c44243f7e69f1ec55d5534a14019dcdf
Gerrit-Change-Number: 21291
Gerrit-PatchSet: 1
Gerrit-Owner: Ritik Raj <[email protected]>

Reply via email to