LCOV - code coverage report
Current view: top level - pageserver/src - l0_flush.rs (source / functions) Coverage Total Hit
Test: 12c2fc96834f59604b8ade5b9add28f1dce41ec6.info Lines: 70.6 % 17 12
Test Date: 2024-07-03 15:33:13 Functions: 20.0 % 15 3

            Line data    Source code
       1              : use std::{num::NonZeroUsize, sync::Arc};
       2              : 
       3              : use crate::tenant::ephemeral_file;
       4              : 
       5            0 : #[derive(Default, Debug, PartialEq, Eq, Clone, serde::Deserialize)]
       6              : #[serde(tag = "mode", rename_all = "kebab-case", deny_unknown_fields)]
       7              : pub enum L0FlushConfig {
       8              :     #[default]
       9              :     PageCached,
      10              :     #[serde(rename_all = "snake_case")]
      11              :     Direct { max_concurrency: NonZeroUsize },
      12              : }
      13              : 
      14              : #[derive(Clone)]
      15              : pub struct L0FlushGlobalState(Arc<Inner>);
      16              : 
      17              : pub(crate) enum Inner {
      18              :     PageCached,
      19              :     Direct { semaphore: tokio::sync::Semaphore },
      20              : }
      21              : 
      22              : impl L0FlushGlobalState {
      23          162 :     pub fn new(config: L0FlushConfig) -> Self {
      24          162 :         match config {
      25          162 :             L0FlushConfig::PageCached => Self(Arc::new(Inner::PageCached)),
      26            0 :             L0FlushConfig::Direct { max_concurrency } => {
      27            0 :                 let semaphore = tokio::sync::Semaphore::new(max_concurrency.get());
      28            0 :                 Self(Arc::new(Inner::Direct { semaphore }))
      29              :             }
      30              :         }
      31          162 :     }
      32              : 
      33         1114 :     pub(crate) fn inner(&self) -> &Arc<Inner> {
      34         1114 :         &self.0
      35         1114 :     }
      36              : }
      37              : 
      38              : impl L0FlushConfig {
      39         1246 :     pub(crate) fn prewarm_on_write(&self) -> ephemeral_file::PrewarmPageCacheOnWrite {
      40         1246 :         use L0FlushConfig::*;
      41         1246 :         match self {
      42         1246 :             PageCached => ephemeral_file::PrewarmPageCacheOnWrite::Yes,
      43            0 :             Direct { .. } => ephemeral_file::PrewarmPageCacheOnWrite::No,
      44              :         }
      45         1246 :     }
      46              : }
        

Generated by: LCOV version 2.1-beta