|
18 | 18 |
|
19 | 19 | pub mod utils; |
20 | 20 |
|
| 21 | +use crate::handlers::http::cluster::utils::{ |
| 22 | + check_liveness, ingester_meta_filename, to_url_string, |
| 23 | +}; |
21 | 24 | use crate::handlers::http::ingest::PostError; |
22 | 25 | use crate::handlers::http::logstream::error::StreamError; |
23 | 26 | use crate::option::CONFIG; |
24 | 27 |
|
25 | 28 | use crate::metrics::prom_utils::Metrics; |
26 | 29 | use actix_web::http::header; |
27 | | -use actix_web::Responder; |
| 30 | +use actix_web::{HttpRequest, Responder}; |
28 | 31 | use http::StatusCode; |
29 | 32 | use itertools::Itertools; |
30 | 33 | use relative_path::RelativePathBuf; |
@@ -345,3 +348,27 @@ pub async fn get_ingester_info() -> anyhow::Result<IngesterMetadataArr> { |
345 | 348 |
|
346 | 349 | Ok(arr) |
347 | 350 | } |
| 351 | + |
| 352 | +pub async fn remove_ingester(req: HttpRequest) -> Result<impl Responder, PostError> { |
| 353 | + let domain_name: String = req.match_info().get("ingester").unwrap().parse().unwrap(); |
| 354 | + let domain_name = to_url_string(domain_name); |
| 355 | + |
| 356 | + if check_liveness(&domain_name).await { |
| 357 | + return Err(PostError::Invalid(anyhow::anyhow!("Ingester is Online"))); |
| 358 | + } |
| 359 | + |
| 360 | + let ingester_meta_filename = ingester_meta_filename(&domain_name); |
| 361 | + let object_store = CONFIG.storage().get_object_store(); |
| 362 | + let msg = match object_store |
| 363 | + .delete_ingester_meta(ingester_meta_filename) |
| 364 | + .await |
| 365 | + { |
| 366 | + Ok(_) => { |
| 367 | + format!("Ingester {} Removed", domain_name) |
| 368 | + } |
| 369 | + Err(err) => err.to_string(), |
| 370 | + }; |
| 371 | + |
| 372 | + log::error!("{}", &msg); |
| 373 | + Ok((msg, StatusCode::OK)) |
| 374 | +} |
0 commit comments