mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-31 16:06:31 +00:00 
			
		
		
		
	Merge pull request #5512 from DanasFi/task_queue_metrics
Task queue metrics
This commit is contained in:
		| @@ -74,6 +74,8 @@ use crate::utils::clamp_to_page_size; | ||||
|  | ||||
| pub(crate) type BEI128 = I128<BE>; | ||||
|  | ||||
| const TASK_SCHEDULER_SIZE_THRESHOLD_PERCENT_INT: u64 = 40; | ||||
|  | ||||
| #[derive(Debug)] | ||||
| pub struct IndexSchedulerOptions { | ||||
|     /// The path to the version file of Meilisearch. | ||||
| @@ -425,6 +427,17 @@ impl IndexScheduler { | ||||
|         Ok(self.env.non_free_pages_size()?) | ||||
|     } | ||||
|  | ||||
|     /// Return the maximum possible database size | ||||
|     pub fn max_size(&self) -> Result<u64> { | ||||
|         Ok(self.env.info().map_size as u64) | ||||
|     } | ||||
|  | ||||
|     /// Return the max size of task allowed until the task queue stop receiving. | ||||
|     pub fn remaining_size_until_task_queue_stop(&self) -> Result<u64> { | ||||
|         Ok((self.env.info().map_size as u64 * TASK_SCHEDULER_SIZE_THRESHOLD_PERCENT_INT / 100) | ||||
|             .saturating_sub(self.used_size()?)) | ||||
|     } | ||||
|  | ||||
|     /// Return the index corresponding to the name. | ||||
|     /// | ||||
|     /// * If the index wasn't opened before, the index will be opened. | ||||
| @@ -627,7 +640,8 @@ impl IndexScheduler { | ||||
|     ) -> Result<Task> { | ||||
|         // if the task doesn't delete or cancel anything and 40% of the task queue is full, we must refuse to enqueue the incoming task | ||||
|         if !matches!(&kind, KindWithContent::TaskDeletion { tasks, .. } | KindWithContent::TaskCancelation { tasks, .. } if !tasks.is_empty()) | ||||
|             && (self.env.non_free_pages_size()? * 100) / self.env.info().map_size as u64 > 40 | ||||
|             && (self.env.non_free_pages_size()? * 100) / self.env.info().map_size as u64 | ||||
|                 > TASK_SCHEDULER_SIZE_THRESHOLD_PERCENT_INT | ||||
|         { | ||||
|             return Err(Error::NoSpaceLeftInTaskQueue); | ||||
|         } | ||||
|   | ||||
| @@ -68,4 +68,20 @@ lazy_static! { | ||||
|         "Meilisearch Task Queue Latency in Seconds", | ||||
|     ) | ||||
|     .expect("Can't create a metric"); | ||||
|     pub static ref MEILISEARCH_TASK_QUEUE_MAX_SIZE: IntGauge = register_int_gauge!(opts!( | ||||
|         "meilisearch_task_queue_max_size", | ||||
|         "Meilisearch Task Queue Max Size", | ||||
|     )) | ||||
|     .expect("Can't create a metric"); | ||||
|     pub static ref MEILISEARCH_TASK_QUEUE_USED_SIZE: IntGauge = register_int_gauge!(opts!( | ||||
|         "meilisearch_task_queue_used_size", | ||||
|         "Meilisearch Task Queue Used Size" | ||||
|     )) | ||||
|     .expect("Can't create a metric"); | ||||
|     pub static ref MEILISEARCH_TASK_QUEUE_SIZE_UNTIL_STOP_REGISTERING: IntGauge = | ||||
|         register_int_gauge!(opts!( | ||||
|             "meilisearch_task_queue_size_until_stop_registering", | ||||
|             "Meilisearch Task Queue Size Until Stop Registering", | ||||
|         )) | ||||
|         .expect("Can't create a metric"); | ||||
| } | ||||
|   | ||||
| @@ -169,6 +169,11 @@ pub async fn get_metrics( | ||||
|         .map(|task| (OffsetDateTime::now_utc() - task.enqueued_at).as_seconds_f64()) | ||||
|         .unwrap_or(0.0); | ||||
|     crate::metrics::MEILISEARCH_TASK_QUEUE_LATENCY_SECONDS.set(task_queue_latency_seconds); | ||||
|     crate::metrics::MEILISEARCH_TASK_QUEUE_MAX_SIZE.set(index_scheduler.max_size()? as i64); | ||||
|     crate::metrics::MEILISEARCH_TASK_QUEUE_USED_SIZE.set(index_scheduler.used_size()? as i64); | ||||
|  | ||||
|     crate::metrics::MEILISEARCH_TASK_QUEUE_SIZE_UNTIL_STOP_REGISTERING | ||||
|         .set(index_scheduler.remaining_size_until_task_queue_stop()? as i64); | ||||
|  | ||||
|     let encoder = TextEncoder::new(); | ||||
|     let mut buffer = vec![]; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user