pub struct S3ObjectStore {
client: Client,
bucket: String,
metrics: Arc<ObjectStoreMetrics>,
config: Arc<ObjectStoreConfig>,
}
Expand description
Object store with S3 backend
The full path to a file on S3 would be s3://bucket/<data_directory>/prefix/file
Fields§
§client: Client
§bucket: String
§metrics: Arc<ObjectStoreMetrics>
For S3 specific metrics.
config: Arc<ObjectStoreConfig>
Implementations§
source§impl S3ObjectStore
impl S3ObjectStore
pub fn new_http_client(config: &ObjectStoreConfig) -> impl HttpClient
sourcepub async fn new_with_config(
bucket: String,
metrics: Arc<ObjectStoreMetrics>,
config: Arc<ObjectStoreConfig>,
) -> Self
pub async fn new_with_config( bucket: String, metrics: Arc<ObjectStoreMetrics>, config: Arc<ObjectStoreConfig>, ) -> Self
Creates an S3 object store from environment variable.
See AWS Docs on how to provide credentials and region from env variable. If you are running compute-node on EC2, no configuration is required.
sourcepub async fn new_minio_engine(
server: &str,
metrics: Arc<ObjectStoreMetrics>,
object_store_config: Arc<ObjectStoreConfig>,
) -> Self
pub async fn new_minio_engine( server: &str, metrics: Arc<ObjectStoreMetrics>, object_store_config: Arc<ObjectStoreConfig>, ) -> Self
Creates a minio client. The server should be like minio://key:secret@address:port/bucket
.
sourcefn obj_store_request(
&self,
path: &str,
range: impl ObjectRangeBounds,
) -> GetObjectFluentBuilder
fn obj_store_request( &self, path: &str, range: impl ObjectRangeBounds, ) -> GetObjectFluentBuilder
Generates an HTTP GET request to download the object specified in path
. If given,
start_pos
and end_pos
specify the first and last byte to download, respectively. Both
are inclusive and 0-based. For example, set start_pos = 0
and end_pos = 7
to download
the first 8 bytes. If neither is given, the request will download the whole object.
sourcepub async fn configure_bucket_lifecycle(&self, data_directory: &str) -> bool
pub async fn configure_bucket_lifecycle(&self, data_directory: &str) -> bool
Note: This configuration only works for S3. MinIO automatically enables this feature, and it
is not configurable with S3 sdk. To verify that this feature is enabled, use mc admin config get <alias> api
.
Reference:
Trait Implementations§
source§impl Clone for S3ObjectStore
impl Clone for S3ObjectStore
source§fn clone(&self) -> S3ObjectStore
fn clone(&self) -> S3ObjectStore
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl ObjectStore for S3ObjectStore
impl ObjectStore for S3ObjectStore
source§fn read<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
range: impl 'async_trait + ObjectRangeBounds,
) -> Pin<Box<dyn Future<Output = ObjectResult<Bytes>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
range: impl 'async_trait + ObjectRangeBounds,
) -> Pin<Box<dyn Future<Output = ObjectResult<Bytes>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Amazon S3 doesn’t support retrieving multiple ranges of data per GET request.
source§fn streaming_read<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
range: Range<usize>,
) -> Pin<Box<dyn Future<Output = ObjectResult<ObjectDataStream>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn streaming_read<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
range: Range<usize>,
) -> Pin<Box<dyn Future<Output = ObjectResult<ObjectDataStream>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Returns a stream reading the object specified in path
. If given, the stream starts at the
byte with index start_pos
(0-based). As far as possible, the stream only loads the amount
of data into memory that is read from the stream.
source§fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = ObjectResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = ObjectResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Permanently deletes the whole object. According to Amazon S3, this will simply return Ok if the object does not exist.
source§fn delete_objects<'life0, 'life1, 'async_trait>(
&'life0 self,
paths: &'life1 [String],
) -> Pin<Box<dyn Future<Output = ObjectResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_objects<'life0, 'life1, 'async_trait>(
&'life0 self,
paths: &'life1 [String],
) -> Pin<Box<dyn Future<Output = ObjectResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Deletes the objects with the given paths permanently from the storage. If an object specified in the request is not found, it will be considered as successfully deleted.
Uses AWS’ DeleteObjects API. See AWS Docs for more details.
type StreamingUploader = S3StreamingUploader
source§fn get_object_prefix(
&self,
obj_id: u64,
_use_new_object_prefix_strategy: bool,
) -> String
fn get_object_prefix( &self, obj_id: u64, _use_new_object_prefix_strategy: bool, ) -> String
devise_object_prefix
.source§fn upload<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
obj: Bytes,
) -> Pin<Box<dyn Future<Output = ObjectResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn upload<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
obj: Bytes,
) -> Pin<Box<dyn Future<Output = ObjectResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
ObjectStore
.fn streaming_upload<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = ObjectResult<Self::StreamingUploader>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
source§fn metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = ObjectResult<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = ObjectResult<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 str,
start_after: Option<String>,
limit: Option<usize>,
) -> Pin<Box<dyn Future<Output = ObjectResult<ObjectMetadataIter>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn store_media_type(&self) -> &'static str
fn monitored(
self,
metrics: Arc<ObjectStoreMetrics>,
config: Arc<ObjectStoreConfig>,
) -> MonitoredObjectStore<Self>where
Self: Sized,
fn support_streaming_upload(&self) -> bool
Auto Trait Implementations§
impl Freeze for S3ObjectStore
impl !RefUnwindSafe for S3ObjectStore
impl Send for S3ObjectStore
impl Sync for S3ObjectStore
impl Unpin for S3ObjectStore
impl !UnwindSafe for S3ObjectStore
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
type Err = Infallible
fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>
source§impl<M> MetricVecRelabelExt for M
impl<M> MetricVecRelabelExt for M
source§fn relabel(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level
.source§fn relabel_n(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
relabel_num: usize,
) -> RelabeledMetricVec<M>
fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n
.source§fn relabel_debug_1(
self,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n
with metric_level
set to
MetricLevel::Debug
and relabel_num
set to 1.