Class PersistenceImplementation

java.lang.Object
org.apache.polaris.persistence.nosql.impl.PersistenceImplementation
All Implemented Interfaces:
org.apache.polaris.persistence.nosql.api.Persistence

public final class PersistenceImplementation extends Object implements org.apache.polaris.persistence.nosql.api.Persistence
Base implementation that every database-specific implementation is encouraged to extend.

This class centralizes Obj de-serialization and parameter validations.

  • Constructor Summary

    Constructors
    Constructor
    Description
    PersistenceImplementation(org.apache.polaris.persistence.nosql.api.backend.Backend backend, org.apache.polaris.persistence.nosql.api.PersistenceParams params, String realmId, org.apache.polaris.ids.api.MonotonicClock monotonicClock, org.apache.polaris.ids.api.IdGenerator idGenerator)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    <V> org.apache.polaris.persistence.nosql.api.index.Index<V>
    buildReadIndex(org.apache.polaris.persistence.nosql.api.index.IndexContainer<V> indexContainer, org.apache.polaris.persistence.nosql.api.index.IndexValueSerializer<V> indexValueSerializer)
     
    <V> org.apache.polaris.persistence.nosql.api.index.UpdatableIndex<V>
    buildWriteIndex(org.apache.polaris.persistence.nosql.api.index.IndexContainer<V> indexContainer, org.apache.polaris.persistence.nosql.api.index.IndexValueSerializer<V> indexValueSerializer)
     
    org.apache.polaris.persistence.nosql.api.commit.Commits
     
    <T extends org.apache.polaris.persistence.nosql.api.obj.Obj>
    boolean
    conditionalDelete(T expected, Class<T> clazz)
     
    <T extends org.apache.polaris.persistence.nosql.api.obj.Obj>
    T
    conditionalInsert(T obj, Class<T> clazz)
     
    <T extends org.apache.polaris.persistence.nosql.api.obj.Obj>
    T
    conditionalUpdate(T expected, T update, Class<T> clazz)
     
    <REF_OBJ extends org.apache.polaris.persistence.nosql.api.obj.BaseCommitObj, RESULT>
    org.apache.polaris.persistence.nosql.api.commit.Committer<REF_OBJ,RESULT>
    createCommitter(String refName, Class<REF_OBJ> referencedObjType, Class<RESULT> resultType)
     
    org.apache.polaris.persistence.nosql.api.ref.Reference
    createReference(String name, Optional<org.apache.polaris.persistence.nosql.api.obj.ObjRef> pointer)
     
    void
     
    void
    delete(org.apache.polaris.persistence.nosql.api.obj.ObjRef id)
     
    void
    deleteMany(org.apache.polaris.persistence.nosql.api.obj.ObjRef... ids)
     
    static <T> T
    deserialize(byte[] binary, Class<T> clazz)
     
    static <T> T
    deserialize(ByteBuffer binary, Class<T> clazz)
    Deserialize a byte array into an object of the given type, consumes the ByteBuffer.
    static <T> T
    deserializeObj(String type, long id, int partNum, InputStream in, String versionToken, long createdAtMicros, Class<T> clazz)
     
    <T extends org.apache.polaris.persistence.nosql.api.obj.Obj>
    T
    fetch(org.apache.polaris.persistence.nosql.api.obj.ObjRef id, Class<T> clazz)
     
    <T extends org.apache.polaris.persistence.nosql.api.obj.Obj>
    T[]
    fetchMany(Class<T> clazz, org.apache.polaris.persistence.nosql.api.obj.ObjRef... ids)
     
    org.apache.polaris.persistence.nosql.api.ref.Reference
     
    long
     
    org.apache.polaris.persistence.nosql.api.obj.ObjRef
    generateObjId(org.apache.polaris.persistence.nosql.api.obj.ObjType type)
     
    <T extends org.apache.polaris.persistence.nosql.api.obj.Obj>
    T
    getImmediate(org.apache.polaris.persistence.nosql.api.obj.ObjRef id, Class<T> clazz)
     
    org.apache.polaris.ids.api.IdGenerator
     
    int
     
    org.apache.polaris.ids.api.MonotonicClock
     
    org.apache.polaris.persistence.nosql.api.PersistenceParams
     
     
    static byte[]
     
    static byte[]
    serializeObj(org.apache.polaris.persistence.nosql.api.obj.Obj o)
     
     
    Optional<org.apache.polaris.persistence.nosql.api.ref.Reference>
    updateReferencePointer(org.apache.polaris.persistence.nosql.api.ref.Reference reference, org.apache.polaris.persistence.nosql.api.obj.ObjRef newPointer)
     
    <T extends org.apache.polaris.persistence.nosql.api.obj.Obj>
    T
    write(T obj, Class<T> clazz)
     
    <T extends org.apache.polaris.persistence.nosql.api.obj.Obj>
    T[]
    writeMany(Class<T> clazz, T... objs)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.apache.polaris.persistence.nosql.api.Persistence

    bucketizedBulkFetches, createReferenceSilent, currentInstant, currentTimeMicros, currentTimeMillis, fetchOrCreateReference, fetchReferenceForUpdate, fetchReferenceHead, objAge
  • Constructor Details

    • PersistenceImplementation

      public PersistenceImplementation(org.apache.polaris.persistence.nosql.api.backend.Backend backend, org.apache.polaris.persistence.nosql.api.PersistenceParams params, String realmId, org.apache.polaris.ids.api.MonotonicClock monotonicClock, org.apache.polaris.ids.api.IdGenerator idGenerator)
  • Method Details

    • idGenerator

      public org.apache.polaris.ids.api.IdGenerator idGenerator()
      Specified by:
      idGenerator in interface org.apache.polaris.persistence.nosql.api.Persistence
    • monotonicClock

      public org.apache.polaris.ids.api.MonotonicClock monotonicClock()
      Specified by:
      monotonicClock in interface org.apache.polaris.persistence.nosql.api.Persistence
    • realmId

      public String realmId()
      Specified by:
      realmId in interface org.apache.polaris.persistence.nosql.api.Persistence
    • params

      public org.apache.polaris.persistence.nosql.api.PersistenceParams params()
      Specified by:
      params in interface org.apache.polaris.persistence.nosql.api.Persistence
    • maxSerializedValueSize

      public int maxSerializedValueSize()
      Specified by:
      maxSerializedValueSize in interface org.apache.polaris.persistence.nosql.api.Persistence
    • generateId

      public long generateId()
      Specified by:
      generateId in interface org.apache.polaris.persistence.nosql.api.Persistence
    • generateObjId

      public org.apache.polaris.persistence.nosql.api.obj.ObjRef generateObjId(org.apache.polaris.persistence.nosql.api.obj.ObjType type)
      Specified by:
      generateObjId in interface org.apache.polaris.persistence.nosql.api.Persistence
    • createReferencesSilent

      public void createReferencesSilent(Set<String> referenceNames)
      Specified by:
      createReferencesSilent in interface org.apache.polaris.persistence.nosql.api.Persistence
    • createReference

      @Nonnull public org.apache.polaris.persistence.nosql.api.ref.Reference createReference(@Nonnull String name, @Nonnull Optional<org.apache.polaris.persistence.nosql.api.obj.ObjRef> pointer)
      Specified by:
      createReference in interface org.apache.polaris.persistence.nosql.api.Persistence
    • updateReferencePointer

      @Nonnull public Optional<org.apache.polaris.persistence.nosql.api.ref.Reference> updateReferencePointer(@Nonnull org.apache.polaris.persistence.nosql.api.ref.Reference reference, @Nonnull org.apache.polaris.persistence.nosql.api.obj.ObjRef newPointer)
      Specified by:
      updateReferencePointer in interface org.apache.polaris.persistence.nosql.api.Persistence
    • fetchReference

      @Nonnull public org.apache.polaris.persistence.nosql.api.ref.Reference fetchReference(@Nonnull String name)
      Specified by:
      fetchReference in interface org.apache.polaris.persistence.nosql.api.Persistence
    • getImmediate

      @Nullable public <T extends org.apache.polaris.persistence.nosql.api.obj.Obj> T getImmediate(@Nonnull org.apache.polaris.persistence.nosql.api.obj.ObjRef id, @Nonnull Class<T> clazz)
      Specified by:
      getImmediate in interface org.apache.polaris.persistence.nosql.api.Persistence
    • fetch

      @Nullable public <T extends org.apache.polaris.persistence.nosql.api.obj.Obj> T fetch(@Nonnull org.apache.polaris.persistence.nosql.api.obj.ObjRef id, @Nonnull Class<T> clazz)
      Specified by:
      fetch in interface org.apache.polaris.persistence.nosql.api.Persistence
    • fetchMany

      @Nonnull public <T extends org.apache.polaris.persistence.nosql.api.obj.Obj> T[] fetchMany(@Nonnull Class<T> clazz, @Nonnull org.apache.polaris.persistence.nosql.api.obj.ObjRef... ids)
      Specified by:
      fetchMany in interface org.apache.polaris.persistence.nosql.api.Persistence
    • write

      @Nonnull public <T extends org.apache.polaris.persistence.nosql.api.obj.Obj> T write(@Nonnull T obj, @Nonnull Class<T> clazz)
      Specified by:
      write in interface org.apache.polaris.persistence.nosql.api.Persistence
    • writeMany

      @Nonnull public <T extends org.apache.polaris.persistence.nosql.api.obj.Obj> T[] writeMany(@Nonnull Class<T> clazz, @Nonnull T... objs)
      Specified by:
      writeMany in interface org.apache.polaris.persistence.nosql.api.Persistence
    • delete

      public void delete(@Nonnull org.apache.polaris.persistence.nosql.api.obj.ObjRef id)
      Specified by:
      delete in interface org.apache.polaris.persistence.nosql.api.Persistence
    • deleteMany

      public void deleteMany(@Nonnull org.apache.polaris.persistence.nosql.api.obj.ObjRef... ids)
      Specified by:
      deleteMany in interface org.apache.polaris.persistence.nosql.api.Persistence
    • conditionalInsert

      @Nullable public <T extends org.apache.polaris.persistence.nosql.api.obj.Obj> T conditionalInsert(@Nonnull T obj, @Nonnull Class<T> clazz)
      Specified by:
      conditionalInsert in interface org.apache.polaris.persistence.nosql.api.Persistence
    • conditionalUpdate

      @Nullable public <T extends org.apache.polaris.persistence.nosql.api.obj.Obj> T conditionalUpdate(@Nonnull T expected, @Nonnull T update, @Nonnull Class<T> clazz)
      Specified by:
      conditionalUpdate in interface org.apache.polaris.persistence.nosql.api.Persistence
    • conditionalDelete

      public <T extends org.apache.polaris.persistence.nosql.api.obj.Obj> boolean conditionalDelete(@Nonnull T expected, Class<T> clazz)
      Specified by:
      conditionalDelete in interface org.apache.polaris.persistence.nosql.api.Persistence
    • commits

      public org.apache.polaris.persistence.nosql.api.commit.Commits commits()
      Specified by:
      commits in interface org.apache.polaris.persistence.nosql.api.Persistence
    • createCommitter

      public <REF_OBJ extends org.apache.polaris.persistence.nosql.api.obj.BaseCommitObj, RESULT> org.apache.polaris.persistence.nosql.api.commit.Committer<REF_OBJ,RESULT> createCommitter(@Nonnull String refName, @Nonnull Class<REF_OBJ> referencedObjType, @Nonnull Class<RESULT> resultType)
      Specified by:
      createCommitter in interface org.apache.polaris.persistence.nosql.api.Persistence
    • buildReadIndex

      public <V> org.apache.polaris.persistence.nosql.api.index.Index<V> buildReadIndex(@Nullable org.apache.polaris.persistence.nosql.api.index.IndexContainer<V> indexContainer, @Nonnull org.apache.polaris.persistence.nosql.api.index.IndexValueSerializer<V> indexValueSerializer)
      Specified by:
      buildReadIndex in interface org.apache.polaris.persistence.nosql.api.Persistence
    • buildWriteIndex

      public <V> org.apache.polaris.persistence.nosql.api.index.UpdatableIndex<V> buildWriteIndex(@Nullable org.apache.polaris.persistence.nosql.api.index.IndexContainer<V> indexContainer, @Nonnull org.apache.polaris.persistence.nosql.api.index.IndexValueSerializer<V> indexValueSerializer)
      Specified by:
      buildWriteIndex in interface org.apache.polaris.persistence.nosql.api.Persistence
    • deserialize

      public static <T> T deserialize(byte[] binary, @Nonnull Class<T> clazz)
    • deserialize

      public static <T> T deserialize(ByteBuffer binary, @Nonnull Class<T> clazz)
      Deserialize a byte array into an object of the given type, consumes the ByteBuffer.
    • serialize

      public static byte[] serialize(Object o)
    • serializeObj

      public static byte[] serializeObj(org.apache.polaris.persistence.nosql.api.obj.Obj o)
    • deserializeObj

      public static <T> T deserializeObj(String type, long id, int partNum, InputStream in, String versionToken, long createdAtMicros, @Nonnull Class<T> clazz) throws IOException
      Throws:
      IOException
    • toString

      public String toString()
      Overrides:
      toString in class Object