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

yuqi4733 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 522748b436 [#7572] improvement(gvfs): add fileset cache in GVFS (#8254)
522748b436 is described below

commit 522748b436a5e0362b54c19f216ba04b521d7d4e
Author: mchades <[email protected]>
AuthorDate: Thu Aug 28 15:40:51 2025 +0800

    [#7572] improvement(gvfs): add fileset cache in GVFS (#8254)
    
    ### What changes were proposed in this pull request?
    
    add fileset cache in GVFS
    
    ### Why are the changes needed?
    
    Fix: #7572
    
    ### Does this PR introduce _any_ user-facing change?
    
    no
    
    ### How was this patch tested?
    
    CI pass
---
 .../gravitino/filesystem/gvfs_base_operations.py   | 63 +++++++++++++++++--
 .../gravitino/filesystem/gvfs_config.py            |  5 ++
 .../filesystem/hadoop/BaseGVFSOperations.java      | 73 ++++++++++++++--------
 ...CatalogCache.java => FilesetMetadataCache.java} | 58 ++++++++++++-----
 .../GravitinoVirtualFileSystemConfiguration.java   | 15 +++++
 docs/how-to-use-gvfs.md                            |  3 +-
 6 files changed, 171 insertions(+), 46 deletions(-)

diff --git a/clients/client-python/gravitino/filesystem/gvfs_base_operations.py 
b/clients/client-python/gravitino/filesystem/gvfs_base_operations.py
index 30cd5dd048..85b74d6ddd 100644
--- a/clients/client-python/gravitino/filesystem/gvfs_base_operations.py
+++ b/clients/client-python/gravitino/filesystem/gvfs_base_operations.py
@@ -28,6 +28,7 @@ from readerwriterlock import rwlock
 
 from gravitino.api.catalog import Catalog
 from gravitino.api.credential.credential import Credential
+from gravitino.api.file.fileset import Fileset
 from gravitino.audit.caller_context import CallerContextHolder, CallerContext
 from gravitino.audit.fileset_audit_constants import FilesetAuditConstants
 from gravitino.audit.fileset_data_operation import FilesetDataOperation
@@ -78,6 +79,7 @@ class BaseGVFSOperations(ABC):
 
     ENV_CURRENT_LOCATION_NAME_ENV_VAR_DEFAULT = "CURRENT_LOCATION_NAME"
     ENABLE_CREDENTIAL_VENDING_DEFAULT = False
+    ENABLE_FILESET_METADATA_CACHE_DEFAULT = False
 
     def __init__(
         self,
@@ -135,8 +137,20 @@ class BaseGVFSOperations(ABC):
         self._filesystem_cache = TTLCache(maxsize=cache_size, 
ttl=cache_expired_time)
         self._cache_lock = rwlock.RWLockFair()
 
-        self._catalog_cache = LRUCache(maxsize=100)
-        self._catalog_cache_lock = rwlock.RWLockFair()
+        self._enable_fileset_metadata_cache = (
+            self.ENABLE_FILESET_METADATA_CACHE_DEFAULT
+            if options is None
+            else options.get(
+                GVFSConfig.GVFS_FILESYSTEM_ENABLE_FILESET_METADATA_CACHE,
+                self.ENABLE_FILESET_METADATA_CACHE_DEFAULT
+            )
+        )
+        if self._enable_fileset_metadata_cache:
+            self._catalog_cache = LRUCache(maxsize=100)
+            self._catalog_cache_lock = rwlock.RWLockFair()
+
+            self._fileset_cache = LRUCache(maxsize=10000)
+            self._fileset_cache_lock = rwlock.RWLockFair()
 
         self._enable_credential_vending = (
             False
@@ -389,9 +403,7 @@ class BaseGVFSOperations(ABC):
             self._metalake, fileset_ident.namespace().level(1)
         )
         catalog = self._get_fileset_catalog(catalog_ident)
-        fileset = catalog.as_fileset_catalog().load_fileset(
-            NameIdentifier.of(fileset_ident.namespace().level(2), 
fileset_ident.name())
-        )
+        fileset = self._get_fileset(fileset_ident)
         target_location_name = (
             location_name
             or fileset.properties().get(fileset.PROPERTY_DEFAULT_LOCATION_NAME)
@@ -527,6 +539,9 @@ class BaseGVFSOperations(ABC):
             CallerContextHolder.remove()
 
     def _get_fileset_catalog(self, catalog_ident: NameIdentifier):
+        if not self._enable_fileset_metadata_cache:
+            return self._client.load_catalog(catalog_ident.name())
+
         read_lock = self._catalog_cache_lock.gen_rlock()
         try:
             read_lock.acquire()
@@ -547,3 +562,41 @@ class BaseGVFSOperations(ABC):
             return catalog
         finally:
             write_lock.release()
+
+    def _get_fileset(self, fileset_ident: NameIdentifier):
+        if not self._enable_fileset_metadata_cache:
+            catalog_ident: NameIdentifier = NameIdentifier.of(
+                fileset_ident.namespace().level(0), 
fileset_ident.namespace().level(1)
+            )
+            catalog: FilesetCatalog = self._get_fileset_catalog(catalog_ident)
+            return catalog.as_fileset_catalog().load_fileset(
+                NameIdentifier.of(fileset_ident.namespace().level(2), 
fileset_ident.name())
+            )
+
+        read_lock = self._fileset_cache_lock.gen_rlock()
+        try:
+            read_lock.acquire()
+            cache_value: Fileset = self._fileset_cache.get(fileset_ident)
+            if cache_value is not None:
+                return cache_value
+        finally:
+            read_lock.release()
+
+        write_lock = self._fileset_cache_lock.gen_wlock()
+        try:
+            write_lock.acquire()
+            cache_value: Fileset = self._fileset_cache.get(fileset_ident)
+            if cache_value is not None:
+                return cache_value
+
+            catalog_ident: NameIdentifier = NameIdentifier.of(
+                fileset_ident.namespace().level(0), 
fileset_ident.namespace().level(1)
+            )
+            catalog: FilesetCatalog = self._get_fileset_catalog(catalog_ident)
+            fileset = catalog.as_fileset_catalog().load_fileset(
+                NameIdentifier.of(fileset_ident.namespace().level(2), 
fileset_ident.name())
+            )
+            self._fileset_cache[fileset_ident] = fileset
+            return fileset
+        finally:
+            write_lock.release()
diff --git a/clients/client-python/gravitino/filesystem/gvfs_config.py 
b/clients/client-python/gravitino/filesystem/gvfs_config.py
index 507528ecd0..6d03d41ebb 100644
--- a/clients/client-python/gravitino/filesystem/gvfs_config.py
+++ b/clients/client-python/gravitino/filesystem/gvfs_config.py
@@ -76,3 +76,8 @@ class GVFSConfig:
 
     # The configuration key prefix for the client.
     GVFS_FILESYSTEM_CLIENT_CONFIG_PREFIX = "gvfs_gravitino_client_"
+
+    # The configuration key for whether to enable fileset catalog cache. The 
default is false.
+    # Note that this cache causes a side effect: if you modify the fileset or 
fileset catalog metadata,
+    # the client can not see the latest changes.
+    GVFS_FILESYSTEM_ENABLE_FILESET_METADATA_CACHE = 
"enable_fileset_metadata_cache"
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 7dbbe6f09e..d76b8302c5 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
@@ -20,6 +20,8 @@ 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 static 
org.apache.gravitino.filesystem.hadoop.GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_FILESET_CATALOG_CACHE_ENABLE;
+import static 
org.apache.gravitino.filesystem.hadoop.GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_FILESET_CATALOG_CACHE_ENABLE_DEFAULT;
 import static 
org.apache.gravitino.filesystem.hadoop.GravitinoVirtualFileSystemUtils.extractIdentifier;
 import static 
org.apache.gravitino.filesystem.hadoop.GravitinoVirtualFileSystemUtils.getConfigMap;
 import static 
org.apache.gravitino.filesystem.hadoop.GravitinoVirtualFileSystemUtils.getSubPathFromGvfsPath;
@@ -111,14 +113,11 @@ public abstract class BaseGVFSOperations implements 
Closeable {
 
   private final String metalakeName;
 
-  private final FilesetCatalogCache filesetCatalogCache;
+  private final Optional<FilesetMetadataCache> filesetMetadataCache;
+  private final GravitinoClient gravitinoClient;
 
   private final Configuration conf;
 
-  // Since Caffeine does not ensure that removalListener will be involved 
after expiration
-  // We use a scheduler with one thread to clean up expired clients.
-  private final ScheduledThreadPoolExecutor internalFileSystemCleanScheduler;
-
   // Fileset nameIdentifier-locationName Pair and its corresponding FileSystem 
cache, the name
   // identifier has four levels, the first level is metalake name.
   private final Cache<Pair<NameIdentifier, String>, FileSystem> 
internalFileSystemCache;
@@ -146,13 +145,17 @@ public abstract class BaseGVFSOperations implements 
Closeable {
         "'%s' is not set in the configuration",
         
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_CLIENT_METALAKE_KEY);
 
-    GravitinoClient client = 
GravitinoVirtualFileSystemUtils.createClient(configuration);
-    this.filesetCatalogCache = new FilesetCatalogCache(client);
+    this.gravitinoClient = 
GravitinoVirtualFileSystemUtils.createClient(configuration);
+    boolean enableFilesetCatalogCache =
+        configuration.getBoolean(
+            FS_GRAVITINO_FILESET_CATALOG_CACHE_ENABLE,
+            FS_GRAVITINO_FILESET_CATALOG_CACHE_ENABLE_DEFAULT);
+    this.filesetMetadataCache =
+        enableFilesetCatalogCache
+            ? Optional.of(new FilesetMetadataCache(gravitinoClient))
+            : Optional.empty();
 
-    this.internalFileSystemCleanScheduler =
-        new ScheduledThreadPoolExecutor(1, 
newDaemonThreadFactory("gvfs-filesystem-cache-cleaner"));
-    this.internalFileSystemCache =
-        newFileSystemCache(configuration, internalFileSystemCleanScheduler);
+    this.internalFileSystemCache = newFileSystemCache(configuration);
 
     this.fileSystemProvidersMap = 
ImmutableMap.copyOf(getFileSystemProviders());
 
@@ -186,11 +189,10 @@ public abstract class BaseGVFSOperations implements 
Closeable {
       }
     }
     internalFileSystemCache.invalidateAll();
-    internalFileSystemCleanScheduler.shutdownNow();
 
     try {
-      if (filesetCatalogCache != null) {
-        filesetCatalogCache.close();
+      if (filesetMetadataCache.isPresent()) {
+        filesetMetadataCache.get().close();
       }
     } catch (IOException e) {
       // ignore
@@ -527,14 +529,35 @@ public abstract class BaseGVFSOperations implements 
Closeable {
   }
 
   /**
-   * Get the fileset catalog by the catalog identifier from the cache. If the 
subclass does not want
-   * to use the cache, it can override this method.
+   * Get the fileset catalog by the catalog identifier from the cache or load 
it from the server if
+   * the cache is disabled.
    *
    * @param catalogIdent the catalog identifier.
    * @return the fileset catalog.
    */
   protected FilesetCatalog getFilesetCatalog(NameIdentifier catalogIdent) {
-    return filesetCatalogCache.getFilesetCatalog(catalogIdent);
+    return filesetMetadataCache
+        .map(cache -> cache.getFilesetCatalog(catalogIdent))
+        .orElseGet(() -> 
gravitinoClient.loadCatalog(catalogIdent.name()).asFilesetCatalog());
+  }
+
+  /**
+   * Get the fileset by the fileset identifier from the cache or load it from 
the server if the
+   * cache is disabled.
+   *
+   * @param filesetIdent the fileset identifier.
+   * @return the fileset.
+   */
+  protected Fileset getFileset(NameIdentifier filesetIdent) {
+    return filesetMetadataCache
+        .map(cache -> cache.getFileset(filesetIdent))
+        .orElseGet(
+            () ->
+                getFilesetCatalog(
+                        NameIdentifier.of(
+                            filesetIdent.namespace().level(0), 
filesetIdent.namespace().level(1)))
+                    .loadFileset(
+                        NameIdentifier.of(filesetIdent.namespace().level(2), 
filesetIdent.name())));
   }
 
   @VisibleForTesting
@@ -662,15 +685,8 @@ public abstract class BaseGVFSOperations implements 
Closeable {
     }
   }
 
-  private Fileset getFileset(NameIdentifier filesetIdent) {
-    NameIdentifier catalogIdent =
-        NameIdentifier.of(filesetIdent.namespace().level(0), 
filesetIdent.namespace().level(1));
-    return getFilesetCatalog(catalogIdent)
-        .loadFileset(NameIdentifier.of(filesetIdent.namespace().level(2), 
filesetIdent.name()));
-  }
-
   private Cache<Pair<NameIdentifier, String>, FileSystem> newFileSystemCache(
-      Configuration configuration, ScheduledThreadPoolExecutor 
internalFileSystemCleanScheduler) {
+      Configuration configuration) {
     int maxCapacity =
         configuration.getInt(
             
GravitinoVirtualFileSystemConfiguration.FS_GRAVITINO_FILESET_CACHE_MAX_CAPACITY_KEY,
@@ -696,7 +712,12 @@ public abstract class BaseGVFSOperations implements 
Closeable {
     Caffeine<Object, Object> cacheBuilder =
         Caffeine.newBuilder()
             .maximumSize(maxCapacity)
-            
.scheduler(Scheduler.forScheduledExecutorService(internalFileSystemCleanScheduler))
+            // Since Caffeine does not ensure that removalListener will be 
involved after expiration
+            // We use a scheduler with one thread to clean up expired fs.
+            .scheduler(
+                Scheduler.forScheduledExecutorService(
+                    new ScheduledThreadPoolExecutor(
+                        1, 
newDaemonThreadFactory("gvfs-filesystem-cache-cleaner"))))
             .removalListener(
                 (key, value, cause) -> {
                   FileSystem fs = (FileSystem) value;
diff --git 
a/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/FilesetCatalogCache.java
 
b/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/FilesetMetadataCache.java
similarity index 60%
rename from 
clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/FilesetCatalogCache.java
rename to 
clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/FilesetMetadataCache.java
index 33e40ef20e..2972e31142 100644
--- 
a/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/FilesetCatalogCache.java
+++ 
b/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/FilesetMetadataCache.java
@@ -30,28 +30,25 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.ThreadFactory;
 import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.client.GravitinoClient;
+import org.apache.gravitino.file.Fileset;
 import org.apache.gravitino.file.FilesetCatalog;
 
 /** A cache for fileset catalogs. */
-public class FilesetCatalogCache implements Closeable {
+public class FilesetMetadataCache implements Closeable {
 
   private final GravitinoClient client;
   private final Cache<NameIdentifier, FilesetCatalog> catalogCache;
-
-  // Since Caffeine does not ensure that removalListener will be involved 
after expiration
-  // We use a scheduler with one thread to clean up expired clients.
-  private final ScheduledThreadPoolExecutor catalogCleanScheduler;
+  private final Cache<NameIdentifier, Fileset> filesetCache;
 
   /**
-   * Creates a new instance of {@link FilesetCatalogCache}.
+   * Creates a new instance of {@link FilesetMetadataCache}.
    *
    * @param client the Gravitino client.
    */
-  public FilesetCatalogCache(GravitinoClient client) {
+  public FilesetMetadataCache(GravitinoClient client) {
     this.client = client;
-    this.catalogCleanScheduler =
-        new ScheduledThreadPoolExecutor(1, 
newDaemonThreadFactory("gvfs-catalog-cache-cleaner"));
-    this.catalogCache = newCatalogCache(catalogCleanScheduler);
+    this.catalogCache = newCatalogCache();
+    this.filesetCache = newFilesetCache();
   }
 
   /**
@@ -70,13 +67,46 @@ public class FilesetCatalogCache implements Closeable {
     return filesetCatalog;
   }
 
-  private Cache<NameIdentifier, FilesetCatalog> newCatalogCache(
-      ScheduledThreadPoolExecutor catalogCleanScheduler) {
+  /**
+   * Gets the fileset by the given fileset identifier.
+   *
+   * @param filesetIdent the fileset identifier.
+   * @return the fileset.
+   */
+  public Fileset getFileset(NameIdentifier filesetIdent) {
+    NameIdentifier catalogIdent =
+        NameIdentifier.of(filesetIdent.namespace().level(0), 
filesetIdent.namespace().level(1));
+    FilesetCatalog filesetCatalog = getFilesetCatalog(catalogIdent);
+    return filesetCache.get(
+        filesetIdent,
+        ident ->
+            filesetCatalog.loadFileset(
+                NameIdentifier.of(filesetIdent.namespace().level(2), 
filesetIdent.name())));
+  }
+
+  private Cache<NameIdentifier, FilesetCatalog> newCatalogCache() {
     // In most scenarios, it will not read so many catalog filesets at the 
same time, so we can just
     // set a default value for this cache.
     return Caffeine.newBuilder()
         .maximumSize(100)
-        
.scheduler(Scheduler.forScheduledExecutorService(catalogCleanScheduler))
+        // Since Caffeine does not ensure that removalListener will be 
involved after expiration
+        // We use a scheduler with one thread to clean up expired catalogs.
+        .scheduler(
+            Scheduler.forScheduledExecutorService(
+                new ScheduledThreadPoolExecutor(
+                    1, newDaemonThreadFactory("gvfs-catalog-cache-cleaner"))))
+        .build();
+  }
+
+  private Cache<NameIdentifier, Fileset> newFilesetCache() {
+    return Caffeine.newBuilder()
+        .maximumSize(10000)
+        // Since Caffeine does not ensure that removalListener will be 
involved after expiration
+        // We use a scheduler with one thread to clean up expired filesets.
+        .scheduler(
+            Scheduler.forScheduledExecutorService(
+                new ScheduledThreadPoolExecutor(
+                    1, newDaemonThreadFactory("gvfs-fileset-cache-cleaner"))))
         .build();
   }
 
@@ -87,6 +117,7 @@ public class FilesetCatalogCache implements Closeable {
   @Override
   public void close() throws IOException {
     catalogCache.invalidateAll();
+    filesetCache.invalidateAll();
     // close the client
     try {
       if (client != null) {
@@ -95,6 +126,5 @@ public class FilesetCatalogCache implements Closeable {
     } catch (Exception e) {
       // ignore
     }
-    catalogCleanScheduler.shutdownNow();
   }
 }
diff --git 
a/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/GravitinoVirtualFileSystemConfiguration.java
 
b/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/GravitinoVirtualFileSystemConfiguration.java
index 4ffb8d3731..80d8a90d35 100644
--- 
a/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/GravitinoVirtualFileSystemConfiguration.java
+++ 
b/clients/filesystem-hadoop3/src/main/java/org/apache/gravitino/filesystem/hadoop/GravitinoVirtualFileSystemConfiguration.java
@@ -47,14 +47,17 @@ public class GravitinoVirtualFileSystemConfiguration {
 
   /** The authentication type for simple authentication. */
   public static final String SIMPLE_AUTH_TYPE = "simple";
+
   /** The authentication type for oauth2 authentication. */
   public static final String OAUTH2_AUTH_TYPE = "oauth2";
 
   /** The authentication type for kerberos authentication. */
   public static final String KERBEROS_AUTH_TYPE = "kerberos";
+
   // oauth2
   /** The configuration key prefix for oauth2 */
   public static final String FS_GRAVITINO_CLIENT_OAUTH2_PREFIX = 
"fs.gravitino.client.oauth2.";
+
   /** The configuration key for the URI of the default OAuth server. */
   public static final String FS_GRAVITINO_CLIENT_OAUTH2_SERVER_URI_KEY =
       "fs.gravitino.client.oauth2.serverUri";
@@ -73,6 +76,7 @@ public class GravitinoVirtualFileSystemConfiguration {
 
   /** The configuration key prefix for kerberos */
   public static final String FS_GRAVITINO_CLIENT_KERBEROS_PREFIX = 
"fs.gravitino.client.kerberos.";
+
   /** The configuration key for the principal. */
   public static final String FS_GRAVITINO_CLIENT_KERBEROS_PRINCIPAL_KEY =
       "fs.gravitino.client.kerberos.principal";
@@ -160,5 +164,16 @@ public class GravitinoVirtualFileSystemConfiguration {
   public static final List<String> NOT_GRAVITINO_CLIENT_CONFIG_LIST =
       ImmutableList.of(FS_GRAVITINO_CLIENT_METALAKE_KEY, 
FS_GRAVITINO_CLIENT_AUTH_TYPE_KEY);
 
+  /**
+   * The configuration key for whether to enable fileset catalog cache. The 
default is false. Note
+   * that this cache causes a side effect: if you modify the fileset or 
fileset catalog metadata,
+   * the client can not see the latest changes.
+   */
+  public static final String FS_GRAVITINO_FILESET_CATALOG_CACHE_ENABLE =
+      "fs.gravitino.filesetCatalog.cache.enable";
+
+  /** The default value for whether to enable fileset catalog cache. */
+  public static final boolean 
FS_GRAVITINO_FILESET_CATALOG_CACHE_ENABLE_DEFAULT = false;
+
   private GravitinoVirtualFileSystemConfiguration() {}
 }
diff --git a/docs/how-to-use-gvfs.md b/docs/how-to-use-gvfs.md
index 38415e64e7..75168c71fb 100644
--- a/docs/how-to-use-gvfs.md
+++ b/docs/how-to-use-gvfs.md
@@ -64,7 +64,6 @@ the path mapping and convert automatically.
 | `fs.gravitino.client.kerberos.keytabFilePath`         | The auth keytab file 
path for the Gravitino client when using `kerberos` auth type in the Gravitino 
Virtual File System.                                                            
                                                                                
                                                 | (none)                       
                                  | No                                  | 0.5.1 
           |
 | `fs.gravitino.fileset.cache.maxCapacity`              | The cache capacity 
of the Gravitino Virtual File System.                                           
                                                                                
                                                                                
                                                  | `20`                        
                                   | No                                  | 
0.5.0            |
 | `fs.gravitino.fileset.cache.evictionMillsAfterAccess` | The value of time 
that the cache expires after accessing in the Gravitino Virtual File System. 
The value is in `milliseconds`.                                                 
                                                                                
                                                      | `3600000`               
                                       | No                                  | 
0.5.0            |
-| `fs.gravitino.fileset.cache.evictionMillsAfterAccess` | The value of time 
that the cache expires after accessing in the Gravitino Virtual File System. 
The value is in `milliseconds`.                                                 
                                                                                
                                                      | `3600000`               
                                       | No                                  | 
0.5.0            |
 | `fs.gravitino.current.location.name`                  | The configuration 
used to select the location of the fileset. If this configuration is not set, 
the value of environment variable configured by 
`fs.gravitino.current.location.env.var` will be checked. If neither is set, the 
value of fileset property `default-location-name` will be used as the location 
name. | the value of fileset property `default-location-name`          | No     
                             | 0.9.0-incubating |
 | `fs.gravitino.current.location.name.env.var`          | The environment 
variable name to get the current location name.                                 
                                                                                
                                                                                
                                                     | `CURRENT_LOCATION_NAME`  
                                      | No                                  | 
0.9.0-incubating |
 | `fs.gravitino.operations.class`                       | The operations class 
to provide the FS operations for the Gravitino Virtual File System. Users can 
extends `BaseGVFSOperations` to implement their own operations and configure 
the class name in this conf to use custom FS operations.                        
                                                     | 
`org.apache.gravitino.filesystem.hadoop.DefaultGVFSOperations` | No             
                     | 0.9.0-incubating |
@@ -72,6 +71,7 @@ the path mapping and convert automatically.
 | `fs.gravitino.client.request.header.`                 | The configuration 
key prefix for the Gravitino client request header. You can set the request 
header for the Gravitino client.                                                
                                                                                
                                                       | (none)                 
                                        | No                                  | 
0.9.0-incubating |
 | `fs.gravitino.enableCredentialVending`                | Whether to enable 
credential vending for the Gravitino Virtual File System.                       
                                                                                
                                                                                
                                                   | `false`                    
                                    | No                                  | 
0.9.0-incubating |
 | `fs.gravitino.client.`                                | The configuration 
key prefix for the Gravitino client config.                                     
                                                                                
                                                                                
                                                   | (none)                     
                                    | No                                  | 
1.0.0            |
+| `fs.gravitino.filesetMetadataCache.enable`            | Whether to cache the 
fileset or fileset catalog metadata in the Gravitino Virtual File System. Note 
that this cache causes a side effect: if you modify the fileset or fileset 
catalog metadata, the client can not see the latest changes.                    
                                                      | `false`                 
                                       | No                                  | 
1.0.0            |
 
 To configure the Gravitino client, use properties prefixed with 
`fs.gravitino.client.`. These properties will be passed to the Gravitino client 
after removing the `fs.` prefix.
 
@@ -395,6 +395,7 @@ to recompile the native libraries like `libhdfs` and 
others, and completely repl
 | `client_request_header_`        | The configuration key prefix for the 
Gravitino client request header. You can set the request header for the 
Gravitino client.                                                               
                                                                                
                                | (none)                                        
                       | No                                | 0.9.0-incubating |
 | `enable_credential_vending`     | Whether to enable credential vending for 
the Gravitino Virtual File System.                                              
                                                                                
                                                                                
                    | `false`                                                   
           | No                                | 0.9.0-incubating |
 | `gvfs_gravitino_client_`        | The configuration key prefix for the 
Gravitino client. You can set the config for the Gravitino client.              
                                                                                
                                                                                
                        | (none)                                                
               | No                                | 1.0.0            |
+| `enable_fileset_metadata_cache` | Whether to cache the fileset or fileset 
catalog metadata in the Gravitino Virtual File System. Note that this cache 
causes a side effect: if you modify the fileset or fileset catalog metadata, 
the client can not see the latest changes.                                      
                            | `false`                                           
                   | No                                | 1.0.0            |
 
 To configure the Gravitino client, use properties prefixed with 
`gvfs_gravitino_client_`. These properties will be passed to the Gravitino 
client after removing the `gvfs_` prefix.
 

Reply via email to