github-actions[bot] commented on code in PR #43011:
URL: https://github.com/apache/doris/pull/43011#discussion_r1824157007
##########
be/src/olap/base_tablet.cpp:
##########
@@ -1344,7 +1394,10 @@
}
Status BaseTablet::update_delete_bitmap(const BaseTabletSPtr& self,
TabletTxnInfo* txn_info,
Review Comment:
warning: function 'update_delete_bitmap' has cognitive complexity of 86
(threshold 50) [readability-function-cognitive-complexity]
```cpp
Status BaseTablet::update_delete_bitmap(const BaseTabletSPtr& self,
TabletTxnInfo* txn_info,
^
```
<details>
<summary>Additional context</summary>
**be/src/olap/base_tablet.cpp:1410:** +1
```cpp
txn_info->partial_update_info &&
txn_info->partial_update_info->is_partial_update();
^
```
**be/src/olap/base_tablet.cpp:1411:** +1, including nesting penalty of 0,
nesting level increased to 1
```cpp
if (is_partial_update) {
^
```
**be/src/olap/base_tablet.cpp:1412:** nesting level increased to 2
```cpp
transient_rs_writer = DORIS_TRY(self->create_transient_rowset_writer(
^
```
**be/src/common/status.h:708:** expanded from macro 'DORIS_TRY'
```cpp
({ \
^
```
**be/src/olap/base_tablet.cpp:1412:** +3, including nesting penalty of 2,
nesting level increased to 3
```cpp
transient_rs_writer = DORIS_TRY(self->create_transient_rowset_writer(
^
```
**be/src/common/status.h:711:** expanded from macro 'DORIS_TRY'
```cpp
if (!res.has_value()) [[unlikely]] { \
^
```
**be/src/olap/base_tablet.cpp:1424:** +1, including nesting penalty of 0,
nesting level increased to 1
```cpp
RETURN_IF_ERROR(std::dynamic_pointer_cast<BetaRowset>(rowset)->load_segments(&segments));
^
```
**be/src/common/status.h:629:** expanded from macro 'RETURN_IF_ERROR'
```cpp
do { \
^
```
**be/src/olap/base_tablet.cpp:1424:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
RETURN_IF_ERROR(std::dynamic_pointer_cast<BetaRowset>(rowset)->load_segments(&segments));
^
```
**be/src/common/status.h:631:** expanded from macro 'RETURN_IF_ERROR'
```cpp
if (UNLIKELY(!_status_.ok())) { \
^
```
**be/src/olap/base_tablet.cpp:1430:** +1, including nesting penalty of 0,
nesting level increased to 1
```cpp
if (self->tablet_state() == TABLET_NOTREADY) {
^
```
**be/src/olap/base_tablet.cpp:1435:** +1, including nesting penalty of 0,
nesting level increased to 1
```cpp
RETURN_IF_ERROR(self->get_all_rs_id_unlocked(next_visible_version -
1, &cur_rowset_ids));
^
```
**be/src/common/status.h:629:** expanded from macro 'RETURN_IF_ERROR'
```cpp
do { \
^
```
**be/src/olap/base_tablet.cpp:1435:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
RETURN_IF_ERROR(self->get_all_rs_id_unlocked(next_visible_version -
1, &cur_rowset_ids));
^
```
**be/src/common/status.h:631:** expanded from macro 'RETURN_IF_ERROR'
```cpp
if (UNLIKELY(!_status_.ok())) { \
^
```
**be/src/olap/base_tablet.cpp:1450:** +1, including nesting penalty of 0,
nesting level increased to 1
```cpp
if (non_visible_rowsets != nullptr) {
^
```
**be/src/olap/base_tablet.cpp:1455:** nesting level increased to 2
```cpp
[](RowsetSharedPtr& lhs, RowsetSharedPtr& rhs) {
^
```
**be/src/olap/base_tablet.cpp:1460:** nesting level increased to 1
```cpp
[](RowsetSharedPtr& lhs, RowsetSharedPtr& rhs) {
^
```
**be/src/olap/base_tablet.cpp:1470:** +1, including nesting penalty of 0,
nesting level increased to 1
```cpp
if (is_partial_update) {
^
```
**be/src/olap/base_tablet.cpp:1483:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
if (!rowsets_skip_alignment.empty()) {
^
```
**be/src/olap/base_tablet.cpp:1488:** +1, including nesting penalty of 0,
nesting level increased to 1
```cpp
DBUG_EXECUTE_IF("BaseTablet::update_delete_bitmap.enable_spin_wait", {
^
```
**be/src/util/debug_points.h:36:** expanded from macro 'DBUG_EXECUTE_IF'
```cpp
if (UNLIKELY(config::enable_debug_points)) {
\
^
```
**be/src/olap/base_tablet.cpp:1488:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
DBUG_EXECUTE_IF("BaseTablet::update_delete_bitmap.enable_spin_wait", {
^
```
**be/src/util/debug_points.h:38:** expanded from macro 'DBUG_EXECUTE_IF'
```cpp
if (dp) {
\
^
```
**be/src/olap/base_tablet.cpp:1490:** +3, including nesting penalty of 2,
nesting level increased to 3
```cpp
while
(DebugPoints::instance()->is_enable("BaseTablet::update_delete_bitmap.block")) {
^
```
**be/src/olap/base_tablet.cpp:1493:** +4, including nesting penalty of 3,
nesting level increased to 4
```cpp
if (block_dp) {
^
```
**be/src/olap/base_tablet.cpp:1495:** +5, including nesting penalty of 4,
nesting level increased to 5
```cpp
if (wait_token != token) {
^
```
**be/src/olap/base_tablet.cpp:1503:** +1, including nesting penalty of 0,
nesting level increased to 1
```cpp
if (!rowsets_skip_alignment.empty()) {
^
```
**be/src/olap/base_tablet.cpp:1506:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
RETURN_IF_ERROR(calc_delete_bitmap(self, rowset, segments,
rowsets_skip_alignment,
^
```
**be/src/common/status.h:629:** expanded from macro 'RETURN_IF_ERROR'
```cpp
do { \
^
```
**be/src/olap/base_tablet.cpp:1506:** +3, including nesting penalty of 2,
nesting level increased to 3
```cpp
RETURN_IF_ERROR(calc_delete_bitmap(self, rowset, segments,
rowsets_skip_alignment,
^
```
**be/src/common/status.h:631:** expanded from macro 'RETURN_IF_ERROR'
```cpp
if (UNLIKELY(!_status_.ok())) { \
^
```
**be/src/olap/base_tablet.cpp:1509:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
RETURN_IF_ERROR(token->wait());
^
```
**be/src/common/status.h:629:** expanded from macro 'RETURN_IF_ERROR'
```cpp
do { \
^
```
**be/src/olap/base_tablet.cpp:1509:** +3, including nesting penalty of 2,
nesting level increased to 3
```cpp
RETURN_IF_ERROR(token->wait());
^
```
**be/src/common/status.h:631:** expanded from macro 'RETURN_IF_ERROR'
```cpp
if (UNLIKELY(!_status_.ok())) { \
^
```
**be/src/olap/base_tablet.cpp:1514:** +1, including nesting penalty of 0,
nesting level increased to 1
```cpp
if (segments.size() <= 1) {
^
```
**be/src/olap/base_tablet.cpp:1515:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
RETURN_IF_ERROR(calc_delete_bitmap(self, rowset, segments,
specified_rowsets, delete_bitmap,
^
```
**be/src/common/status.h:629:** expanded from macro 'RETURN_IF_ERROR'
```cpp
do { \
^
```
**be/src/olap/base_tablet.cpp:1515:** +3, including nesting penalty of 2,
nesting level increased to 3
```cpp
RETURN_IF_ERROR(calc_delete_bitmap(self, rowset, segments,
specified_rowsets, delete_bitmap,
^
```
**be/src/common/status.h:631:** expanded from macro 'RETURN_IF_ERROR'
```cpp
if (UNLIKELY(!_status_.ok())) { \
^
```
**be/src/olap/base_tablet.cpp:1519:** +1, nesting level increased to 1
```cpp
} else {
^
```
**be/src/olap/base_tablet.cpp:1521:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
RETURN_IF_ERROR(calc_delete_bitmap(self, rowset, segments,
specified_rowsets, delete_bitmap,
^
```
**be/src/common/status.h:629:** expanded from macro 'RETURN_IF_ERROR'
```cpp
do { \
^
```
**be/src/olap/base_tablet.cpp:1521:** +3, including nesting penalty of 2,
nesting level increased to 3
```cpp
RETURN_IF_ERROR(calc_delete_bitmap(self, rowset, segments,
specified_rowsets, delete_bitmap,
^
```
**be/src/common/status.h:631:** expanded from macro 'RETURN_IF_ERROR'
```cpp
if (UNLIKELY(!_status_.ok())) { \
^
```
**be/src/olap/base_tablet.cpp:1524:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
RETURN_IF_ERROR(token->wait());
^
```
**be/src/common/status.h:629:** expanded from macro 'RETURN_IF_ERROR'
```cpp
do { \
^
```
**be/src/olap/base_tablet.cpp:1524:** +3, including nesting penalty of 2,
nesting level increased to 3
```cpp
RETURN_IF_ERROR(token->wait());
^
```
**be/src/common/status.h:631:** expanded from macro 'RETURN_IF_ERROR'
```cpp
if (UNLIKELY(!_status_.ok())) { \
^
```
**be/src/olap/base_tablet.cpp:1532:** +1, including nesting penalty of 0,
nesting level increased to 1
```cpp
if (config::enable_merge_on_write_correctness_check &&
rowset->num_rows() != 0) {
^
```
**be/src/olap/base_tablet.cpp:1532:** +1
```cpp
if (config::enable_merge_on_write_correctness_check &&
rowset->num_rows() != 0) {
^
```
**be/src/olap/base_tablet.cpp:1537:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
if (!st.ok()) {
^
```
**be/src/olap/base_tablet.cpp:1542:** +1, including nesting penalty of 0,
nesting level increased to 1
```cpp
if (transient_rs_writer) {
^
```
**be/src/olap/base_tablet.cpp:1544:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
DBUG_EXECUTE_IF("Tablet.update_delete_bitmap.partial_update_write_rowset_fail",
{
^
```
**be/src/util/debug_points.h:36:** expanded from macro 'DBUG_EXECUTE_IF'
```cpp
if (UNLIKELY(config::enable_debug_points)) {
\
^
```
**be/src/olap/base_tablet.cpp:1544:** +3, including nesting penalty of 2,
nesting level increased to 3
```cpp
DBUG_EXECUTE_IF("Tablet.update_delete_bitmap.partial_update_write_rowset_fail",
{
^
```
**be/src/util/debug_points.h:38:** expanded from macro 'DBUG_EXECUTE_IF'
```cpp
if (dp) {
\
^
```
**be/src/olap/base_tablet.cpp:1545:** +4, including nesting penalty of 3,
nesting level increased to 4
```cpp
if (rand() % 100 < (100 * dp->param("percent", 0.5))) {
^
```
**be/src/olap/base_tablet.cpp:1553:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
RETURN_IF_ERROR(transient_rs_writer->flush());
^
```
**be/src/common/status.h:629:** expanded from macro 'RETURN_IF_ERROR'
```cpp
do { \
^
```
**be/src/olap/base_tablet.cpp:1553:** +3, including nesting penalty of 2,
nesting level increased to 3
```cpp
RETURN_IF_ERROR(transient_rs_writer->flush());
^
```
**be/src/common/status.h:631:** expanded from macro 'RETURN_IF_ERROR'
```cpp
if (UNLIKELY(!_status_.ok())) { \
^
```
**be/src/olap/base_tablet.cpp:1555:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
RETURN_IF_ERROR(transient_rs_writer->build(transient_rowset));
^
```
**be/src/common/status.h:629:** expanded from macro 'RETURN_IF_ERROR'
```cpp
do { \
^
```
**be/src/olap/base_tablet.cpp:1555:** +3, including nesting penalty of 2,
nesting level increased to 3
```cpp
RETURN_IF_ERROR(transient_rs_writer->build(transient_rowset));
^
```
**be/src/common/status.h:631:** expanded from macro 'RETURN_IF_ERROR'
```cpp
if (UNLIKELY(!_status_.ok())) { \
^
```
**be/src/olap/base_tablet.cpp:1572:** nesting level increased to 1
```cpp
[](size_t sum, const segment_v2::SegmentSharedPtr& s) { return
sum += s->num_rows(); });
^
```
**be/src/olap/base_tablet.cpp:1574:** +1, including nesting penalty of 0,
nesting level increased to 1
```cpp
RETURN_IF_ERROR(self->save_delete_bitmap(txn_info, txn_id, delete_bitmap,
^
```
**be/src/common/status.h:629:** expanded from macro 'RETURN_IF_ERROR'
```cpp
do { \
^
```
**be/src/olap/base_tablet.cpp:1574:** +2, including nesting penalty of 1,
nesting level increased to 2
```cpp
RETURN_IF_ERROR(self->save_delete_bitmap(txn_info, txn_id, delete_bitmap,
^
```
**be/src/common/status.h:631:** expanded from macro 'RETURN_IF_ERROR'
```cpp
if (UNLIKELY(!_status_.ok())) { \
^
```
</details>
##########
be/src/olap/base_tablet.cpp:
##########
@@ -128,6 +128,44 @@ BaseTablet::~BaseTablet() {
g_total_tablet_num << -1;
}
+Status BaseTablet::capture_sub_txn_rs_readers(
Review Comment:
warning: method 'capture_sub_txn_rs_readers' can be made const
[readability-make-member-function-const]
be/src/olap/base_tablet.cpp:133:
```diff
- std::vector<std::shared_ptr<TabletTxnInfo>>* tablet_txn_infos) {
+ std::vector<std::shared_ptr<TabletTxnInfo>>* tablet_txn_infos)
const {
```
##########
be/src/olap/base_tablet.cpp:
##########
@@ -1505,7 +1573,210 @@
[](size_t sum, const segment_v2::SegmentSharedPtr& s) { return sum
+= s->num_rows(); });
auto t5 = watch.get_elapse_time_us();
RETURN_IF_ERROR(self->save_delete_bitmap(txn_info, txn_id, delete_bitmap,
- transient_rs_writer.get(),
cur_rowset_ids));
+ transient_rs_writer.get(),
cur_rowset_ids,
+ base_txn_id /* lock_id */));
+ LOG(INFO) << "[Publish] construct delete bitmap tablet: " <<
self->tablet_id()
+ << ", rowset_ids to add: " << rowset_ids_to_add.size()
+ << ", rowset_ids to del: " << rowset_ids_to_del.size()
+ << ", cur version: " << cur_version << ", transaction_id: " <<
txn_id << ","
+ << ss.str() << " , total rows: " << total_rows
+ << ", update delete_bitmap cost: " << watch.get_elapse_time_us()
- t5 << "(us)";
+ return Status::OK();
+}
+
+Status BaseTablet::update_delete_bitmap(const BaseTabletSPtr& self,
TabletTxnInfo* txn_info,
+ int64_t txn_id, int64_t
txn_expiration) {
+ return update_delete_bitmap(self, txn_info, txn_id, txn_expiration,
nullptr, -1,
+ txn_info->rowset->start_version(), nullptr);
+}
+
+Status BaseTablet::txn_load_update_delete_bitmap(
+ const BaseTabletSPtr& self, const std::vector<RowsetSharedPtr>&
visible_rowsets,
+ const std::vector<RowsetSharedPtr>& all_non_visible_rowsets, int64_t
visible_version,
+ const std::vector<int64_t>& sub_txn_ids,
+ std::vector<std::shared_ptr<TabletTxnInfo>>& tablet_txn_infos,
+ DeleteBitmapPtr tablet_delete_bitmap) {
+ // calculate delete bitmap of sub txn rowsets
+ for (auto i = 0; i < tablet_txn_infos.size(); ++i) {
+ auto& tablet_txn_info = tablet_txn_infos[i];
+ auto sub_txn_id = sub_txn_ids[i];
+ if (tablet_txn_info->rowset->rowset_meta()->has_delete_predicate()) {
+ continue;
+ }
+ std::vector<RowsetSharedPtr> non_visible_rowsets;
+ for (auto j = 0; j < i; ++j) {
+ auto rowset = all_non_visible_rowsets[j];
+ non_visible_rowsets.push_back(rowset);
+ }
+ tablet_txn_info->delete_bitmap->delete_bitmap.clear();
+ tablet_txn_info->rowset_ids.clear();
+ // TODO the version is set when capture?
+ int64_t tmp_version = visible_version + i + 1;
+ RETURN_IF_ERROR(self->txn_load_update_delete_bitmap(
+ self, tablet_txn_info.get(), sub_txn_id, -1, visible_rowsets,
non_visible_rowsets,
+ tablet_delete_bitmap));
+ // merge delete bitmap of sub txn rowsets
+ auto& dm = tablet_txn_info->delete_bitmap->delete_bitmap;
+ for (auto it = dm.begin(); it != dm.end(); ++it) {
+ if (std::get<1>(it->first) != DeleteBitmap::INVALID_SEGMENT_ID) {
+ tablet_delete_bitmap->merge(
+ {std::get<0>(it->first), std::get<1>(it->first),
tmp_version}, it->second);
+ }
+ }
+ }
+ return Status::OK();
+}
+
+Status BaseTablet::txn_load_update_delete_bitmap(
+ const BaseTabletSPtr& self, TabletTxnInfo* txn_info, int64_t txn_id,
int64_t txn_expiration,
+ const std::vector<RowsetSharedPtr>& visible_rowsets,
+ const std::vector<RowsetSharedPtr>& non_visible_rowsets,
Review Comment:
warning: function 'txn_load_update_delete_bitmap' exceeds recommended
size/complexity thresholds [readability-function-size]
```cpp
Status BaseTablet::txn_load_update_delete_bitmap(
^
```
<details>
<summary>Additional context</summary>
**be/src/olap/base_tablet.cpp:1632:** 154 lines including whitespace and
comments (threshold 80)
```cpp
Status BaseTablet::txn_load_update_delete_bitmap(
^
```
</details>
##########
cloud/src/meta-service/meta_service.cpp:
##########
@@ -1410,6 +1410,108 @@ static bool try_fetch_and_parse_schema(Transaction*
txn, RowsetMetaCloudPB& rows
return true;
}
+void MetaServiceImpl::get_tmp_rowset(::google::protobuf::RpcController*
controller,
Review Comment:
warning: function 'get_tmp_rowset' exceeds recommended size/complexity
thresholds [readability-function-size]
```cpp
void MetaServiceImpl::get_tmp_rowset(::google::protobuf::RpcController*
controller,
^
```
<details>
<summary>Additional context</summary>
**cloud/src/meta-service/meta_service.cpp:1412:** 97 lines including
whitespace and comments (threshold 80)
```cpp
void MetaServiceImpl::get_tmp_rowset(::google::protobuf::RpcController*
controller,
^
```
</details>
##########
cloud/src/meta-service/meta_service.cpp:
##########
@@ -1410,6 +1410,108 @@
return true;
}
+void MetaServiceImpl::get_tmp_rowset(::google::protobuf::RpcController*
controller,
+ const GetTmpRowsetRequest* request,
+ GetTmpRowsetResponse* response,
+ ::google::protobuf::Closure* done) {
+ RPC_PREPROCESS(get_tmp_rowset);
+ instance_id = get_instance_id(resource_mgr_, request->cloud_unique_id());
+ if (instance_id.empty()) {
+ code = MetaServiceCode::INVALID_ARGUMENT;
+ msg = "empty instance_id";
+ LOG(INFO) << msg << ", cloud_unique_id=" << request->cloud_unique_id();
+ return;
+ }
+ RPC_RATE_LIMIT(get_tmp_rowset)
+ if (!request->has_index_id()) {
+ code = MetaServiceCode::INVALID_ARGUMENT;
+ msg = "empty index id";
+ return;
+ }
+ if (!request->has_tablet_id()) {
+ code = MetaServiceCode::INVALID_ARGUMENT;
+ msg = "empty tablet id";
+ return;
+ }
+ if (request->txn_ids().empty()) {
+ code = MetaServiceCode::INVALID_ARGUMENT;
+ msg = "empty txn ids";
+ return;
+ }
+ std::unique_ptr<Transaction> txn;
+ TxnErrorCode err = txn_kv_->create_txn(&txn);
+ if (err != TxnErrorCode::TXN_OK) {
+ code = cast_as<ErrCategory::CREATE>(err);
+ msg = "failed to create txn";
+ return;
+ }
+ std::vector<std::string> tmp_rowset_keys;
+ std::vector<std::optional<std::string>> tmp_rowset_values;
+ tmp_rowset_keys.reserve(request->txn_ids().size());
+ tmp_rowset_values.reserve(request->txn_ids().size());
+ int64_t tablet_id = request->tablet_id();
+ int64_t index_id = request->index_id();
+ // TODO avoid too many txn ids, should limit in fe
+ for (const auto& txn_id : request->txn_ids()) {
+ tmp_rowset_keys.push_back(meta_rowset_tmp_key({instance_id, txn_id,
tablet_id}));
+ }
+ err = txn->batch_get(&tmp_rowset_values, tmp_rowset_keys);
+ if (err != TxnErrorCode::TXN_OK) {
+ code = cast_as<ErrCategory::READ>(err);
+ ss << "failed to batch get tmp rowset, instance_id=" << instance_id
+ << " tablet_id=" << tablet_id << " err=" << err;
+ msg = ss.str();
+ LOG(WARNING) << msg;
+ return;
+ }
+ // get referenced schema
+ std::unordered_map<int32_t, doris::TabletSchemaCloudPB*> version_to_schema;
+ for (size_t i = 0; i < tmp_rowset_keys.size(); ++i) {
+ if (!tmp_rowset_values[i].has_value()) [[unlikely]] {
+ code = MetaServiceCode::KV_TXN_GET_ERR;
+ ss << "failed to get tmp rowset, err=not found, instance_id=" <<
instance_id
+ << " tablet_id=" << tablet_id << " txn_id=" <<
request->txn_ids(i)
+ << " key=" << hex(tmp_rowset_keys[i]);
+ msg = ss.str();
+ LOG(WARNING) << msg;
+ return;
+ }
+ auto rowset_meta = response->add_rowset_meta();
+ if (!rowset_meta->ParseFromArray(tmp_rowset_values[i]->data(),
+ tmp_rowset_values[i]->size())) {
+ code = MetaServiceCode::PROTOBUF_PARSE_ERR;
+ ss << "malformed rowset meta value, instance_id=" << instance_id
+ << " tablet_id=" << tablet_id << " txn_id=" <<
request->txn_ids(i)
+ << " key=" << hex(tmp_rowset_keys[i]);
+ msg = ss.str();
+ LOG(WARNING) << msg;
+ return;
+ }
+ // set tablet schema
+ if (rowset_meta->has_tablet_schema()) continue;
Review Comment:
warning: statement should be inside braces
[readability-braces-around-statements]
```suggestion
if (rowset_meta->has_tablet_schema()) { continue;
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]