MCPcopy Create free account
hub / github.com/apache/paimon-rust / open

Method open

crates/paimon/src/btree/reader.rs:50–95  ·  view source on GitHub ↗

Open a BTree index reader from a FileRead and file metadata. Only reads footer, index block, and null bitmap on open. Data blocks are read on demand during queries.

(
        reader: Box<dyn FileRead>,
        file_size: u64,
        meta: &BTreeIndexMeta,
        key_comparator: F,
    )

Source from the content-addressed store, hash-verified

48 /// Only reads footer, index block, and null bitmap on open.
49 /// Data blocks are read on demand during queries.
50 pub async fn open(
51 reader: Box<dyn FileRead>,
52 file_size: u64,
53 meta: &BTreeIndexMeta,
54 key_comparator: F,
55 ) -> io::Result<Self> {
56 if file_size < BTREE_FOOTER_ENCODED_LENGTH as u64 {
57 return Err(io::Error::new(
58 io::ErrorKind::InvalidData,
59 "File too small for BTree footer",
60 ));
61 }
62
63 // 1. Read footer (last 52 bytes)
64 let footer_start = file_size - BTREE_FOOTER_ENCODED_LENGTH as u64;
65 let footer_bytes = reader
66 .read(footer_start..file_size)
67 .await
68 .map_err(|e| io::Error::other(e.to_string()))?;
69 let footer = BTreeFileFooter::read_footer(&footer_bytes)?;
70
71 // 2. Read index block
72 let idx = &footer.index_block_handle;
73 let idx_end = idx.offset + idx.full_block_size() as u64;
74 let index_bytes = reader
75 .read(idx.offset..idx_end)
76 .await
77 .map_err(|e| io::Error::other(e.to_string()))?;
78 let index_block = read_block_from_bytes(&index_bytes, idx.size)?;
79 let sst_reader = SstFileReader::from_index_block(index_block);
80
81 // 3. Read null bitmap
82 let null_bitmap = match &footer.null_bitmap_handle {
83 Some(h) => read_null_bitmap(reader.as_ref(), h).await?,
84 None => RoaringTreemap::new(),
85 };
86
87 Ok(Self {
88 reader,
89 sst_reader,
90 null_bitmap,
91 min_key: meta.first_key.clone(),
92 max_key: meta.last_key.clone(),
93 key_comparator,
94 })
95 }
96
97 /// Get the null bitmap (row ids of null keys).
98 pub fn null_bitmap(&self) -> &RoaringTreemap {

Callers 1

read_batch_streamMethod · 0.80

Calls 4

read_block_from_bytesFunction · 0.85
read_null_bitmapFunction · 0.85
full_block_sizeMethod · 0.80
readMethod · 0.45

Tested by

no test coverage detected