mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-16 18:08:21 +00:00
fix(select): pin object snapshot for query lifetime (#5835)
This commit is contained in:
@@ -22,35 +22,51 @@ use rustfs_ecstore::api::error::{
|
||||
};
|
||||
#[cfg(test)]
|
||||
pub(crate) use rustfs_ecstore::api::object::PutObjReader as SelectPutObjReader;
|
||||
pub use rustfs_ecstore::api::object::SelectObjectSnapshot;
|
||||
pub(crate) use rustfs_ecstore::api::object::{
|
||||
PrepareSelectObjectSnapshotError, SelectObjectSnapshotReadError, SnapshotConsistencyError,
|
||||
};
|
||||
use rustfs_ecstore::api::runtime::object_store_handle as resolve_select_object_store_handle_from_backend;
|
||||
pub(crate) use rustfs_ecstore::api::set_disk::DEFAULT_READ_BUFFER_SIZE as SELECT_DEFAULT_READ_BUFFER_SIZE;
|
||||
pub(crate) use rustfs_ecstore::api::storage::ECStore as SelectStore;
|
||||
use rustfs_storage_api as storage_contracts;
|
||||
|
||||
#[cfg(test)]
|
||||
static SELECT_TEST_OBJECT_STORE: std::sync::OnceLock<Arc<SelectStore>> = std::sync::OnceLock::new();
|
||||
|
||||
pub(crate) mod object_store {
|
||||
pub(crate) use super::storage_contracts::{HTTPRangeSpec, ObjectIO, ObjectOperations};
|
||||
pub(crate) use super::storage_contracts::HTTPRangeSpec;
|
||||
#[cfg(test)]
|
||||
pub(crate) use super::storage_contracts::ObjectIO;
|
||||
}
|
||||
|
||||
pub(crate) mod crate_boundary {
|
||||
pub(crate) use super::{
|
||||
SELECT_DEFAULT_READ_BUFFER_SIZE, SelectGetObjectReader, SelectObjectInfo, SelectObjectOptions, SelectStorageError,
|
||||
SelectStore, resolve_select_object_store_handle, select_is_err_bucket_not_found, select_is_err_object_not_found,
|
||||
PrepareSelectObjectSnapshotError, SELECT_DEFAULT_READ_BUFFER_SIZE, SelectGetObjectReader, SelectObjectOptions,
|
||||
SelectObjectSnapshotReadError, SelectStorageError, SelectStore, SnapshotConsistencyError,
|
||||
resolve_select_object_store_handle, select_is_err_bucket_not_found, select_is_err_object_not_found,
|
||||
select_is_err_version_not_found,
|
||||
};
|
||||
}
|
||||
|
||||
pub(crate) type SelectGetObjectReader = <SelectStore as storage_contracts::ObjectIO>::GetObjectReader;
|
||||
pub(crate) type SelectObjectInfo = <SelectStore as storage_contracts::ObjectOperations>::ObjectInfo;
|
||||
pub(crate) type SelectObjectOptions = <SelectStore as storage_contracts::ObjectOperations>::ObjectOptions;
|
||||
|
||||
#[cfg(test)]
|
||||
pub(crate) async fn select_test_ecstore_env() -> &'static rustfs_test_utils::TestECStoreEnv {
|
||||
static ENV: tokio::sync::OnceCell<rustfs_test_utils::TestECStoreEnv> = tokio::sync::OnceCell::const_new();
|
||||
ENV.get_or_init(|| async { rustfs_test_utils::TestECStoreEnv::builder().build().await })
|
||||
.await
|
||||
let env = ENV
|
||||
.get_or_init(|| async { rustfs_test_utils::TestECStoreEnv::builder().build().await })
|
||||
.await;
|
||||
let _ = SELECT_TEST_OBJECT_STORE.set(Arc::clone(&env.ecstore));
|
||||
env
|
||||
}
|
||||
|
||||
pub(crate) fn resolve_select_object_store_handle() -> Option<Arc<SelectStore>> {
|
||||
#[cfg(test)]
|
||||
if let Some(store) = SELECT_TEST_OBJECT_STORE.get() {
|
||||
return Some(Arc::clone(store));
|
||||
}
|
||||
resolve_select_object_store_handle_from_backend()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user