@@ -1316,7 +1316,18 @@ std::shared_ptr<roaring::Roaring> DeleteBitmap::get_agg(const BitmapKey& bmk) co
1316
1316
val = new AggCache::Value ();
1317
1317
{
1318
1318
std::shared_lock l (lock);
1319
- DeleteBitmap::BitmapKey start {std::get<0 >(bmk), std::get<1 >(bmk), 0 };
1319
+ Version start_version = 0 ;
1320
+ auto it0 = _rowset_cache_version.find (std::get<0 >(bmk));
1321
+ if (it0 != _rowset_cache_version.end ()) {
1322
+ auto it1 = it0->second .find (std::get<1 >(bmk));
1323
+ if (it1 != it0->second .end ()) {
1324
+ start_version = it1->second + 1 ;
1325
+ LOG (INFO) << " sout: start agg for tablet=" << _tablet_id
1326
+ << " , rowset=" << std::get<0 >(bmk).to_string ()
1327
+ << " , segment=" << std::get<1 >(bmk) << " , version=" << start_version;
1328
+ }
1329
+ }
1330
+ DeleteBitmap::BitmapKey start {std::get<0 >(bmk), std::get<1 >(bmk), start_version};
1320
1331
for (auto it = delete_bitmap.lower_bound (start); it != delete_bitmap.end (); ++it) {
1321
1332
auto & [k, bm] = *it;
1322
1333
if (std::get<0 >(k) != std::get<0 >(bmk) || std::get<1 >(k) != std::get<1 >(bmk) ||
@@ -1328,6 +1339,13 @@ std::shared_ptr<roaring::Roaring> DeleteBitmap::get_agg(const BitmapKey& bmk) co
1328
1339
}
1329
1340
size_t charge = val->bitmap .getSizeInBytes () + sizeof (AggCache::Value);
1330
1341
handle = _agg_cache->repr ()->insert (key, val, charge, charge, CachePriority::NORMAL);
1342
+ // this version is already agged
1343
+ std::shared_lock l (lock);
1344
+ _rowset_cache_version[std::get<0 >(bmk)][std::get<1 >(bmk)] = std::get<2 >(bmk);
1345
+ LOG (INFO) << " sout: add rowset cache version for tablet=" << _tablet_id
1346
+ << " , rowset=" << std::get<0 >(bmk).to_string () << " , segment=" << std::get<1 >(bmk)
1347
+ << " , version=" << std::get<2 >(bmk)
1348
+ << " . totol size=" << _rowset_cache_version.size ();
1331
1349
}
1332
1350
1333
1351
// It is natural for the cache to reclaim the underlying memory
0 commit comments