This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new bff9cd54c ci: Add integration tests for Cloudflare R2 (#2423)
bff9cd54c is described below

commit bff9cd54c5a724af3b83beca427b52773ce8b6bb
Author: Xuanwo <[email protected]>
AuthorDate: Tue Jun 6 13:54:58 2023 +0800

    ci: Add integration tests for Cloudflare R2 (#2423)
    
    * ci: Add integration tests for Cloudflare R2
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Set env
    
    Signed-off-by: Xuanwo <[email protected]>
    
    ---------
    
    Signed-off-by: Xuanwo <[email protected]>
---
 .github/workflows/service_test_s3.yml       | 33 +++++++++++++++++++++++++++++
 core/src/services/s3/backend.rs             |  6 +++++-
 core/src/services/s3/compatible_services.md | 14 ++++++++++++
 3 files changed, 52 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/service_test_s3.yml 
b/.github/workflows/service_test_s3.yml
index 88266f81c..648ac0657 100644
--- a/.github/workflows/service_test_s3.yml
+++ b/.github/workflows/service_test_s3.yml
@@ -178,3 +178,36 @@ jobs:
           OPENDAL_S3_BUCKET: test
           OPENDAL_S3_ENDPOINT: "http://127.0.0.1:9000";
           OPENDAL_S3_ALLOW_ANONYMOUS: on
+
+  r2:
+    runs-on: ubuntu-latest
+    if: github.event_name == 'push' || 
!github.event.pull_request.head.repo.fork
+    steps:
+      - uses: actions/checkout@v3
+      - name: Setup Rust toolchain
+        uses: ./.github/actions/setup
+        with:
+          need-nextest: true
+
+      - name: Load secret
+        id: op-load-secret
+        uses: 1password/load-secrets-action@v1
+        with:
+          export-env: true
+        env:
+          OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
+          OPENDAL_S3_TEST: op://services/r2/test
+          OPENDAL_S3_BUCKET: op://services/r2/bucket
+          OPENDAL_S3_ENDPOINT: op://services/r2/endpoint
+          OPENDAL_S3_ACCESS_KEY_ID: op://services/r2/access_key_id
+          OPENDAL_S3_SECRET_ACCESS_KEY: op://services/r2/secret_access_key
+
+      - name: Test
+        shell: bash
+        working-directory: core
+        run: cargo nextest run s3
+        env:
+          OPENDAL_S3_REGION: auto
+          # This is the R2's limitation
+          # Refer to 
https://opendal.apache.org/docs/services/s3#compatible-services for more 
information
+          OPENDAL_S3_BATCH_MAX_OPERATIONS: 700
diff --git a/core/src/services/s3/backend.rs b/core/src/services/s3/backend.rs
index be720a8f9..056db3e59 100644
--- a/core/src/services/s3/backend.rs
+++ b/core/src/services/s3/backend.rs
@@ -560,7 +560,11 @@ impl Builder for S3Builder {
             .filter(|v| *v == "on" || *v == "true")
             .map(|_| builder.allow_anonymous());
         map.get("default_storage_class")
-            .map(|v| builder.default_storage_class(v));
+            .map(|v: &String| builder.default_storage_class(v));
+        map.get("write_min_size")
+            .map(|v| builder.write_min_size(v.parse().expect("input must be a 
number")));
+        map.get("batch_max_operations")
+            .map(|v| builder.batch_max_operations(v.parse().expect("input must 
be a number")));
 
         builder
     }
diff --git a/core/src/services/s3/compatible_services.md 
b/core/src/services/s3/compatible_services.md
index 432ce7c89..d5036cb3d 100644
--- a/core/src/services/s3/compatible_services.md
+++ b/core/src/services/s3/compatible_services.md
@@ -97,3 +97,17 @@ To connect to wasabi, we need to set:
 - `bucket`: The bucket name of wasabi.
 
 > Refer to [What are the service URLs for Wasabi's different storage 
 > regions?](https://wasabi-support.zendesk.com/hc/en-us/articles/360015106031) 
 > for more details.
+
+### Cloudflare R2
+
+[Cloudflare R2](https://developers.cloudflare.com/r2/) provides s3 compatible 
API.
+
+> Cloudflare R2 Storage allows developers to store large amounts of 
unstructured data without the costly egress bandwidth fees associated with 
typical cloud storage services.
+
+
+To connect to r2, we need to set:
+
+- `endpoint`: The endpoint of r2, for example: 
`https://<account_id>.r2.cloudflarestorage.com`
+- `bucket`: The bucket name of r2.
+- `region`: When you create a new bucket, the data location is set to 
Automatic by default. So please use `auto` for region.
+- `batch_max_operations`: R2's delete objects will return `Internal Error` if 
the batch is larger than `700`. Please set this value `<= 700` to make sure 
batch delete work as expected.

Reply via email to