Interface MetadataCache<T>

All Known Implementing Classes:
MetadataCacheImpl

public interface MetadataCache<T>
Represent the caching layer access for a specific type of objects.
  • Method Details

    • get

      Tries to fetch one item from the cache or fallback to the store if not present.

      If the key is not found, the Optional will be empty.

      Parameters:
      path - the path of the object in the metadata store
      Returns:
      a future to track the completion of the operation
    • getWithStats

      Tries to fetch one item from the cache or fallback to the store if not present.

      If the key is not found, the Optional will be empty.

      Parameters:
      path - the path of the object in the metadata store
      Returns:
      a future to track the completion of the operation
    • getIfCached

      Optional<T> getIfCached(String path)
      Check if an object is present in cache without triggering a load from the metadata store.
      Parameters:
      path - the path of the object in the metadata store
      Returns:
      the cached object or an empty Optional is the cache doesn't have the object
    • getChildren

      CompletableFuture<List<String>> getChildren(String path)
      Return all the nodes (lexicographically sorted) that are children to the specific path. If the path itself does not exist, it will return an empty list.
      Parameters:
      path - the path of the key to get from the store
      Returns:
      a future to track the async request
    • exists

      Read whether a specific path exists. Note: In case of keys with multiple levels (eg: '/a/b/c'), checking the existence of a parent (eg. '/a') might not necessarily return true, unless the key had been explicitly created.
      Parameters:
      path - the path of the key to check on the store
      Returns:
      a future to track the async request
    • readModifyUpdateOrCreate

      CompletableFuture<T> readModifyUpdateOrCreate(String path, Function<Optional<T>,T> modifyFunction)
      Perform an atomic read-modify-update of the value.

      The modify function can potentially be called multiple times if there are concurrent updates happening.

      If the object does not exist yet, the modifyFunction will get passed an Optional.empty() object.

      Parameters:
      path - the path of the object in the metadata store
      modifyFunction - a function that will be passed the current value and returns a modified value to be stored
      Returns:
      a future to track the completion of the operation
    • readModifyUpdate

      CompletableFuture<T> readModifyUpdate(String path, Function<T,T> modifyFunction)
      Perform an atomic read-modify-update of the value.

      The modify function can potentially be called multiple times if there are concurrent updates happening.

      Parameters:
      path - the path of the object in the metadata store
      modifyFunction - a function that will be passed the current value and returns a modified value to be stored
      Returns:
      a future to track the completion of the operation
    • create

      CompletableFuture<Void> create(String path, T value)
      Create a new object in the metadata store.

      This operation will make sure to keep the cache consistent.

      Parameters:
      path - the path of the object in the metadata store
      value - the object to insert in metadata store
      Returns:
      a future to track the completion of the operation
      Throws:
      MetadataStoreException.AlreadyExistsException - If the object is already present.
    • delete

      CompletableFuture<Void> delete(String path)
      Delete an object from the metadata store.

      This operation will make sure to keep the cache consistent.

      Parameters:
      path - the path of the object in the metadata store
      Returns:
      a future to track the completion of the operation
      Throws:
      MetadataStoreException.NotFoundException - if the object is not present in the metadata store.
    • invalidate

      void invalidate(String path)
      Force the invalidation of an object in the metadata cache.
      Parameters:
      path - the path of the object in the metadata store
    • refresh

      void refresh(String path)
      Invalidate and reload an object in the metadata cache.
      Parameters:
      path - the path of the object in the metadata store