use std::fmt;
use std::time::Instant;
use quickwit_metastore::checkpoint::CheckpointDelta;
use quickwit_metastore::SplitMetadata;
#[derive(Clone)]
pub enum PublishOperation {
PublishNewSplit {
new_split: SplitMetadata,
checkpoint_delta: CheckpointDelta,
split_date_of_birth: Instant, },
ReplaceSplits {
new_splits: Vec<SplitMetadata>,
replaced_split_ids: Vec<String>,
},
}
impl fmt::Debug for PublishOperation {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Self::PublishNewSplit {
new_split: new_split_id,
checkpoint_delta,
split_date_of_birth: start_time,
} => f
.debug_struct("PublishNewSplit")
.field("new_split_id", &new_split_id.split_id())
.field("checkpoint_delta", checkpoint_delta)
.field("tts_in_secs", &start_time.elapsed().as_secs_f32())
.finish(),
Self::ReplaceSplits {
new_splits,
replaced_split_ids,
} => {
let new_split_ids: Vec<String> = new_splits
.iter()
.map(|split| split.split_id().to_string())
.collect();
f.debug_struct("ReplaceSplits")
.field("new_split_ids", &new_split_ids)
.field("replaced_split_ids", replaced_split_ids)
.finish()
}
}
}
}
impl PublishOperation {
pub fn extract_new_splits(self) -> Vec<SplitMetadata> {
match self {
PublishOperation::PublishNewSplit {
new_split: new_split_id,
..
} => vec![new_split_id],
PublishOperation::ReplaceSplits {
new_splits: new_split_ids,
..
} => new_split_ids,
}
}
}
#[derive(Clone, Debug)]
pub struct PublisherMessage {
pub index_id: String,
pub operation: PublishOperation,
}