Trait CommitHandler

Source
pub trait CommitHandler:
    Debug
    + Send
    + Sync {
    // Required method
    fn commit<'life0, 'life1, 'life2, 'life3, 'async_trait>(
        &'life0 self,
        manifest: &'life1 mut Manifest,
        indices: Option<Vec<Index>>,
        base_path: &'life2 Path,
        object_store: &'life3 ObjectStore,
        manifest_writer: ManifestWriter,
        naming_scheme: ManifestNamingScheme,
    ) -> Pin<Box<dyn Future<Output = Result<ManifestLocation, CommitError>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait,
             'life3: 'async_trait;

    // Provided methods
    fn resolve_latest_location<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        base_path: &'life1 Path,
        object_store: &'life2 ObjectStore,
    ) -> Pin<Box<dyn Future<Output = Result<ManifestLocation>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait { ... }
    fn resolve_version_location<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        base_path: &'life1 Path,
        version: u64,
        object_store: &'life2 dyn OSObjectStore,
    ) -> Pin<Box<dyn Future<Output = Result<ManifestLocation>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait { ... }
    fn list_manifest_locations<'a>(
        &self,
        base_path: &Path,
        object_store: &'a ObjectStore,
        sorted_descending: bool,
    ) -> BoxStream<'a, Result<ManifestLocation>> { ... }
    fn delete<'life0, 'life1, 'async_trait>(
        &'life0 self,
        _base_path: &'life1 Path,
    ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
}
Expand description

Handle commits that prevent conflicting writes.

Commit implementations ensure that if there are multiple concurrent writers attempting to write the next version of a table, only one will win. In order to work, all writers must use the same commit handler type. This trait is also responsible for resolving where the manifests live.

Required Methods§

Source

fn commit<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, manifest: &'life1 mut Manifest, indices: Option<Vec<Index>>, base_path: &'life2 Path, object_store: &'life3 ObjectStore, manifest_writer: ManifestWriter, naming_scheme: ManifestNamingScheme, ) -> Pin<Box<dyn Future<Output = Result<ManifestLocation, CommitError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Commit a manifest.

This function should return an CommitError::CommitConflict if another transaction has already been committed to the path.

Provided Methods§

Source

fn resolve_latest_location<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, base_path: &'life1 Path, object_store: &'life2 ObjectStore, ) -> Pin<Box<dyn Future<Output = Result<ManifestLocation>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source

fn resolve_version_location<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, base_path: &'life1 Path, version: u64, object_store: &'life2 dyn OSObjectStore, ) -> Pin<Box<dyn Future<Output = Result<ManifestLocation>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source

fn list_manifest_locations<'a>( &self, base_path: &Path, object_store: &'a ObjectStore, sorted_descending: bool, ) -> BoxStream<'a, Result<ManifestLocation>>

If sorted_descending is true, the stream will yield manifests in descending order of version. When the object store has a lexicographically ordered list and the naming scheme is V2, this will use an optimized list operation. Otherwise, it will list all manifests and sort them in memory. When sorted_descending is false, the stream will yield manifests in arbitrary order.

Source

fn delete<'life0, 'life1, 'async_trait>( &'life0 self, _base_path: &'life1 Path, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Delete the recorded manifest information for a dataset at the base_path

Implementations on Foreign Types§

Source§

impl<T: CommitLock + Send + Sync> CommitHandler for Arc<T>

Source§

fn commit<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, manifest: &'life1 mut Manifest, indices: Option<Vec<Index>>, base_path: &'life2 Path, object_store: &'life3 ObjectStore, manifest_writer: ManifestWriter, naming_scheme: ManifestNamingScheme, ) -> Pin<Box<dyn Future<Output = Result<ManifestLocation, CommitError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Implementors§