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<Path, 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_latest_version<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        base_path: &'life1 Path,
        object_store: &'life2 ObjectStore,
    ) -> Pin<Box<dyn Future<Output = Result<Path, Error>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait { ... }
    fn resolve_latest_version_id<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        base_path: &'life1 Path,
        object_store: &'life2 ObjectStore,
    ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait { ... }
    fn resolve_version<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        base_path: &'life1 Path,
        version: u64,
        object_store: &'life2 dyn OSObjectStore,
    ) -> Pin<Box<dyn Future<Output = Result<Path, Error>> + 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_manifests<'a, 'life0, 'life1, 'async_trait>(
        &'life0 self,
        base_path: &'life1 Path,
        object_store: &'a dyn OSObjectStore,
    ) -> Pin<Box<dyn Future<Output = Result<BoxStream<'a, Result<Path>>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'a: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    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<Path, 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_latest_version<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, base_path: &'life1 Path, object_store: &'life2 ObjectStore, ) -> Pin<Box<dyn Future<Output = Result<Path, Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Get the path to the latest version manifest of a dataset at the base_path

Source

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

Source

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

Get the path to a specific versioned manifest of a dataset at the base_path

The version must already exist.

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_manifests<'a, 'life0, 'life1, 'async_trait>( &'life0 self, base_path: &'life1 Path, object_store: &'a dyn OSObjectStore, ) -> Pin<Box<dyn Future<Output = Result<BoxStream<'a, Result<Path>>>> + Send + 'async_trait>>
where Self: 'async_trait, 'a: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

List manifests that are available for a dataset at the base_path

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<Path, CommitError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Implementors§