Class AbstractMetadataStore

java.lang.Object
org.apache.pulsar.metadata.impl.AbstractMetadataStore
All Implemented Interfaces:
AutoCloseable, Consumer<Notification>, MetadataStoreExtended, MetadataStore
Direct Known Subclasses:
AbstractBatchedMetadataStore, LocalMemoryMetadataStore, RocksdbMetadataStore

public abstract class AbstractMetadataStore extends Object implements MetadataStoreExtended, Consumer<Notification>
  • Field Details

  • Constructor Details

    • AbstractMetadataStore

      protected AbstractMetadataStore()
  • Method Details

    • getChildrenFromStore

      protected abstract CompletableFuture<List<String>> getChildrenFromStore(String path)
    • existsFromStore

      protected abstract CompletableFuture<Boolean> existsFromStore(String path)
    • registerSyncLister

      protected void registerSyncLister(Optional<MetadataEventSynchronizer> synchronizer)
    • shouldIgnoreEvent

      protected boolean shouldIgnoreEvent(MetadataEvent event, GetResult existingValue)
    • getMetadataCache

      public <T> MetadataCache<T> getMetadataCache(Class<T> clazz, MetadataCacheConfig cacheConfig)
      Description copied from interface: MetadataStore
      Create a metadata cache specialized for a specific class.
      Specified by:
      getMetadataCache in interface MetadataStore
      Parameters:
      clazz - the class type to be used for serialization/deserialization
      cacheConfig - the cache configuration to be used
      Returns:
      the metadata cache object
    • getMetadataCache

      public <T> MetadataCache<T> getMetadataCache(com.fasterxml.jackson.core.type.TypeReference<T> typeRef, MetadataCacheConfig cacheConfig)
      Description copied from interface: MetadataStore
      Create a metadata cache specialized for a specific class.
      Specified by:
      getMetadataCache in interface MetadataStore
      Parameters:
      typeRef - the type ref description to be used for serialization/deserialization
      cacheConfig - the cache configuration to be used
      Returns:
      the metadata cache object
    • getMetadataCache

      public <T> MetadataCache<T> getMetadataCache(MetadataSerde<T> serde, MetadataCacheConfig cacheConfig)
      Description copied from interface: MetadataStore
      Create a metadata cache that uses a particular serde object.
      Specified by:
      getMetadataCache in interface MetadataStore
      Parameters:
      serde - the custom serialization/deserialization object
      cacheConfig - the cache configuration to be used
      Returns:
      the metadata cache object
    • get

      Description copied from interface: MetadataStore
      Read the value of one key, identified by the path The async call will return a future that yields a GetResult that will contain the value and the associated Stat object. If the value is not found, the future will yield an empty Optional.
      Specified by:
      get in interface MetadataStore
      Parameters:
      path - the path of the key to get from the store
      Returns:
      a future to track the async request
    • storeGet

      protected abstract CompletableFuture<Optional<GetResult>> storeGet(String path)
    • put

      public CompletableFuture<Stat> put(String path, byte[] value, Optional<Long> expectedVersion)
      Description copied from interface: MetadataStore
      Put a new value for a given key. The caller can specify an expected version to be atomically checked against the current version of the stored data. The future will return the Stat object associated with the newly inserted value.
      Specified by:
      put in interface MetadataStore
      Parameters:
      path - the path of the key to delete from the store
      value - the value to
      expectedVersion - if present, the version will have to match with the currently stored value for the operation to succeed. Use -1 to enforce a non-existing value.
      Returns:
      a future to track the async request
    • getChildren

      public final CompletableFuture<List<String>> getChildren(String path)
      Description copied from interface: MetadataStore
      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.
      Specified by:
      getChildren in interface MetadataStore
      Parameters:
      path - the path of the key to get from the store
      Returns:
      a future to track the async request
    • exists

      public final CompletableFuture<Boolean> exists(String path)
      Description copied from interface: MetadataStore
      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.
      Specified by:
      exists in interface MetadataStore
      Parameters:
      path - the path of the key to check on the store
      Returns:
      a future to track the async request
    • registerListener

      public void registerListener(Consumer<Notification> listener)
      Description copied from interface: MetadataStore
      Register a listener that will be called on changes in the underlying store.
      Specified by:
      registerListener in interface MetadataStore
      Parameters:
      listener - a consumer of notifications
    • receivedNotification

      protected CompletableFuture<Void> receivedNotification(Notification notification)
    • accept

      public void accept(Notification n)
      Specified by:
      accept in interface Consumer<Notification>
    • storeDelete

      protected abstract CompletableFuture<Void> storeDelete(String path, Optional<Long> expectedVersion)
    • delete

      public final CompletableFuture<Void> delete(String path, Optional<Long> expectedVersion)
      Specified by:
      delete in interface MetadataStore
      Parameters:
      path - the path of the key to delete from the store
      expectedVersion - if present, the version will have to match with the currently stored value for the operation to succeed
      Returns:
      a future to track the async request
    • deleteRecursive

      public CompletableFuture<Void> deleteRecursive(String path)
      Description copied from interface: MetadataStore
      Delete a key-value pair and all the children nodes. Note: the operation might not be carried in an atomic fashion. If the operation fails, the deletion of the tree might be only partial.
      Specified by:
      deleteRecursive in interface MetadataStore
      Parameters:
      path - the path of the key to delete from the store
      Returns:
      a future to track the async request
    • storePut

      protected abstract CompletableFuture<Stat> storePut(String path, byte[] data, Optional<Long> optExpectedVersion, EnumSet<CreateOption> options)
    • put

      public final CompletableFuture<Stat> put(String path, byte[] data, Optional<Long> optExpectedVersion, EnumSet<CreateOption> options)
      Description copied from interface: MetadataStoreExtended
      Put a new value for a given key. The caller can specify an expected version to be atomically checked against the current version of the stored data. The future will return the Stat object associated with the newly inserted value.
      Specified by:
      put in interface MetadataStoreExtended
      Parameters:
      path - the path of the key to delete from the store
      data - the value to
      optExpectedVersion - if present, the version will have to match with the currently stored value for the operation to succeed. Use -1 to enforce a non-existing value.
      options - a set of CreateOption to use if the the key-value pair is being created
      Returns:
      a future to track the async request
    • putInternal

      public final CompletableFuture<Stat> putInternal(String path, byte[] data, Optional<Long> optExpectedVersion, Set<CreateOption> options)
    • registerSessionListener

      public void registerSessionListener(Consumer<SessionEvent> listener)
      Description copied from interface: MetadataStoreExtended
      Register a session listener that will get notified of changes in status of the current session.
      Specified by:
      registerSessionListener in interface MetadataStoreExtended
      Parameters:
      listener - the session listener
    • receivedSessionEvent

      protected void receivedSessionEvent(SessionEvent event)
    • close

      public void close() throws Exception
      Specified by:
      close in interface AutoCloseable
      Throws:
      Exception
    • invalidateAll

      public void invalidateAll()
    • execute

      public void execute(Runnable task, CompletableFuture<?> future)
      Run the task in the executor thread and fail the future if the executor is shutting down.
    • parent

      protected static String parent(String path)
    • notifyParentChildrenChanged

      protected void notifyParentChildrenChanged(String path)