mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-20 11:32:19 +00:00
refactor(replication): route app storage through ecstore (#4251)
This commit is contained in:
@@ -43,18 +43,26 @@ mod replication_versioning_boundary;
|
||||
mod runtime_boundary;
|
||||
|
||||
pub use datatypes::ResyncStatusType;
|
||||
pub use replication_config_boundary::{ObjectOpts, ReplicationConfigurationExt};
|
||||
pub use replication_config_boundary::{
|
||||
ObjectOpts, ReplicationConfigurationExt, ReplicationTargetValidationError, replication_target_arns,
|
||||
should_remove_replication_target, validate_replication_config_target_arns,
|
||||
};
|
||||
#[cfg(test)]
|
||||
pub(crate) use replication_filemeta_boundary::ReplicateTargetDecision;
|
||||
pub(crate) use replication_filemeta_boundary::{
|
||||
ReplicateDecision, ReplicationState, replication_statuses_map, version_purge_statuses_map,
|
||||
pub(crate) use replication_filemeta_boundary::version_purge_statuses_map;
|
||||
pub use replication_filemeta_boundary::{
|
||||
REPLICATE_INCOMING_DELETE, ReplicateDecision, ReplicateObjectInfo, ReplicationState, ReplicationStatusType, ReplicationType,
|
||||
VersionPurgeStatusType, replication_statuses_map,
|
||||
};
|
||||
pub use replication_filemeta_boundary::{ReplicateObjectInfo, ReplicationStatusType, ReplicationType, VersionPurgeStatusType};
|
||||
pub(crate) use replication_lifecycle_bridge::{ReplicationLifecycleBridge, ReplicationLifecycleConfig};
|
||||
pub(crate) use replication_migration_bridge::ReplicationMigrationBridge;
|
||||
pub use replication_object_bridge::ReplicationObjectBridge;
|
||||
pub use replication_object_config::ReplicationConfig;
|
||||
pub use replication_object_decision_boundary::MustReplicateOptions;
|
||||
pub use replication_object_decision_boundary::{
|
||||
MustReplicateOptions, ReplicationDeleteScheduleInput, ReplicationDeleteStateSource, delete_replication_state_from_config,
|
||||
delete_replication_version_id, should_schedule_delete_replication, should_use_existing_delete_replication_info,
|
||||
should_use_existing_delete_replication_source,
|
||||
};
|
||||
pub use replication_pool::{
|
||||
DynReplicationPool, ReplicationPoolTrait, get_global_replication_pool, get_global_replication_stats,
|
||||
init_background_replication,
|
||||
|
||||
@@ -12,4 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
pub use rustfs_replication::{ObjectOpts, ReplicationConfigurationExt};
|
||||
pub use rustfs_replication::{
|
||||
ObjectOpts, ReplicationConfigurationExt, ReplicationTargetValidationError, replication_target_arns,
|
||||
should_remove_replication_target, validate_replication_config_target_arns,
|
||||
};
|
||||
|
||||
@@ -14,9 +14,11 @@
|
||||
|
||||
pub(crate) use rustfs_replication::{MrfOpKind, MrfReplicateEntry};
|
||||
pub(crate) use rustfs_replication::{
|
||||
REPLICATE_EXISTING, REPLICATE_EXISTING_DELETE, REPLICATE_HEAL_DELETE, REPLICATE_INCOMING_DELETE, ReplicateDecision,
|
||||
ReplicateTargetDecision, ReplicatedInfos, ReplicatedTargetInfo, ReplicationAction, ReplicationState,
|
||||
ReplicationWorkerOperation, ResyncDecision, get_replication_state, parse_replicate_decision, replication_statuses_map,
|
||||
target_reset_header, version_purge_statuses_map,
|
||||
REPLICATE_EXISTING, REPLICATE_EXISTING_DELETE, REPLICATE_HEAL_DELETE, ReplicateTargetDecision, ReplicatedInfos,
|
||||
ReplicatedTargetInfo, ReplicationAction, ReplicationWorkerOperation, ResyncDecision, get_replication_state,
|
||||
parse_replicate_decision, target_reset_header, version_purge_statuses_map,
|
||||
};
|
||||
pub use rustfs_replication::{
|
||||
REPLICATE_INCOMING_DELETE, ReplicateDecision, ReplicateObjectInfo, ReplicationState, ReplicationStatusType, ReplicationType,
|
||||
VersionPurgeStatusType, replication_statuses_map,
|
||||
};
|
||||
pub use rustfs_replication::{ReplicateObjectInfo, ReplicationStatusType, ReplicationType, VersionPurgeStatusType};
|
||||
|
||||
@@ -12,7 +12,11 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
pub use rustfs_replication::MustReplicateOptions;
|
||||
pub use rustfs_replication::{
|
||||
MustReplicateOptions, ReplicationDeleteScheduleInput, ReplicationDeleteStateSource, delete_replication_state_from_config,
|
||||
delete_replication_version_id, should_schedule_delete_replication, should_use_existing_delete_replication_info,
|
||||
should_use_existing_delete_replication_source,
|
||||
};
|
||||
pub(crate) use rustfs_replication::{
|
||||
ReplicationDeleteSource, ReplicationMultipartPartInput, ReplicationResyncTargetObject,
|
||||
delete_replication_missing_source_decision, delete_replication_object_opts, heal_uses_delete_replication_path,
|
||||
|
||||
@@ -16,8 +16,12 @@ mod storage_api;
|
||||
|
||||
use s3s::dto::ReplicationConfiguration;
|
||||
use storage_api::replication_compat::{
|
||||
BucketStats, DeletedObjectReplicationInfo, DynReplicationPool, ObjectOpts, ReplicationConfigurationExt,
|
||||
ReplicationObjectBridge, ReplicationStats, ResyncStatusType,
|
||||
BucketStats, DeletedObjectReplicationInfo, DynReplicationPool, ObjectOpts, REPLICATE_INCOMING_DELETE, ReplicateDecision,
|
||||
ReplicationConfigurationExt, ReplicationDeleteScheduleInput, ReplicationDeleteStateSource, ReplicationObjectBridge,
|
||||
ReplicationState, ReplicationStats, ReplicationTargetValidationError, ResyncStatusType, delete_replication_state_from_config,
|
||||
delete_replication_version_id, replication_statuses_map, replication_target_arns, should_remove_replication_target,
|
||||
should_schedule_delete_replication, should_use_existing_delete_replication_info,
|
||||
should_use_existing_delete_replication_source, validate_replication_config_target_arns,
|
||||
};
|
||||
|
||||
fn type_name<T>() -> &'static str {
|
||||
@@ -55,3 +59,43 @@ fn replication_facade_exports_runtime_and_dto_types() {
|
||||
assert!(type_name::<ReplicationObjectBridge>().contains("ReplicationObjectBridge"));
|
||||
assert!(type_name_unsized::<DynReplicationPool>().contains("ReplicationPoolTrait"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn replication_facade_exports_app_storage_helper_contracts() {
|
||||
let config = ReplicationConfiguration::default();
|
||||
let target_arns = replication_target_arns(&config);
|
||||
assert!(target_arns.is_empty());
|
||||
|
||||
let source = ReplicationDeleteStateSource {
|
||||
name: String::new(),
|
||||
user_tags: String::new(),
|
||||
version_id: None,
|
||||
delete_marker: false,
|
||||
replica: false,
|
||||
};
|
||||
assert!(delete_replication_state_from_config(&config, &source).is_none());
|
||||
assert!(replication_statuses_map("").is_empty());
|
||||
|
||||
let source_replication_status = Default::default();
|
||||
let source_version_purge_status = Default::default();
|
||||
let input = ReplicationDeleteScheduleInput {
|
||||
replication_request: false,
|
||||
version_id_requested: false,
|
||||
source_delete_marker: false,
|
||||
source_replication_status: &source_replication_status,
|
||||
source_version_purge_status: &source_version_purge_status,
|
||||
deleted_delete_marker_version: false,
|
||||
};
|
||||
assert!(!should_schedule_delete_replication(input));
|
||||
|
||||
assert!(delete_replication_version_id(false, None, false).is_none());
|
||||
assert!(!should_remove_replication_target("arn", false, &target_arns));
|
||||
assert!(!should_use_existing_delete_replication_info(false, false));
|
||||
assert!(!should_use_existing_delete_replication_source(false, false, false));
|
||||
assert!(validate_replication_config_target_arns(std::iter::empty(), &config).is_ok());
|
||||
|
||||
assert_eq!(REPLICATE_INCOMING_DELETE, "replicate:incoming:delete");
|
||||
assert!(type_name::<ReplicateDecision>().contains("ReplicateDecision"));
|
||||
assert!(type_name::<ReplicationState>().contains("ReplicationState"));
|
||||
assert!(type_name::<ReplicationTargetValidationError>().contains("ReplicationTargetValidationError"));
|
||||
}
|
||||
|
||||
@@ -22,8 +22,12 @@ pub(crate) mod contract_compat {
|
||||
|
||||
pub(crate) mod replication_compat {
|
||||
pub(crate) use rustfs_ecstore::api::bucket::replication::{
|
||||
BucketStats, DeletedObjectReplicationInfo, DynReplicationPool, ObjectOpts, ReplicationConfigurationExt,
|
||||
ReplicationObjectBridge, ReplicationStats, ResyncStatusType,
|
||||
BucketStats, DeletedObjectReplicationInfo, DynReplicationPool, ObjectOpts, REPLICATE_INCOMING_DELETE, ReplicateDecision,
|
||||
ReplicationConfigurationExt, ReplicationDeleteScheduleInput, ReplicationDeleteStateSource, ReplicationObjectBridge,
|
||||
ReplicationState, ReplicationStats, ReplicationTargetValidationError, ResyncStatusType,
|
||||
delete_replication_state_from_config, delete_replication_version_id, replication_statuses_map, replication_target_arns,
|
||||
should_remove_replication_target, should_schedule_delete_replication, should_use_existing_delete_replication_info,
|
||||
should_use_existing_delete_replication_source, validate_replication_config_target_arns,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,6 @@ time = { workspace = true }
|
||||
chrono = { workspace = true }
|
||||
rmp-serde = { workspace = true }
|
||||
rustfs-filemeta = { workspace = true }
|
||||
rustfs-replication = { workspace = true }
|
||||
tokio-util = { workspace = true }
|
||||
rustfs-ecstore = { workspace = true }
|
||||
rustfs-storage-api = { workspace = true }
|
||||
|
||||
Reference in New Issue
Block a user