This is an automated email from the ASF dual-hosted git repository.
eldenmoon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 5b4b121fbc9 [Fix](Variant) return status if dict key not found when
`sync_tablet_rowsets` (#49417)
5b4b121fbc9 is described below
commit 5b4b121fbc9df31b9c56c36c1d29125acdcf1e12
Author: lihangyu <[email protected]>
AuthorDate: Wed Mar 26 22:28:45 2025 +0800
[Fix](Variant) return status if dict key not found when
`sync_tablet_rowsets` (#49417)
If meta service version is old, then there's chance to return response
that the new version of BE can not handle
---
be/src/cloud/cloud_meta_mgr.cpp | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/be/src/cloud/cloud_meta_mgr.cpp b/be/src/cloud/cloud_meta_mgr.cpp
index cb2fa8cb74b..d6ac44e5d08 100644
--- a/be/src/cloud/cloud_meta_mgr.cpp
+++ b/be/src/cloud/cloud_meta_mgr.cpp
@@ -413,8 +413,8 @@ Status retry_rpc(std::string_view op_name, const Request&
req, Response* res,
return Status::RpcError("failed to {}: rpc timeout, last msg={}", op_name,
error_msg);
}
-static void fill_schema_with_dict(const RowsetMetaCloudPB& in, RowsetMetaPB*
out,
- const SchemaCloudDictionary& dict) {
+Status fill_schema_with_dict(const RowsetMetaCloudPB& in, RowsetMetaPB* out,
+ const SchemaCloudDictionary& dict) {
std::unordered_map<int32_t, ColumnPB*> unique_id_map;
//init map
for (ColumnPB& column : *out->mutable_tablet_schema()->mutable_column()) {
@@ -423,6 +423,9 @@ static void fill_schema_with_dict(const RowsetMetaCloudPB&
in, RowsetMetaPB* out
// column info
for (int i = 0; i < in.schema_dict_key_list().column_dict_key_list_size();
++i) {
int dict_key = in.schema_dict_key_list().column_dict_key_list(i);
+ if (dict.column_dict().find(dict_key) == dict.column_dict().end()) {
+ return Status::NotFound("Not found entry {}", dict_key);
+ }
const ColumnPB& dict_val = dict.column_dict().at(dict_key);
ColumnPB& to_add = *out->mutable_tablet_schema()->add_column();
to_add = dict_val;
@@ -432,6 +435,9 @@ static void fill_schema_with_dict(const RowsetMetaCloudPB&
in, RowsetMetaPB* out
// index info
for (int i = 0; i <
in.schema_dict_key_list().index_info_dict_key_list_size(); ++i) {
int dict_key = in.schema_dict_key_list().index_info_dict_key_list(i);
+ if (dict.index_dict().find(dict_key) == dict.index_dict().end()) {
+ return Status::NotFound("Not found entry {}", dict_key);
+ }
const doris::TabletIndexPB& dict_val = dict.index_dict().at(dict_key);
*out->mutable_tablet_schema()->add_index() = dict_val;
VLOG_DEBUG << "fill dict index " << dict_val.ShortDebugString();
@@ -440,10 +446,14 @@ static void fill_schema_with_dict(const
RowsetMetaCloudPB& in, RowsetMetaPB* out
// sparse column info
for (int i = 0; i <
in.schema_dict_key_list().sparse_column_dict_key_list_size(); ++i) {
int dict_key =
in.schema_dict_key_list().sparse_column_dict_key_list(i);
+ if (dict.column_dict().find(dict_key) == dict.column_dict().end()) {
+ return Status::NotFound("Not found entry {}", dict_key);
+ }
const ColumnPB& dict_val = dict.column_dict().at(dict_key);
*unique_id_map.at(dict_val.parent_unique_id())->add_sparse_columns() =
dict_val;
VLOG_DEBUG << "fill dict sparse column" << dict_val.ShortDebugString();
}
+ return Status::OK();
}
} // namespace
@@ -648,7 +658,8 @@ Status CloudMetaMgr::sync_tablet_rowsets(CloudTablet*
tablet, bool warmup_delta_
// Otherwise, use the schema dictionary from the response
(if available).
meta_pb = cloud_rowset_meta_to_doris(cloud_rs_meta_pb);
if (resp.has_schema_dict()) {
- fill_schema_with_dict(cloud_rs_meta_pb, &meta_pb,
resp.schema_dict());
+
RETURN_IF_ERROR(fill_schema_with_dict(cloud_rs_meta_pb, &meta_pb,
+
resp.schema_dict()));
}
}
auto rs_meta = std::make_shared<RowsetMeta>();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]