diff --git a/be/src/common/cast_set.h b/be/src/common/cast_set.h index 08a9c8fbb7ebaa..dcc744d8122a3a 100644 --- a/be/src/common/cast_set.h +++ b/be/src/common/cast_set.h @@ -61,6 +61,12 @@ void cast_set(T& a, U b) { a = static_cast(b); } +template + requires std::is_floating_point_v and std::is_integral_v +void cast_set(T& a, U b) { + a = static_cast(b); +} + template requires std::is_integral_v && std::is_integral_v T cast_set(U b) { @@ -70,4 +76,10 @@ T cast_set(U b) { return static_cast(b); } +template + requires std::is_floating_point_v and std::is_integral_v +T cast_set(U b) { + return static_cast(b); +} + } // namespace doris diff --git a/be/src/http/action/calc_file_crc_action.cpp b/be/src/http/action/calc_file_crc_action.cpp index 66ec96a2a9ac65..123f55dd7fd744 100644 --- a/be/src/http/action/calc_file_crc_action.cpp +++ b/be/src/http/action/calc_file_crc_action.cpp @@ -46,7 +46,7 @@ CalcFileCrcAction::CalcFileCrcAction(ExecEnv* exec_env, BaseStorageEngine& engin // calculate the crc value of the files in the tablet Status CalcFileCrcAction::_handle_calc_crc(HttpRequest* req, uint32_t* crc_value, int64_t* start_version, int64_t* end_version, - int32_t* rowset_count, int64_t* file_count) { + uint32_t* rowset_count, int64_t* file_count) { uint64_t tablet_id = 0; const auto& req_tablet_id = req->param(TABLET_ID_KEY); if (req_tablet_id.empty()) { @@ -110,7 +110,7 @@ void CalcFileCrcAction::handle(HttpRequest* req) { uint32_t crc_value = 0; int64_t start_version = 0; int64_t end_version = 0; - int32_t rowset_count = 0; + uint32_t rowset_count = 0; int64_t file_count = 0; MonotonicStopWatch timer; diff --git a/be/src/http/action/calc_file_crc_action.h b/be/src/http/action/calc_file_crc_action.h index 30df8bfe629cf3..ea5fb894957d19 100644 --- a/be/src/http/action/calc_file_crc_action.h +++ b/be/src/http/action/calc_file_crc_action.h @@ -44,7 +44,7 @@ class CalcFileCrcAction : public HttpHandlerWithAuth { private: Status _handle_calc_crc(HttpRequest* req, uint32_t* crc_value, int64_t* start_version, - int64_t* end_version, int32_t* rowset_count, int64_t* file_count); + int64_t* end_version, uint32_t* rowset_count, int64_t* file_count); private: BaseStorageEngine& _engine; diff --git a/be/src/olap/base_compaction.cpp b/be/src/olap/base_compaction.cpp index 8b9cbd75ed33b8..9e428f27b0b576 100644 --- a/be/src/olap/base_compaction.cpp +++ b/be/src/olap/base_compaction.cpp @@ -23,6 +23,7 @@ #include #include +#include "common/cast_set.h" #include "common/config.h" #include "common/logging.h" #include "olap/compaction.h" @@ -35,6 +36,8 @@ #include "util/trace.h" namespace doris { +#include "common/compile_check_begin.h" + using namespace ErrorCode; BaseCompaction::BaseCompaction(StorageEngine& engine, const TabletSharedPtr& tablet) @@ -184,7 +187,8 @@ Status BaseCompaction::pick_rowsets_to_compact() { // set to 1 to void divide by zero base_size = 1; } - double cumulative_base_ratio = static_cast(cumulative_total_size) / base_size; + double cumulative_base_ratio = + cast_set(cumulative_total_size) / cast_set(base_size); if (cumulative_base_ratio > min_data_ratio) { VLOG_NOTICE << "satisfy the base compaction policy. tablet=" << _tablet->tablet_id() diff --git a/be/src/olap/base_tablet.cpp b/be/src/olap/base_tablet.cpp index 89886ec8b4bea7..2e70e4586cc768 100644 --- a/be/src/olap/base_tablet.cpp +++ b/be/src/olap/base_tablet.cpp @@ -20,6 +20,10 @@ #include #include +#include +#include + +#include "common/cast_set.h" #include "common/logging.h" #include "common/status.h" #include "olap/calc_delete_bitmap_executor.h" @@ -45,6 +49,8 @@ #include "vec/jsonb/serialize.h" namespace doris { +#include "common/compile_check_begin.h" + using namespace ErrorCode; namespace { @@ -462,9 +468,9 @@ Status BaseTablet::lookup_row_key(const Slice& encoded_key, TabletSchema* latest RowLocation loc; for (size_t i = 0; i < specified_rowsets.size(); i++) { - auto& rs = specified_rowsets[i]; - auto& segments_key_bounds = rs->rowset_meta()->get_segments_key_bounds(); - int num_segments = rs->num_segments(); + const auto& rs = specified_rowsets[i]; + const auto& segments_key_bounds = rs->rowset_meta()->get_segments_key_bounds(); + int num_segments = cast_set(rs->num_segments()); DCHECK_EQ(segments_key_bounds.size(), num_segments); std::vector picked_segments; for (int i = num_segments - 1; i >= 0; i--) { @@ -671,7 +677,8 @@ Status BaseTablet::calc_segment_delete_bitmap(RowsetSharedPtr rowset, RowsetSharedPtr rowset_find; auto st = lookup_row_key(key, rowset_schema.get(), true, specified_rowsets, &loc, - dummy_version.first - 1, segment_caches, &rowset_find); + cast_set(dummy_version.first - 1), segment_caches, + &rowset_find); bool expected_st = st.ok() || st.is() || st.is(); // It's a defensive DCHECK, we need to exclude some common errors to avoid core-dump // while stress test @@ -1130,7 +1137,7 @@ Status BaseTablet::generate_new_block_for_flexible_partial_update( const signed char* delete_sign_column_data) { if (skipped) { if (delete_sign_column_data != nullptr && - delete_sign_column_data[read_index_old[idx]] != 0) { + delete_sign_column_data[read_index_old[cast_set(idx)]] != 0) { if (tablet_column.has_default_value()) { new_col->insert_from(default_value_col, 0); } else if (tablet_column.is_nullable()) { @@ -1300,7 +1307,8 @@ Status BaseTablet::check_delete_bitmap_correctness(DeleteBitmapPtr delete_bitmap for (const auto& rowset : *rowsets) { rapidjson::Value value; std::string version_str = rowset->get_rowset_info_str(); - value.SetString(version_str.c_str(), version_str.length(), + value.SetString(version_str.c_str(), + cast_set(version_str.length()), required_rowsets_arr.GetAllocator()); required_rowsets_arr.PushBack(value, required_rowsets_arr.GetAllocator()); } @@ -1313,7 +1321,8 @@ Status BaseTablet::check_delete_bitmap_correctness(DeleteBitmapPtr delete_bitmap for (const auto& rowset : rowsets) { rapidjson::Value value; std::string version_str = rowset->get_rowset_info_str(); - value.SetString(version_str.c_str(), version_str.length(), + value.SetString(version_str.c_str(), + cast_set(version_str.length()), required_rowsets_arr.GetAllocator()); required_rowsets_arr.PushBack(value, required_rowsets_arr.GetAllocator()); } @@ -1321,7 +1330,8 @@ Status BaseTablet::check_delete_bitmap_correctness(DeleteBitmapPtr delete_bitmap for (const auto& missing_rowset_id : missing_ids) { rapidjson::Value miss_value; std::string rowset_id_str = missing_rowset_id.to_string(); - miss_value.SetString(rowset_id_str.c_str(), rowset_id_str.length(), + miss_value.SetString(rowset_id_str.c_str(), + cast_set(rowset_id_str.length()), missing_rowsets_arr.GetAllocator()); missing_rowsets_arr.PushBack(miss_value, missing_rowsets_arr.GetAllocator()); } @@ -1725,7 +1735,7 @@ std::vector BaseTablet::get_snapshot_rowset(bool include_stale_ void BaseTablet::calc_consecutive_empty_rowsets( std::vector* empty_rowsets, const std::vector& candidate_rowsets, int limit) { - int len = candidate_rowsets.size(); + int len = cast_set(candidate_rowsets.size()); for (int i = 0; i < len - 1; ++i) { auto rowset = candidate_rowsets[i]; auto next_rowset = candidate_rowsets[i + 1]; @@ -1761,7 +1771,7 @@ void BaseTablet::calc_consecutive_empty_rowsets( } Status BaseTablet::calc_file_crc(uint32_t* crc_value, int64_t start_version, int64_t end_version, - int32_t* rowset_count, int64_t* file_count) { + uint32_t* rowset_count, int64_t* file_count) { Version v(start_version, end_version); std::vector rowsets; traverse_rowsets([&rowsets, &v](const auto& rs) { @@ -1771,7 +1781,7 @@ Status BaseTablet::calc_file_crc(uint32_t* crc_value, int64_t start_version, int } }); std::sort(rowsets.begin(), rowsets.end(), Rowset::comparator); - *rowset_count = rowsets.size(); + *rowset_count = cast_set(rowsets.size()); *crc_value = 0; *file_count = 0; diff --git a/be/src/olap/base_tablet.h b/be/src/olap/base_tablet.h index b5da0e3bf06be1..b6fc953e46082e 100644 --- a/be/src/olap/base_tablet.h +++ b/be/src/olap/base_tablet.h @@ -289,7 +289,7 @@ class BaseTablet { } Status calc_file_crc(uint32_t* crc_value, int64_t start_version, int64_t end_version, - int32_t* rowset_count, int64_t* file_count); + uint32_t* rowset_count, int64_t* file_count); Status show_nested_index_file(std::string* json_meta);