Skip to content

Commit e431e8e

Browse files
emmaling27Convex, Inc.
authored andcommitted
Add timers and size metrics for loading search index files (#25648)
Adds timers and size metrics for loading id tracker, deleted terms table, and alive bitset. GitOrigin-RevId: 6e2df08a36f00a4103f17ddfd304fe70a58b9803
1 parent dc30a6f commit e431e8e

File tree

8 files changed

+82
-15
lines changed

8 files changed

+82
-15
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/common/src/id_tracker.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ use byteorder::{
1616
};
1717
use csf::ls::Map as CsfMap;
1818

19+
use crate::metrics::{
20+
load_id_tracker_timer,
21+
log_id_tracker_size,
22+
};
23+
1924
/// Version 1 of the id table has the following format:
2025
/// ```
2126
/// [ version ] [ count ] [ index_len ] [ ID ]* [ index ]
@@ -44,15 +49,15 @@ pub struct StaticIdTracker {
4449

4550
impl StaticIdTracker {
4651
pub fn load_from_path(id_table_path: PathBuf) -> anyhow::Result<Self> {
52+
let _timer = load_id_tracker_timer();
4753
let uuid_file = File::open(id_table_path)?;
48-
StaticIdTracker::load((
49-
uuid_file.metadata()?.len() as usize,
50-
BufReader::new(uuid_file),
51-
))
54+
let size = uuid_file.metadata()?.len() as usize;
55+
log_id_tracker_size(size);
56+
StaticIdTracker::load(size, BufReader::new(uuid_file))
5257
}
5358

54-
pub fn load(uuid_file: (usize, impl Read)) -> anyhow::Result<Self> {
55-
let (count, uuid_buf, csf_map) = Self::load_ids(uuid_file.0, uuid_file.1)?;
59+
pub fn load(file_len: usize, reader: impl Read) -> anyhow::Result<Self> {
60+
let (count, uuid_buf, csf_map) = Self::load_ids(file_len, reader)?;
5661
Ok(Self {
5762
count,
5863
id_buf: uuid_buf,

crates/common/src/metrics.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ use metrics::{
2121
Timer,
2222
CONVEX_METRICS_REGISTRY,
2323
};
24-
use prometheus::VMHistogramVec;
24+
use prometheus::{
25+
VMHistogram,
26+
VMHistogramVec,
27+
};
2528
use sync_types::backoff::Backoff;
2629

2730
use crate::runtime::Runtime;
@@ -152,3 +155,13 @@ pub fn register_prometheus_exporter<RT: Runtime>(
152155
};
153156
(handle, flush)
154157
}
158+
159+
register_convex_histogram!(LOAD_ID_TRACKER_SECONDS, "Time to load IdTracker in seconds");
160+
pub fn load_id_tracker_timer() -> Timer<VMHistogram> {
161+
Timer::new(&LOAD_ID_TRACKER_SECONDS)
162+
}
163+
164+
register_convex_histogram!(ID_TRACKER_SIZE_BYTES, "IdTracker file size");
165+
pub fn log_id_tracker_size(size: usize) {
166+
log_distribution(&ID_TRACKER_SIZE_BYTES, size as f64);
167+
}

crates/text_search/Cargo.toml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ anyhow = { workspace = true }
1313
byteorder = { workspace = true }
1414
common = { path = "../common" }
1515
csf = { workspace = true }
16+
metrics = { path = "../metrics" }
1617
sucds = { workspace = true }
1718
tantivy = { workspace = true }
1819
tantivy-common = { workspace = true }
@@ -21,10 +22,8 @@ value = { path = "../value" }
2122

2223
[dev-dependencies]
2324
common = { path = "../common", features = ["testing"] }
25+
metrics = { path = "../metrics", features = ["testing"] }
2426
value = { path = "../value", features = ["testing"] }
2527

2628
[features]
27-
testing = [
28-
"common/testing",
29-
"value/testing",
30-
]
29+
testing = ["common/testing", "metrics/testing", "value/testing"]

crates/text_search/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![feature(lazy_cell)]
2+
mod metrics;
13
#[cfg(test)]
24
mod tests;
35
pub mod tracker;

crates/text_search/src/metrics.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
use metrics::{
2+
log_distribution,
3+
prometheus::VMHistogram,
4+
register_convex_histogram,
5+
Timer,
6+
};
7+
8+
register_convex_histogram!(
9+
LOAD_ALIVE_BITSET_SECONDS,
10+
"Time to load AliveBitSet in seconds"
11+
);
12+
pub fn load_alive_bitset_timer() -> Timer<VMHistogram> {
13+
Timer::new(&LOAD_ALIVE_BITSET_SECONDS)
14+
}
15+
16+
register_convex_histogram!(ALIVE_BITSET_SIZE_BYTES, "Size of AliveBitSet in bytes");
17+
pub fn log_alive_bitset_size(size: usize) {
18+
log_distribution(&ALIVE_BITSET_SIZE_BYTES, size as f64)
19+
}
20+
21+
register_convex_histogram!(
22+
LOAD_DELETED_TERMS_TABLE_SECONDS,
23+
"Time to load deleted terms table in seconds"
24+
);
25+
pub fn load_deleted_terms_table_timer() -> Timer<VMHistogram> {
26+
Timer::new(&LOAD_DELETED_TERMS_TABLE_SECONDS)
27+
}
28+
29+
register_convex_histogram!(
30+
DELETED_TERMS_TABLE_SIZE_BYTES,
31+
"Size of deleted terms table in bytes"
32+
);
33+
pub fn log_deleted_terms_table_size(size: usize) {
34+
log_distribution(&DELETED_TERMS_TABLE_SIZE_BYTES, size as f64)
35+
}

crates/text_search/src/tracker.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ use tantivy_common::{
4646
};
4747
use value::InternalId;
4848

49+
use crate::metrics::{
50+
load_alive_bitset_timer,
51+
load_deleted_terms_table_timer,
52+
log_alive_bitset_size,
53+
log_deleted_terms_table_size,
54+
};
55+
4956
/// Version 1 of the deletion tracker has the following format:
5057
/// ```
5158
/// [ version ] [ num_terms_deleted ] [ deleted_term_ordinals_size ] [ counts_size ] [ deleted_term_ordinals ] [ counts ]
@@ -93,7 +100,10 @@ impl DeletedTermsTable {
93100
}
94101

95102
pub fn load_alive_bitset(path: &Path) -> anyhow::Result<AliveBitSet> {
103+
let _timer = load_alive_bitset_timer();
96104
let mut file = File::open(path)?;
105+
let size = file.metadata()?.len();
106+
log_alive_bitset_size(size as usize);
97107
let mut buf = vec![];
98108
file.read_to_end(&mut buf)?;
99109
let owned = OwnedBytes::new(buf);
@@ -156,6 +166,8 @@ impl StaticDeletionTracker {
156166
file_len: usize,
157167
mut reader: impl Read,
158168
) -> anyhow::Result<(u32, Option<DeletedTermsTable>)> {
169+
log_deleted_terms_table_size(file_len);
170+
let _timer = load_deleted_terms_table_timer();
159171
let mut expected_len = 0;
160172
let version = reader.read_u8()?;
161173
expected_len += 1;

crates/vector/src/id_tracker.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ mod tests {
444444
let mut uuid_buf = vec![];
445445
tracker.write_uuids(&mut uuid_buf).unwrap();
446446

447-
let id_tracker = StaticIdTracker::load((uuid_buf.len(), &uuid_buf[..])).unwrap();
447+
let id_tracker = StaticIdTracker::load(uuid_buf.len(), &uuid_buf[..]).unwrap();
448448
VectorStaticIdTracker {
449449
id_tracker,
450450
deleted_bitset,
@@ -560,7 +560,7 @@ mod tests {
560560
tracker.write_uuids(&mut uuid_buf).unwrap();
561561

562562
let id_tracker = StaticIdTracker::load(
563-
(uuid_buf.len(), &uuid_buf[..]),
563+
uuid_buf.len(), &uuid_buf[..],
564564
).unwrap();
565565
let tracker = VectorStaticIdTracker {
566566
id_tracker,
@@ -662,7 +662,7 @@ mod tests {
662662

663663
let deleted_bitset = DeletedBitset::load(deleted_buf.len(), &deleted_buf[..]).unwrap();
664664
let id_tracker = StaticIdTracker::load(
665-
(uuid_buf.len(), &uuid_buf[..]),
665+
uuid_buf.len(), &uuid_buf[..],
666666
).unwrap();
667667
let static_ids = VectorStaticIdTracker {
668668
id_tracker,
@@ -703,7 +703,7 @@ mod tests {
703703

704704
let deleted_bitset = DeletedBitset::load(deleted_buf.len(), &deleted_buf[..]).unwrap();
705705
let id_tracker = StaticIdTracker::load(
706-
(uuid_buf.len(), &uuid_buf[..]),
706+
uuid_buf.len(), &uuid_buf[..],
707707
).unwrap();
708708
let static_ids = VectorStaticIdTracker {
709709
id_tracker,

0 commit comments

Comments
 (0)