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);