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§
Sourcefn 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,
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§
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,
Sourcefn 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<'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
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,
Sourcefn 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<'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.
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,
Sourcefn 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 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