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/opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new a64e9a5ed0 ci: Add test case for hdfs over gcs bucket (#4145)
a64e9a5ed0 is described below

commit a64e9a5ed00303946b7f484b22a79dd01271a16c
Author: Armando Zhu <[email protected]>
AuthorDate: Wed Feb 7 00:34:36 2024 -0800

    ci: Add test case for hdfs over gcs bucket (#4145)
    
    * ci: Add test case for hdfs over gcs bucket (#3504)
    
    * Update xml headers
    
    * Modify CLASSPATH
---
 .github/services/hdfs/hdfs_default_gcs/action.yml | 62 +++++++++++++++++++++++
 core/src/services/hdfs/docs.md                    |  1 +
 fixtures/hdfs/gcs-core-site.xml                   | 56 ++++++++++++++++++++
 3 files changed, 119 insertions(+)

diff --git a/.github/services/hdfs/hdfs_default_gcs/action.yml 
b/.github/services/hdfs/hdfs_default_gcs/action.yml
new file mode 100644
index 0000000000..69aabeba75
--- /dev/null
+++ b/.github/services/hdfs/hdfs_default_gcs/action.yml
@@ -0,0 +1,62 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+
+name: hdfs_default_gcs
+description: 'Behavior test for hdfs default over gcs'
+
+runs:
+  using: "composite"
+  steps:
+    - name: Setup java env
+      uses: actions/setup-java@v4
+      with:
+        distribution: temurin
+        java-version: "11"
+    - name: Load secrets
+      uses: 1password/load-secrets-action@v1
+      with:
+        export-env: true
+      env:
+        OPENDAL_GCS_ROOT: op://services/gcs/root
+        OPENDAL_GCS_BUCKET: op://services/gcs/bucket
+        OPENDAL_GCS_CREDENTIAL: op://services/gcs/credential
+    - name: Setup
+      shell: bash
+      run: |
+        curl -LsSf 
https://dlcdn.apache.org/hadoop/common/hadoop-3.3.5/hadoop-3.3.5.tar.gz | tar 
zxf - -C /home/runner
+
+        export HADOOP_HOME="/home/runner/hadoop-3.3.5"
+
+        curl -LsSf -o 
${HADOOP_HOME}/share/hadoop/common/lib/gcs-connector-hadoop3-2.2.19-shaded.jar 
https://github.com/GoogleCloudDataproc/hadoop-connectors/releases/download/v2.2.19/gcs-connector-hadoop3-2.2.19-shaded.jar
+
+        export CLASSPATH=$(${HADOOP_HOME}/bin/hadoop classpath --glob)
+
+        cp ./fixtures/hdfs/hdfs-site.xml 
${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
+        cp ./fixtures/hdfs/gcs-core-site.xml 
${HADOOP_HOME}/etc/hadoop/core-site.xml
+
+        cat << EOF >> $GITHUB_ENV
+        HADOOP_HOME=${HADOOP_HOME}
+        CLASSPATH=${CLASSPATH}
+        LD_LIBRARY_PATH=${JAVA_HOME}/lib/server:${HADOOP_HOME}/lib/native
+        OPENDAL_HDFS_ROOT=${OPENDAL_GCS_ROOT}
+        OPENDAL_HDFS_NAME_NODE=gs://${OPENDAL_GCS_BUCKET}
+        OPENDAL_HDFS_ENABLE_APPEND=false
+        EOF
+
+        mkdir -p /tmp/hdfs
+
+        echo ${OPENDAL_GCS_CREDENTIAL} | base64 -d > 
/tmp/hdfs/gcs-credentials.json
diff --git a/core/src/services/hdfs/docs.md b/core/src/services/hdfs/docs.md
index c9289159f5..7e4d882112 100644
--- a/core/src/services/hdfs/docs.md
+++ b/core/src/services/hdfs/docs.md
@@ -121,6 +121,7 @@ async fn main() -> Result<()> {
     // Create fs backend builder.
     let mut builder = Hdfs::default();
     // Set the name node for hdfs.
+    // If the string starts with a protocol type such as file://, hdfs://, or 
gs://, this protocol type will be used.
     builder.name_node("hdfs://127.0.0.1:9000");
     // Set the root for hdfs, all operations will happen under this root.
     //
diff --git a/fixtures/hdfs/gcs-core-site.xml b/fixtures/hdfs/gcs-core-site.xml
new file mode 100644
index 0000000000..e8d7418a29
--- /dev/null
+++ b/fixtures/hdfs/gcs-core-site.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+
+-->
+
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+<property>
+  <name>fs.AbstractFileSystem.gs.impl</name>
+  <value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS</value>
+  <description>The AbstractFileSystem for 'gs:' URIs.</description>
+</property>
+<property>
+  <name>fs.gs.project.id</name>
+  <value></value>
+  <description>
+    Optional. Google Cloud Project ID with access to GCS buckets.
+    Required only for list buckets and create bucket operations.
+  </description>
+</property>
+<property>
+  <name>google.cloud.auth.type</name>
+  <value>SERVICE_ACCOUNT_JSON_KEYFILE</value>
+  <description>
+    Authentication type to use for GCS access.
+  </description>
+</property>
+<property>
+  <name>google.cloud.auth.service.account.json.keyfile</name>
+  <value>/tmp/hdfs/gcs-credentials.json</value>
+  <description>
+    The JSON keyfile of the service account used for GCS
+    access when google.cloud.auth.type is SERVICE_ACCOUNT_JSON_KEYFILE.
+  </description>
+</property>
+</configuration>

Reply via email to