diff --git a/pageserver/src/layered_repository/layer_map.rs b/pageserver/src/layered_repository/layer_map.rs index 3cca2f68ca..c052816e9b 100644 --- a/pageserver/src/layered_repository/layer_map.rs +++ b/pageserver/src/layered_repository/layer_map.rs @@ -13,14 +13,26 @@ use crate::layered_repository::storage_layer::{Layer, SegmentTag}; use crate::layered_repository::{InMemoryLayer, SnapshotLayer}; use crate::relish::*; use anyhow::Result; +use lazy_static::lazy_static; use log::*; use std::collections::HashSet; use std::collections::{BinaryHeap, BTreeMap, HashMap}; use std::ops::Bound::Included; use std::cmp::Ordering; use std::sync::Arc; +use zenith_metrics::{register_int_gauge, IntGauge}; use zenith_utils::lsn::Lsn; +lazy_static! { + static ref NUM_INMEMORY_LAYERS: IntGauge = + register_int_gauge!("pageserver_inmemory_layers", "Number of layers in memory") + .expect("failed to define a metric"); + + static ref NUM_ONDISK_LAYERS: IntGauge = + register_int_gauge!("pageserver_ondisk_layers", "Number of layers on-disk") + .expect("failed to define a metric"); +} + /// /// LayerMap tracks what layers exist on a timeline. The last layer that is /// open for writes is always an InMemoryLayer, and is tracked separately @@ -131,6 +143,8 @@ impl LayerMap { layer: layer, }; self.open_segs.push(opensegentry); + + NUM_INMEMORY_LAYERS.inc(); } // replace given open layer with other layers. @@ -140,6 +154,7 @@ impl LayerMap { let mut segentry = self.segs.get_mut(&segtag).unwrap(); segentry.open = None; + NUM_INMEMORY_LAYERS.dec(); } /// @@ -161,6 +176,7 @@ impl LayerMap { }; self.segs.insert(tag, segentry); } + NUM_ONDISK_LAYERS.inc(); } /// @@ -175,6 +191,7 @@ impl LayerMap { if let Some(segentry) = self.segs.get_mut(&tag) { segentry.historic.remove(&start_lsn); } + NUM_ONDISK_LAYERS.dec(); } pub fn list_rels(&self, spcnode: u32, dbnode: u32) -> Result> {