This is an automated email from the ASF dual-hosted git repository.
yiguolei 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 124c1b16cf [performance](load) remove unnecessary lock in
TabletsChannel::add_batch (#22703)
124c1b16cf is described below
commit 124c1b16cf11b753839d31398fa36db2572f0c7d
Author: Kaijie Chen <[email protected]>
AuthorDate: Tue Aug 8 22:08:21 2023 +0800
[performance](load) remove unnecessary lock in TabletsChannel::add_batch
(#22703)
This lock was introduced by lazy open in #18874.
It's unnecessary and costly to hold a lock while writing data to
DeltaWriter in the first place.
However, since lazy open is reverted in #21821, we can completely omit this
lock.
_tablet_writers is not supposed to be changed once we've reached
TabletsChannel::add_batch.
---
be/src/runtime/tablets_channel.cpp | 37 +++++++++++++++++--------------------
1 file changed, 17 insertions(+), 20 deletions(-)
diff --git a/be/src/runtime/tablets_channel.cpp
b/be/src/runtime/tablets_channel.cpp
index f25f38760e..d08cd126d0 100644
--- a/be/src/runtime/tablets_channel.cpp
+++ b/be/src/runtime/tablets_channel.cpp
@@ -446,26 +446,23 @@ Status TabletsChannel::add_batch(const
PTabletWriterAddBlockRequest& request,
std::function<Status(DeltaWriter * writer)>
write_func) {
google::protobuf::RepeatedPtrField<PTabletError>* tablet_errors =
response->mutable_tablet_errors();
- {
- std::lock_guard<SpinLock> l(_tablet_writers_lock);
- auto tablet_writer_it = _tablet_writers.find(tablet_id);
- if (tablet_writer_it == _tablet_writers.end()) {
- return Status::InternalError("unknown tablet to append data,
tablet={}");
- }
- Status st = write_func(tablet_writer_it->second);
- if (!st.ok()) {
- auto err_msg =
- fmt::format("tablet writer write failed, tablet_id={},
txn_id={}, err={}",
- tablet_id, _txn_id, st.to_string());
- LOG(WARNING) << err_msg;
- PTabletError* error = tablet_errors->Add();
- error->set_tablet_id(tablet_id);
- error->set_msg(err_msg);
- tablet_writer_it->second->cancel_with_status(st);
- _add_broken_tablet(tablet_id);
- // continue write to other tablet.
- // the error will return back to sender.
- }
+ auto tablet_writer_it = _tablet_writers.find(tablet_id);
+ if (tablet_writer_it == _tablet_writers.end()) {
+ return Status::InternalError("unknown tablet to append data,
tablet={}");
+ }
+ Status st = write_func(tablet_writer_it->second);
+ if (!st.ok()) {
+ auto err_msg =
+ fmt::format("tablet writer write failed, tablet_id={},
txn_id={}, err={}",
+ tablet_id, _txn_id, st.to_string());
+ LOG(WARNING) << err_msg;
+ PTabletError* error = tablet_errors->Add();
+ error->set_tablet_id(tablet_id);
+ error->set_msg(err_msg);
+ tablet_writer_it->second->cancel_with_status(st);
+ _add_broken_tablet(tablet_id);
+ // continue write to other tablet.
+ // the error will return back to sender.
}
return Status::OK();
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]