Skip to main content

krabka_remote_storage/s3/
manager.rs

1//! The [`RemoteStorageManager`] impl that binds the copy, fetch, and delete
2//! modules to the KIP-405 SPI.
3//!
4//! A trait impl cannot be split across files, so this module holds the whole
5//! block and nothing else. Each method carries the tracing span for the
6//! operation and hands the work to the inherent method that implements it.
7
8use {
9    super::S3RemoteStorage,
10    crate::{
11        error::RemoteStorageError,
12        metadata::{CustomMetadata, RemoteLogSegmentMetadata},
13        storage_manager::{IndexType, LogSegmentData, RemoteStorageManager},
14    },
15};
16
17impl RemoteStorageManager for S3RemoteStorage {
18    #[krabka_macros::remote_operation]
19    fn copy_log_segment_data(
20        &self,
21        metadata: &RemoteLogSegmentMetadata,
22        data: &LogSegmentData,
23    ) -> Result<Option<CustomMetadata>, RemoteStorageError> {
24        self.copy_segment_objects(metadata, data)
25    }
26
27    #[krabka_macros::remote_operation]
28    fn fetch_log_segment(
29        &self,
30        metadata: &RemoteLogSegmentMetadata,
31        start_position: u32,
32        end_position: Option<u32>,
33    ) -> Result<Vec<u8>, RemoteStorageError> {
34        self.fetch_segment_range(metadata, start_position, end_position)
35    }
36
37    #[krabka_macros::remote_operation]
38    fn fetch_index(
39        &self,
40        metadata: &RemoteLogSegmentMetadata,
41        index_type: IndexType,
42    ) -> Result<Vec<u8>, RemoteStorageError> {
43        self.fetch_index_bytes(metadata, index_type)
44    }
45
46    #[krabka_macros::remote_operation]
47    fn delete_log_segment_data(
48        &self,
49        metadata: &RemoteLogSegmentMetadata,
50    ) -> Result<(), RemoteStorageError> {
51        self.delete_segment_objects(metadata)
52    }
53}