mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2025-12-22 22:20:02 +00:00
@@ -112,8 +112,7 @@ pub trait InvertedIndexReader: Send + Sync {
|
|||||||
ranges: &[Range<u64>],
|
ranges: &[Range<u64>],
|
||||||
metrics: Option<&'a mut InvertedIndexReadMetrics>,
|
metrics: Option<&'a mut InvertedIndexReadMetrics>,
|
||||||
) -> Result<Vec<FstMap>> {
|
) -> Result<Vec<FstMap>> {
|
||||||
let mut metrics = metrics;
|
self.read_vec(ranges, metrics)
|
||||||
self.read_vec(ranges, metrics.as_deref_mut())
|
|
||||||
.await?
|
.await?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|bytes| FstMap::new(bytes.to_vec()).context(DecodeFstSnafu))
|
.map(|bytes| FstMap::new(bytes.to_vec()).context(DecodeFstSnafu))
|
||||||
@@ -141,9 +140,8 @@ pub trait InvertedIndexReader: Send + Sync {
|
|||||||
ranges: &[(Range<u64>, BitmapType)],
|
ranges: &[(Range<u64>, BitmapType)],
|
||||||
metrics: Option<&'a mut InvertedIndexReadMetrics>,
|
metrics: Option<&'a mut InvertedIndexReadMetrics>,
|
||||||
) -> Result<VecDeque<Bitmap>> {
|
) -> Result<VecDeque<Bitmap>> {
|
||||||
let mut metrics = metrics;
|
|
||||||
let (ranges, types): (Vec<_>, Vec<_>) = ranges.iter().cloned().unzip();
|
let (ranges, types): (Vec<_>, Vec<_>) = ranges.iter().cloned().unzip();
|
||||||
let bytes = self.read_vec(&ranges, metrics.as_deref_mut()).await?;
|
let bytes = self.read_vec(&ranges, metrics).await?;
|
||||||
bytes
|
bytes
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.zip(types)
|
.zip(types)
|
||||||
|
|||||||
@@ -57,9 +57,9 @@ impl<R> InvertedIndexFooterReader<R> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<R: RangeReader> InvertedIndexFooterReader<R> {
|
impl<R: RangeReader> InvertedIndexFooterReader<R> {
|
||||||
pub async fn metadata<'a>(
|
pub async fn metadata(
|
||||||
&mut self,
|
&mut self,
|
||||||
mut metrics: Option<&'a mut InvertedIndexReadMetrics>,
|
mut metrics: Option<&mut InvertedIndexReadMetrics>,
|
||||||
) -> Result<InvertedIndexMetas> {
|
) -> Result<InvertedIndexMetas> {
|
||||||
ensure!(
|
ensure!(
|
||||||
self.blob_size >= FOOTER_PAYLOAD_SIZE_SIZE,
|
self.blob_size >= FOOTER_PAYLOAD_SIZE_SIZE,
|
||||||
|
|||||||
@@ -33,12 +33,11 @@ impl<'a> ParallelFstValuesMapper<'a> {
|
|||||||
Self { reader }
|
Self { reader }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn map_values_vec<'b>(
|
pub async fn map_values_vec(
|
||||||
&mut self,
|
&mut self,
|
||||||
value_and_meta_vec: &[(Vec<u64>, &'b InvertedIndexMeta)],
|
value_and_meta_vec: &[(Vec<u64>, &InvertedIndexMeta)],
|
||||||
metrics: Option<&mut InvertedIndexReadMetrics>,
|
metrics: Option<&mut InvertedIndexReadMetrics>,
|
||||||
) -> Result<Vec<Bitmap>> {
|
) -> Result<Vec<Bitmap>> {
|
||||||
let mut metrics = metrics;
|
|
||||||
let groups = value_and_meta_vec
|
let groups = value_and_meta_vec
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(values, _)| values.len())
|
.map(|(values, _)| values.len())
|
||||||
@@ -66,10 +65,7 @@ impl<'a> ParallelFstValuesMapper<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
common_telemetry::debug!("fetch ranges: {:?}", fetch_ranges);
|
common_telemetry::debug!("fetch ranges: {:?}", fetch_ranges);
|
||||||
let mut bitmaps = self
|
let mut bitmaps = self.reader.bitmap_deque(&fetch_ranges, metrics).await?;
|
||||||
.reader
|
|
||||||
.bitmap_deque(&fetch_ranges, metrics.as_deref_mut())
|
|
||||||
.await?;
|
|
||||||
let mut output = Vec::with_capacity(groups.len());
|
let mut output = Vec::with_capacity(groups.len());
|
||||||
|
|
||||||
for counter in groups {
|
for counter in groups {
|
||||||
|
|||||||
@@ -94,9 +94,7 @@ impl IndexApplier for PredicatesIndexApplier {
|
|||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
let mut mapper = ParallelFstValuesMapper::new(reader);
|
let mut mapper = ParallelFstValuesMapper::new(reader);
|
||||||
let mut bm_vec = mapper
|
let mut bm_vec = mapper.map_values_vec(&value_and_meta_vec, metrics).await?;
|
||||||
.map_values_vec(&value_and_meta_vec, metrics.as_deref_mut())
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let mut bitmap = bm_vec.pop().unwrap(); // SAFETY: `fst_ranges` is not empty
|
let mut bitmap = bm_vec.pop().unwrap(); // SAFETY: `fst_ranges` is not empty
|
||||||
for bm in bm_vec {
|
for bm in bm_vec {
|
||||||
|
|||||||
@@ -615,10 +615,8 @@ impl IndexSource {
|
|||||||
let (reader, fallbacked) = self.ensure_reader(file_id, file_size_hint).await?;
|
let (reader, fallbacked) = self.ensure_reader(file_id, file_size_hint).await?;
|
||||||
|
|
||||||
// Track cache miss if fallbacked to remote
|
// Track cache miss if fallbacked to remote
|
||||||
if fallbacked {
|
if fallbacked && let Some(m) = metrics {
|
||||||
if let Some(m) = metrics {
|
m.blob_cache_miss += 1;
|
||||||
m.blob_cache_miss += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let res = reader.blob(key).await;
|
let res = reader.blob(key).await;
|
||||||
@@ -655,10 +653,8 @@ impl IndexSource {
|
|||||||
let (reader, fallbacked) = self.ensure_reader(file_id, file_size_hint).await?;
|
let (reader, fallbacked) = self.ensure_reader(file_id, file_size_hint).await?;
|
||||||
|
|
||||||
// Track cache miss if fallbacked to remote
|
// Track cache miss if fallbacked to remote
|
||||||
if fallbacked {
|
if fallbacked && let Some(m) = &mut metrics {
|
||||||
if let Some(m) = &mut metrics {
|
m.blob_cache_miss += 1;
|
||||||
m.blob_cache_miss += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let start = metrics.as_ref().map(|_| Instant::now());
|
let start = metrics.as_ref().map(|_| Instant::now());
|
||||||
|
|||||||
Reference in New Issue
Block a user