mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-30 08:49:26 +00:00
This reverts commit 4f73760a45.
This commit is contained in:
@@ -494,96 +494,6 @@ impl FileInfo {
|
||||
ReplicationStatusType::Empty
|
||||
}
|
||||
}
|
||||
/// Get the append state for this FileInfo, with migration compatibility
|
||||
pub fn get_append_state(&self) -> crate::append::AppendState {
|
||||
use crate::append::{AppendState, AppendStateKind, get_append_state};
|
||||
|
||||
// Try to load from metadata first
|
||||
if let Ok(Some(state)) = get_append_state(&self.metadata) {
|
||||
return state;
|
||||
}
|
||||
|
||||
// Migration compatibility: determine state based on existing data
|
||||
if self.inline_data() {
|
||||
// Has inline data, treat as Inline state
|
||||
AppendState {
|
||||
state: AppendStateKind::Inline,
|
||||
epoch: 0,
|
||||
committed_length: self.size,
|
||||
pending_segments: Vec::new(),
|
||||
}
|
||||
} else {
|
||||
// No inline data, treat as SegmentedSealed (traditional object)
|
||||
AppendState {
|
||||
state: AppendStateKind::SegmentedSealed,
|
||||
epoch: 0,
|
||||
committed_length: self.size,
|
||||
pending_segments: Vec::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Set the append state for this FileInfo
|
||||
pub fn set_append_state(&mut self, state: &crate::append::AppendState) -> crate::error::Result<()> {
|
||||
crate::append::set_append_state(&mut self.metadata, state)
|
||||
}
|
||||
|
||||
/// Check if this object supports append operations
|
||||
pub fn is_appendable(&self) -> bool {
|
||||
use crate::append::AppendStateKind;
|
||||
match self.get_append_state().state {
|
||||
AppendStateKind::Disabled => false,
|
||||
AppendStateKind::Inline | AppendStateKind::InlinePendingSpill | AppendStateKind::SegmentedActive => true,
|
||||
AppendStateKind::SegmentedSealed => false,
|
||||
}
|
||||
}
|
||||
|
||||
/// Check if this object has pending append operations
|
||||
pub fn has_pending_appends(&self) -> bool {
|
||||
use crate::append::AppendStateKind;
|
||||
matches!(
|
||||
self.get_append_state().state,
|
||||
AppendStateKind::InlinePendingSpill | AppendStateKind::SegmentedActive
|
||||
)
|
||||
}
|
||||
|
||||
/// Complete all pending append operations and seal the object
|
||||
pub fn complete_append(&mut self) -> crate::error::Result<()> {
|
||||
let mut append_state = self.get_append_state();
|
||||
crate::append::complete_append_operation(&mut append_state)?;
|
||||
self.set_append_state(&append_state)?;
|
||||
|
||||
// Update file size to reflect completed operation
|
||||
if append_state.state == crate::append::AppendStateKind::SegmentedSealed {
|
||||
self.size = append_state.committed_length;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Abort all pending append operations and seal the object
|
||||
pub fn abort_append(&mut self) -> crate::error::Result<()> {
|
||||
let mut append_state = self.get_append_state();
|
||||
crate::append::abort_append_operation(&mut append_state)?;
|
||||
self.set_append_state(&append_state)?;
|
||||
|
||||
// Update file size to only include committed data
|
||||
if append_state.state == crate::append::AppendStateKind::SegmentedSealed {
|
||||
self.size = append_state.committed_length;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Check if append operations can be completed for this object
|
||||
pub fn can_complete_append(&self) -> bool {
|
||||
crate::append::can_complete_append(&self.get_append_state())
|
||||
}
|
||||
|
||||
/// Check if append operations can be aborted for this object
|
||||
pub fn can_abort_append(&self) -> bool {
|
||||
crate::append::can_abort_append(&self.get_append_state())
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
|
||||
|
||||
Reference in New Issue
Block a user