Skip to content

Commit bc0523a

Browse files
[BugFix] fix delvec crc32 upgrade compatibility (backport #65442) (#65482)
Signed-off-by: Yixin Luo <[email protected]> Co-authored-by: Yixin Luo <[email protected]>
1 parent 2492ad8 commit bc0523a

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

be/src/storage/lake/meta_file.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ static std::string delvec_cache_key(int64_t tablet_id, const DelvecPagePB& page)
3636
DelvecCacheKeyPB cache_key_pb;
3737
cache_key_pb.set_id(tablet_id);
3838
cache_key_pb.mutable_delvec_page()->CopyFrom(page);
39+
// Do not include crc32c_gen_version in cache key
40+
cache_key_pb.mutable_delvec_page()->clear_crc32c_gen_version();
3941
return cache_key_pb.SerializeAsString();
4042
}
4143

@@ -458,6 +460,7 @@ Status MetaFileBuilder::_finalize_delvec(int64_t version, int64_t txn_id) {
458460
each_delvec.second.set_offset(iter->second.offset());
459461
each_delvec.second.set_size(iter->second.size());
460462
each_delvec.second.set_crc32c(iter->second.crc32c());
463+
each_delvec.second.set_crc32c_gen_version(version);
461464
// record from cache key to segment id, so we can fill up cache later
462465
_cache_key_to_segment_id[delvec_cache_key(_tablet_meta->id(), each_delvec.second)] = iter->first;
463466
_delvecs.erase(iter);
@@ -467,6 +470,7 @@ Status MetaFileBuilder::_finalize_delvec(int64_t version, int64_t txn_id) {
467470
// 2. insert new delvec to meta
468471
for (auto&& each_delvec : _delvecs) {
469472
each_delvec.second.set_version(version);
473+
each_delvec.second.set_crc32c_gen_version(version);
470474
(*_tablet_meta->mutable_delvec_meta()->mutable_delvecs())[each_delvec.first] = each_delvec.second;
471475
// record from cache key to segment id, so we can fill up cache later
472476
_cache_key_to_segment_id[delvec_cache_key(_tablet_meta->id(), each_delvec.second)] = each_delvec.first;
@@ -606,7 +610,7 @@ Status get_del_vec(TabletManager* tablet_mgr, const TabletMetadata& metadata, ui
606610
ASSIGN_OR_RETURN(auto rf,
607611
fs::new_random_access_file(opts, tablet_mgr->delvec_location(metadata.id(), delvec_name)));
608612
RETURN_IF_ERROR(rf->read_at_fully(iter->second.offset(), buf.data(), iter->second.size()));
609-
if (iter->second.has_crc32c()) {
613+
if (iter->second.has_crc32c() && iter->second.crc32c_gen_version() == iter->second.version()) {
610614
// check crc32c
611615
uint32_t crc32c = crc32c::Value(buf.data(), iter->second.size());
612616
if (crc32c != crc32c::Unmask(iter->second.crc32c())) {

gensrc/proto/lake_types.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ message DelvecPagePB {
3434
optional uint64 offset = 2;
3535
optional uint64 size = 3;
3636
optional uint32 crc32c = 4;
37+
// For upgrade compatibility.
38+
optional int64 crc32c_gen_version = 5;
3739
}
3840

3941
message DelvecCacheKeyPB {

0 commit comments

Comments
 (0)