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

roryqi pushed a commit to branch branch-1.1
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/branch-1.1 by this push:
     new d1fe6f3ad1 [#9500] fix(core): Fix the credential for the fileset with 
multiple locations (#9519)
d1fe6f3ad1 is described below

commit d1fe6f3ad12e39b7f9eb7ebad6e275626eda3480
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Dec 22 20:51:22 2025 +0800

    [#9500] fix(core): Fix the credential for the fileset with multiple 
locations (#9519)
    
    ### What changes were proposed in this pull request?
    
    Fix the credential for the fileset with multiple locations
    
    ### Why are the changes needed?
    
    Fix: #9500
    
    ### Does this PR introduce _any_ user-facing change?
    
    No need.
    
    ### How was this patch tested?
    
    Existed tests.
    
    Co-authored-by: roryqi <[email protected]>
---
 .../filesystem/hadoop/BaseGVFSOperations.java      | 10 +--------
 ...aultGravitinoFileSystemCredentialsProvider.java | 26 ++++++++++++++++++++++
 .../hadoop/GravitinoVirtualFileSystemUtils.java    |  9 ++++++++
 .../GravitinoVirtualFileSystemS3CredentialIT.java  |  5 +++--
 4 files changed, 39 insertions(+), 11 deletions(-)

diff --git 
a/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/BaseGVFSOperations.java
 
b/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/BaseGVFSOperations.java
index bead984912..95ac0201a6 100644
--- 
a/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/BaseGVFSOperations.java
+++ 
b/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/BaseGVFSOperations.java
@@ -71,7 +71,6 @@ import 
org.apache.gravitino.catalog.hadoop.fs.GravitinoFileSystemCredentialsProv
 import org.apache.gravitino.catalog.hadoop.fs.SupportsCredentialVending;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.credential.Credential;
-import org.apache.gravitino.credential.CredentialConstants;
 import org.apache.gravitino.exceptions.CatalogNotInUseException;
 import org.apache.gravitino.exceptions.GravitinoRuntimeException;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -788,13 +787,6 @@ public abstract class BaseGVFSOperations implements 
Closeable {
     CallerContext.CallerContextHolder.set(callerContext);
   }
 
-  private void setCallerContextForGetCredentials(String locationName) {
-    Map<String, String> contextMap = Maps.newHashMap();
-    contextMap.put(CredentialConstants.HTTP_HEADER_CURRENT_LOCATION_NAME, 
locationName);
-    CallerContext callerContext = 
CallerContext.builder().withContext(contextMap).build();
-    CallerContext.CallerContextHolder.set(callerContext);
-  }
-
   /**
    * Get user defined configurations for a specific location. Configuration 
format:
    *
@@ -989,7 +981,7 @@ public abstract class BaseGVFSOperations implements 
Closeable {
     ImmutableMap.Builder<String, String> mapBuilder = ImmutableMap.builder();
     try {
       Fileset fileset = getFileset(filesetIdentifier);
-      setCallerContextForGetCredentials(locationName);
+      
GravitinoVirtualFileSystemUtils.setCallerContextForGetCredentials(locationName);
       Credential[] credentials = 
fileset.supportsCredentials().getCredentials();
       if (credentials.length > 0) {
         mapBuilder.put(
diff --git 
a/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/DefaultGravitinoFileSystemCredentialsProvider.java
 
b/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/DefaultGravitinoFileSystemCredentialsProvider.java
index 2f3278f874..87835902ea 100644
--- 
a/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/DefaultGravitinoFileSystemCredentialsProvider.java
+++ 
b/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/DefaultGravitinoFileSystemCredentialsProvider.java
@@ -19,7 +19,12 @@
 
 package org.apache.gravitino.filesystem.hadoop;
 
+import static org.apache.gravitino.file.Fileset.PROPERTY_DEFAULT_LOCATION_NAME;
+import static 
org.apache.gravitino.filesystem.hadoop.GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CURRENT_LOCATION_NAME;
+
+import java.util.Optional;
 import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.audit.CallerContext;
 import 
org.apache.gravitino.catalog.hadoop.fs.GravitinoFileSystemCredentialsProvider;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.credential.Credential;
@@ -51,10 +56,31 @@ public class DefaultGravitinoFileSystemCredentialsProvider
     // The format of name identifier is `metalake.catalog.schema.fileset`
     String nameIdentifier = configuration.get(GVFS_NAME_IDENTIFIER);
     String[] idents = nameIdentifier.split("\\.");
+
     try (GravitinoClient client = 
GravitinoVirtualFileSystemUtils.createClient(configuration)) {
       FilesetCatalog filesetCatalog = 
client.loadCatalog(idents[1]).asFilesetCatalog();
       Fileset fileset = 
filesetCatalog.loadFileset(NameIdentifier.of(idents[2], idents[3]));
+
+      String targetLocationName = getTargetLocation(fileset);
+      
GravitinoVirtualFileSystemUtils.setCallerContextForGetCredentials(targetLocationName);
+
       return fileset.supportsCredentials().getCredentials();
+    } finally {
+      CallerContext.CallerContextHolder.remove();
     }
   }
+
+  private String getTargetLocation(Fileset fileset) {
+    String currentLocationEnvVar =
+        configuration.get(
+            
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CURRENT_LOCATION_NAME_ENV_VAR,
+            GravitinoVirtualFileSystemConfiguration
+                .FS_GRAVITINO_CURRENT_LOCATION_NAME_ENV_VAR_DEFAULT);
+    String locationName =
+        
Optional.ofNullable(configuration.get(FS_GRAVITINO_CURRENT_LOCATION_NAME))
+            .orElse(System.getenv(currentLocationEnvVar));
+    return locationName == null
+        ? fileset.properties().get(PROPERTY_DEFAULT_LOCATION_NAME)
+        : locationName;
+  }
 }
diff --git 
a/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/GravitinoVirtualFileSystemUtils.java
 
b/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/GravitinoVirtualFileSystemUtils.java
index 430d2b798c..c532757081 100644
--- 
a/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/GravitinoVirtualFileSystemUtils.java
+++ 
b/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/GravitinoVirtualFileSystemUtils.java
@@ -36,9 +36,11 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.audit.CallerContext;
 import org.apache.gravitino.client.DefaultOAuth2TokenProvider;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.client.KerberosTokenProvider;
+import org.apache.gravitino.credential.CredentialConstants;
 import org.apache.hadoop.conf.Configuration;
 
 /** Utility class for Gravitino Virtual File System. */
@@ -324,6 +326,13 @@ public class GravitinoVirtualFileSystemUtils {
     return gvfsPath.substring(prefix.length());
   }
 
+  static void setCallerContextForGetCredentials(String locationName) {
+    Map<String, String> contextMap = Maps.newHashMap();
+    contextMap.put(CredentialConstants.HTTP_HEADER_CURRENT_LOCATION_NAME, 
locationName);
+    CallerContext callerContext = 
CallerContext.builder().withContext(contextMap).build();
+    CallerContext.CallerContextHolder.set(callerContext);
+  }
+
   private static void checkAuthConfig(String authType, String configKey, 
String configValue) {
     Preconditions.checkArgument(
         StringUtils.isNotBlank(configValue),
diff --git 
a/clients/filesystem-hadoop3/src/test/java/org/apache/gravitino/filesystem/hadoop/integration/test/GravitinoVirtualFileSystemS3CredentialIT.java
 
b/clients/filesystem-hadoop3/src/test/java/org/apache/gravitino/filesystem/hadoop/integration/test/GravitinoVirtualFileSystemS3CredentialIT.java
index 32d61323f6..e02eaa9d67 100644
--- 
a/clients/filesystem-hadoop3/src/test/java/org/apache/gravitino/filesystem/hadoop/integration/test/GravitinoVirtualFileSystemS3CredentialIT.java
+++ 
b/clients/filesystem-hadoop3/src/test/java/org/apache/gravitino/filesystem/hadoop/integration/test/GravitinoVirtualFileSystemS3CredentialIT.java
@@ -107,10 +107,9 @@ public class GravitinoVirtualFileSystemS3CredentialIT 
extends GravitinoVirtualFi
     conf.set("fs.gvfs.impl.disable.cache", "true");
     conf.set("fs.gravitino.server.uri", serverUri);
     conf.set("fs.gravitino.client.metalake", metalakeName);
+    conf.set("fs.gravitino.enableCredentialVending", "true");
 
     // Pass this configuration to the real file system
-    conf.set(S3Properties.GRAVITINO_S3_SECRET_ACCESS_KEY, S3_SECRET_KEY);
-    conf.set(S3Properties.GRAVITINO_S3_ACCESS_KEY_ID, S3_ACCESS_KEY);
     conf.set(S3Properties.GRAVITINO_S3_ENDPOINT, S3_ENDPOINT);
     conf.set(S3Properties.GRAVITINO_S3_REGION, S3_REGION);
     conf.set(S3Properties.GRAVITINO_S3_ROLE_ARN, S3_ROLE_ARN);
@@ -146,6 +145,8 @@ public class GravitinoVirtualFileSystemS3CredentialIT 
extends GravitinoVirtualFi
 
     gvfsConf.forEach(entry -> map.put(entry.getKey(), entry.getValue()));
 
+    map.put(S3Properties.GRAVITINO_S3_ACCESS_KEY_ID, S3_ACCESS_KEY);
+    map.put(S3Properties.GRAVITINO_S3_SECRET_ACCESS_KEY, S3_SECRET_KEY);
     Map<String, String> hadoopConfMap =
         FileSystemUtils.toHadoopConfigMap(map, 
S3FileSystemProvider.GRAVITINO_KEY_TO_S3_HADOOP_KEY);
 

Reply via email to