Skip to content

Commit 6f0b623

Browse files
correct logic to delete node from cluster
1 parent 48b121c commit 6f0b623

File tree

1 file changed

+22
-16
lines changed
  • src/handlers/http/cluster

1 file changed

+22
-16
lines changed

src/handlers/http/cluster/mod.rs

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ use crate::HTTP_CLIENT;
5454
use super::base_path_without_preceding_slash;
5555
use super::ingest::PostError;
5656
use super::logstream::error::StreamError;
57-
use super::modal::{IndexerMetadata, IngestorMetadata, Metadata, NodeMetadata, QuerierMetadata};
57+
use super::modal::{
58+
IndexerMetadata, IngestorMetadata, Metadata, NodeMetadata, NodeType, QuerierMetadata,
59+
};
5860
use super::rbac::RBACError;
5961
use super::role::RoleError;
6062

@@ -718,37 +720,41 @@ pub async fn remove_node(node_url: Path<String>) -> Result<impl Responder, PostE
718720

719721
// Delete ingestor metadata
720722
let removed_ingestor =
721-
remove_node_metadata::<IngestorMetadata>(&object_store, &domain_name).await?;
723+
remove_node_metadata::<IngestorMetadata>(&object_store, &domain_name, NodeType::Ingestor)
724+
.await?;
722725

723726
// Delete indexer metadata
724727
let removed_indexer =
725-
remove_node_metadata::<IndexerMetadata>(&object_store, &domain_name).await?;
728+
remove_node_metadata::<IndexerMetadata>(&object_store, &domain_name, NodeType::Indexer)
729+
.await?;
726730

727731
// Delete querier metadata
728732
let removed_querier =
729-
remove_node_metadata::<QuerierMetadata>(&object_store, &domain_name).await?;
730-
731-
let msg = if removed_ingestor || removed_indexer || removed_querier {
732-
format!("node {} removed successfully", domain_name)
733-
} else {
734-
format!("node {} is not found", domain_name)
735-
};
736-
737-
info!("{}", &msg);
738-
Ok((msg, StatusCode::OK))
733+
remove_node_metadata::<QuerierMetadata>(&object_store, &domain_name, NodeType::Querier)
734+
.await?;
735+
736+
if removed_ingestor || removed_indexer || removed_querier {
737+
return Ok((
738+
format!("node {} removed successfully", domain_name),
739+
StatusCode::OK,
740+
));
741+
}
742+
Err(PostError::Invalid(anyhow::anyhow!(
743+
"node {} not found",
744+
domain_name
745+
)))
739746
}
740747

741748
// Helper function to remove a specific type of node metadata
742749
async fn remove_node_metadata<T: Metadata + DeserializeOwned + Default>(
743750
object_store: &Arc<dyn ObjectStorage>,
744751
domain_name: &str,
752+
node_type: NodeType,
745753
) -> Result<bool, PostError> {
746-
let node_type = T::default().node_type().to_string();
747-
748754
let metadatas = object_store
749755
.get_objects(
750756
Some(&RelativePathBuf::from(PARSEABLE_ROOT_DIRECTORY)),
751-
Box::new(move |file_name| file_name.starts_with(&node_type)),
757+
Box::new(move |file_name| file_name.starts_with(&node_type.to_string())),
752758
)
753759
.await?;
754760

0 commit comments

Comments
 (0)